Skip to content

Commit

Permalink
feat(PublicSharePassword): Open password-protected link in the browser
Browse files Browse the repository at this point in the history
Quick hack as long as the Backend doesn't support password management with bearer token
  • Loading branch information
FabianDevel committed Sep 16, 2024
1 parent e1e2167 commit ced2373
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,26 @@
*/
package com.infomaniak.drive.ui.publicShare

import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import com.infomaniak.drive.BuildConfig
import com.infomaniak.drive.R
import com.infomaniak.drive.databinding.FragmentPublicSharePasswordBinding
import com.infomaniak.drive.ui.publicShare.PublicShareActivity.Companion.PUBLIC_SHARE_TAG
import com.infomaniak.lib.core.api.ApiController
import com.infomaniak.lib.core.models.ApiError
import com.infomaniak.lib.core.utils.*
import com.infomaniak.lib.core.utils.SnackbarUtils.showSnackbar
import com.infomaniak.lib.core.R as RCore

class PublicSharePasswordFragment : Fragment() {

Expand All @@ -44,11 +50,35 @@ class PublicSharePasswordFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?): Unit = with(binding) {
super.onViewCreated(view, savedInstanceState)

setupValidationButton()
// TODO: Remove this and call setupValidationButton instead
// Also change the layout (description, button's title, input visibility)
passwordValidateButton.setOnClickListener { requireContext().openDeepLinkInBrowser(getPublicShareUrl()) }

publicSharePasswordEditText.addTextChangedListener { publicSharePasswordLayout.error = null }
}

//region Hack TODO: Remove this when the back will support bearer token
private fun getPublicShareUrl(): String {
return "${BuildConfig.SHARE_URL_V1}share/${publicShareViewModel.driveId}/${publicShareViewModel.publicShareUuid}"
}

private fun Context.openDeepLinkInBrowser(url: String) = runCatching {
Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER).apply {
setData(Uri.parse(url))
flags = Intent.FLAG_ACTIVITY_NO_HISTORY
}.also(::startActivity)
requireActivity().finishAndRemoveTask()
}.onFailure { exception ->
val errorMessage = if (exception is ActivityNotFoundException) {
RCore.string.browserNotFound
} else {
RCore.string.anErrorHasOccurred
}

showToast(errorMessage)
}
//endregion

private fun setupValidationButton() = with(binding.passwordValidateButton) {
initProgress(viewLifecycleOwner)
setOnClickListener {
Expand Down
10 changes: 6 additions & 4 deletions app/src/main/res/layout/fragment_public_share_password.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
app:layout_constraintEnd_toStartOf="@id/end"
app:layout_constraintStart_toEndOf="@id/start"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.33">
app:layout_constraintVertical_bias="0.4">

<ImageView
android:id="@+id/icon"
Expand Down Expand Up @@ -82,7 +82,7 @@
android:layout_marginHorizontal="@dimen/marginStandardMedium"
android:layout_marginTop="@dimen/marginStandardMedium"
android:gravity="center"
android:text="@string/publicSharePasswordNeededDescription"
android:text="@string/publicSharePasswordNotSupportedDescription"
app:layout_constraintBottom_toTopOf="@id/publicSharePasswordLayout"
app:layout_constraintEnd_toStartOf="@id/end"
app:layout_constraintStart_toEndOf="@id/start"
Expand All @@ -96,12 +96,14 @@
android:layout_marginHorizontal="@dimen/marginStandardMedium"
android:layout_marginTop="@dimen/marginStandard"
android:hint="@string/allPasswordHint"
android:visibility="gone"
app:errorIconDrawable="@null"
app:layout_constraintEnd_toStartOf="@id/end"
app:layout_constraintStart_toEndOf="@id/start"
app:layout_constraintTop_toBottomOf="@id/passwordNeededDescription"
app:passwordToggleEnabled="true"
app:passwordToggleTint="@color/iconColor">
app:passwordToggleTint="@color/iconColor"
tools:visibility="visible">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/publicSharePasswordEditText"
Expand All @@ -117,7 +119,7 @@
style="@style/ButtonInfomaniak"
android:layout_width="0dp"
android:layout_marginBottom="@dimen/marginStandardMedium"
android:text="@string/buttonValid"
android:text="@string/buttonOpenInBrowser"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/end"
app:layout_constraintStart_toEndOf="@id/start" />
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
<string name="buttonNoDriveAnotherUser">Ein anderes Infomaniak-Profil verwenden</string>
<string name="buttonNoDriveFreeTest">Kostenlos testen</string>
<string name="buttonOpenDocument">Dokument öffnen</string>
<string name="buttonOpenInBrowser">Im Browser öffnen</string>
<string name="buttonOpenReadOnly">Im Lese-Modus öffnen</string>
<string name="buttonPlayerFfwd">Einige Sekunden vorspulen</string>
<string name="buttonPlayerNext">Weiter</string>
Expand Down Expand Up @@ -554,6 +555,7 @@
<string name="previewVideoSourceError">Videodatei wird vom Videoplayer nicht unterstützt</string>
<string name="publicSharePasswordNeededDescription">Bitte geben Sie das Passwort ein, das Sie erhalten haben, um auf den Inhalt zuzugreifen.</string>
<string name="publicSharePasswordNeededTitle">Sicherer Inhalt</string>
<string name="publicSharePasswordNotSupportedDescription">Passwortgeschützte Links sind in der mobilen Anwendung noch nicht verfügbar.</string>
<string name="publicSharedLinkTitle">Öffentlicher Freigabelink</string>
<string name="recentActivityMeTitle">Durch mich</string>
<string name="recentActivityMyTeam">Durch mein Team</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
<string name="buttonNoDriveAnotherUser">Utilizar otro perfil Infomaniak</string>
<string name="buttonNoDriveFreeTest">Probar gratuitamente</string>
<string name="buttonOpenDocument">Abrir el documento</string>
<string name="buttonOpenInBrowser">Abrir en el navegador</string>
<string name="buttonOpenReadOnly">Abrir en modo de solo lectura</string>
<string name="buttonPlayerFfwd">Avanzar unos segundos</string>
<string name="buttonPlayerNext">Siguiente</string>
Expand Down Expand Up @@ -554,6 +555,7 @@
<string name="previewVideoSourceError">El archivo de vídeo no es compatible con el lector de vídeo</string>
<string name="publicSharePasswordNeededDescription">Introduzca la contraseña que se le ha facilitado para acceder al contenido.</string>
<string name="publicSharePasswordNeededTitle">Contenido seguro</string>
<string name="publicSharePasswordNotSupportedDescription">Los enlaces protegidos por contraseña aún no están disponibles en la aplicación móvil.</string>
<string name="publicSharedLinkTitle">Enlace de uso compartido público</string>
<string name="recentActivityMeTitle">Por mí</string>
<string name="recentActivityMyTeam">Por mi equipo</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
<string name="buttonNoDriveAnotherUser">Utiliser un autre profil Infomaniak</string>
<string name="buttonNoDriveFreeTest">Tester gratuitement</string>
<string name="buttonOpenDocument">Ouvrir le document</string>
<string name="buttonOpenInBrowser">Ouvrir dans le navigateur</string>
<string name="buttonOpenReadOnly">Ouvrir en lecture seule</string>
<string name="buttonPlayerFfwd">Avancer de quelques secondes</string>
<string name="buttonPlayerNext">Suivant</string>
Expand Down Expand Up @@ -554,6 +555,7 @@
<string name="previewVideoSourceError">Fichier vidéo non pris en charge par le lecteur vidéo</string>
<string name="publicSharePasswordNeededDescription">Veuillez saisir le mot de passe qui vous a été fourni pour accéder au contenu.</string>
<string name="publicSharePasswordNeededTitle">Contenu sécurisé</string>
<string name="publicSharePasswordNotSupportedDescription">Les liens protégés par mot de passe ne sont pas encore disponibles sur l’application mobile.</string>
<string name="publicSharedLinkTitle">Lien de partage public</string>
<string name="recentActivityMeTitle">Par moi</string>
<string name="recentActivityMyTeam">Par mon équipe</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
<string name="buttonNoDriveAnotherUser">Utilizza un altro profilo Infomaniak</string>
<string name="buttonNoDriveFreeTest">Prova gratuitamente</string>
<string name="buttonOpenDocument">Aprire documento</string>
<string name="buttonOpenInBrowser">Aprire nel browser</string>
<string name="buttonOpenReadOnly">Aprire in modalità di sola lettura</string>
<string name="buttonPlayerFfwd">Vai avanti di alcuni secondi</string>
<string name="buttonPlayerNext">Avanti</string>
Expand Down Expand Up @@ -554,6 +555,7 @@
<string name="previewVideoSourceError">File video non supportato dal lettore</string>
<string name="publicSharePasswordNeededDescription">Inserite la password che vi è stata fornita per accedere al contenuto.</string>
<string name="publicSharePasswordNeededTitle">Contenuto sicuro</string>
<string name="publicSharePasswordNotSupportedDescription">I link protetti da password non sono ancora disponibili nell’applicazione mobile.</string>
<string name="publicSharedLinkTitle">Link di condivisione pubblica</string>
<string name="recentActivityMeTitle">Da parte mia</string>
<string name="recentActivityMyTeam">Da parte del mio team</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@
<string name="buttonNoDriveAnotherUser">Use a different Infomaniak profile</string>
<string name="buttonNoDriveFreeTest">Free trial</string>
<string name="buttonOpenDocument">Open document</string>
<string name="buttonOpenInBrowser">Open in browser</string>
<string name="buttonOpenReadOnly">Open in read-only mode</string>
<string name="buttonPlayerFfwd">Forward a few seconds</string>
<string name="buttonPlayerNext">Next</string>
Expand Down Expand Up @@ -565,6 +566,7 @@
<string name="previewVideoSourceError">Video file not supported by the video player</string>
<string name="publicSharePasswordNeededDescription">Please enter the password provided to access the content.</string>
<string name="publicSharePasswordNeededTitle">Protected content</string>
<string name="publicSharePasswordNotSupportedDescription">Password-protected links are not yet available on the mobile application.</string>
<string name="publicSharedLinkTitle">Public sharing link</string>
<string name="recentActivityMeTitle">By me</string>
<string name="recentActivityMyTeam">By my team</string>
Expand Down

0 comments on commit ced2373

Please sign in to comment.