diff --git a/README.md b/README.md
index aa7fe19f..034470e2 100644
--- a/README.md
+++ b/README.md
@@ -41,6 +41,7 @@ Also available at **[IzzyOnDroid (F-Droid)](https://apt.izzysoft.de/fdroid/index
![English](https://img.shields.io/badge/English-100%25-brightgreen)
![Chinese (China)](https://img.shields.io/badge/Chinese%20(China)-100%25-brightgreen)
![Dutch](https://img.shields.io/badge/Dutch-97%25-yellow)
+![French](https://img.shields.io/badge/French-100%25-brightgreen)
![German](https://img.shields.io/badge/German-100%25-brightgreen)
![Portuguese (Brazil)](https://img.shields.io/badge/Portuguese%20(Brazil)-97%25-yellow)
![Spanish](https://img.shields.io/badge/Spanish-97%25-yellow)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cee734a4..2f0ce7f7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,6 +19,8 @@
package="dev.leonlatsch.photok">
+
+
= sharedUris.toList()
- fun getUriCount(): Int = sharedUris.size
-
fun clear() = sharedUris.clear()
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/leonlatsch/photok/main/ui/MainActivity.kt b/app/src/main/java/dev/leonlatsch/photok/main/ui/MainActivity.kt
index a52436e6..a30e5f32 100644
--- a/app/src/main/java/dev/leonlatsch/photok/main/ui/MainActivity.kt
+++ b/app/src/main/java/dev/leonlatsch/photok/main/ui/MainActivity.kt
@@ -16,12 +16,12 @@
package dev.leonlatsch.photok.main.ui
-import android.Manifest
import android.content.Intent
import android.content.res.Configuration
import android.net.Uri
import android.os.Bundle
import androidx.activity.viewModels
+import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import dev.leonlatsch.photok.ApplicationState
import dev.leonlatsch.photok.R
@@ -30,9 +30,12 @@ import dev.leonlatsch.photok.gallery.ui.importing.ImportBottomSheetDialogFragmen
import dev.leonlatsch.photok.other.REQ_PERM_SHARED_IMPORT
import dev.leonlatsch.photok.other.extensions.getBaseApplication
import dev.leonlatsch.photok.other.extensions.setNavBarColorRes
+import dev.leonlatsch.photok.permissions.getReadImagesPermission
+import dev.leonlatsch.photok.permissions.getReadVideosPermission
import dev.leonlatsch.photok.settings.data.Config
import dev.leonlatsch.photok.uicomponnets.Dialogs
import dev.leonlatsch.photok.uicomponnets.bindings.BindableActivity
+import kotlinx.coroutines.flow.collectLatest
import pub.devrel.easypermissions.AfterPermissionGranted
import pub.devrel.easypermissions.EasyPermissions
import javax.inject.Inject
@@ -63,15 +66,21 @@ class MainActivity : BindableActivity(R.layout.activity_mai
super.onPostCreate(savedInstanceState)
dispatchIntent()
- getBaseApplication().rawApplicationState.observe(this) {
- if (it == ApplicationState.UNLOCKED && viewModel.getUriCountFromStore() > 0) {
- val urisToImport = viewModel.consumeSharedUris()
-
- confirmImport(urisToImport) {
- startImportOfSharedUris(urisToImport)
+ lifecycleScope.launchWhenCreated {
+ viewModel.consumedUrisFromStore.collectLatest {
+ if (it.isNotEmpty()) {
+ confirmImport(it.size) {
+ startImportOfSharedUris()
+ }
}
}
}
+
+ getBaseApplication().rawApplicationState.observe(this) {
+ if (it == ApplicationState.UNLOCKED) {
+ viewModel.consumeSharedUris()
+ }
+ }
}
private fun dispatchIntent() {
@@ -86,12 +95,12 @@ class MainActivity : BindableActivity(R.layout.activity_mai
}
}
- private fun confirmImport(urisToImport: List, onImportConfirmed: () -> Unit) {
+ private fun confirmImport(amount: Int, onImportConfirmed: () -> Unit) {
Dialogs.showConfirmDialog(
this,
String.format(
getString(R.string.import_sharted_question),
- urisToImport.size
+ amount
)
) { _, _ ->
onImportConfirmed()
@@ -102,10 +111,13 @@ class MainActivity : BindableActivity(R.layout.activity_mai
* Start importing after the overview of photos.
*/
@AfterPermissionGranted(REQ_PERM_SHARED_IMPORT)
- fun startImportOfSharedUris(urisToImport: List) {
+ fun startImportOfSharedUris() {
+ val urisToImport = viewModel.consumedUrisFromStore.value
+
if (EasyPermissions.hasPermissions(
this,
- Manifest.permission.READ_EXTERNAL_STORAGE
+ getReadImagesPermission(),
+ getReadVideosPermission()
)
) {
ImportBottomSheetDialogFragment(urisToImport).show(
@@ -117,7 +129,8 @@ class MainActivity : BindableActivity(R.layout.activity_mai
this,
getString(R.string.import_permission_rationale),
REQ_PERM_SHARED_IMPORT,
- Manifest.permission.READ_EXTERNAL_STORAGE
+ getReadImagesPermission(),
+ getReadVideosPermission()
)
}
}
diff --git a/app/src/main/java/dev/leonlatsch/photok/main/ui/MainViewModel.kt b/app/src/main/java/dev/leonlatsch/photok/main/ui/MainViewModel.kt
index f904bcef..481b075d 100644
--- a/app/src/main/java/dev/leonlatsch/photok/main/ui/MainViewModel.kt
+++ b/app/src/main/java/dev/leonlatsch/photok/main/ui/MainViewModel.kt
@@ -21,6 +21,7 @@ import android.net.Uri
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.leonlatsch.photok.gallery.ui.importing.SharedUrisStore
import dev.leonlatsch.photok.uicomponnets.bindings.ObservableViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
import javax.inject.Inject
/**
@@ -35,13 +36,12 @@ class MainViewModel @Inject constructor(
private val sharedUrisStore: SharedUrisStore,
) : ObservableViewModel(app) {
+ val consumedUrisFromStore = MutableStateFlow(emptyList())
+
fun addUriToSharedUriStore(uri: Uri) = sharedUrisStore.safeAddUri(uri)
- fun consumeSharedUris(): List {
- val sharedUris = sharedUrisStore.getUris()
+ fun consumeSharedUris() {
+ consumedUrisFromStore.value = sharedUrisStore.getUris()
sharedUrisStore.clear()
- return sharedUris
}
-
- fun getUriCountFromStore(): Int = sharedUrisStore.getUriCount()
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/leonlatsch/photok/other/Constants.kt b/app/src/main/java/dev/leonlatsch/photok/other/Constants.kt
index 14cf7795..54b0c1b1 100644
--- a/app/src/main/java/dev/leonlatsch/photok/other/Constants.kt
+++ b/app/src/main/java/dev/leonlatsch/photok/other/Constants.kt
@@ -28,5 +28,4 @@ const val INTENT_PHOTO_ID = "intent.photo.id"
const val REQ_PERM_IMPORT_PHOTOS = 10
const val REQ_PERM_IMPORT_VIDEOS = 11
const val REQ_PERM_EXPORT = 12
-const val REQ_PERM_RESTORE = 13
const val REQ_PERM_SHARED_IMPORT = 14
diff --git a/app/src/main/java/dev/leonlatsch/photok/permissions/MediaPermissions.kt b/app/src/main/java/dev/leonlatsch/photok/permissions/MediaPermissions.kt
new file mode 100644
index 00000000..183c0fa0
--- /dev/null
+++ b/app/src/main/java/dev/leonlatsch/photok/permissions/MediaPermissions.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2020-2022 Leon Latsch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dev.leonlatsch.photok.permissions
+
+import android.Manifest
+import android.os.Build
+
+fun getReadVideosPermission() =
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ Manifest.permission.READ_MEDIA_VIDEO
+ } else {
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ }
+
+fun getReadImagesPermission() =
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ Manifest.permission.READ_MEDIA_IMAGES
+ } else {
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ }
\ No newline at end of file
diff --git a/app/src/main/java/dev/leonlatsch/photok/uicomponnets/Chooser.kt b/app/src/main/java/dev/leonlatsch/photok/uicomponnets/Chooser.kt
index 8cabb821..e3a19931 100644
--- a/app/src/main/java/dev/leonlatsch/photok/uicomponnets/Chooser.kt
+++ b/app/src/main/java/dev/leonlatsch/photok/uicomponnets/Chooser.kt
@@ -47,7 +47,11 @@ class Chooser {
* Or request the [permission]
*/
fun show(fragment: Fragment) {
- if (EasyPermissions.hasPermissions(fragment.requireContext(), permission)) {
+ if (permission == null || EasyPermissions.hasPermissions(
+ fragment.requireContext(),
+ permission
+ )
+ ) {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.type = mimeType
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, allowMultiple)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
new file mode 100644
index 00000000..b26ba291
--- /dev/null
+++ b/app/src/main/res/values-fr/strings.xml
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+ Photok
+ Copyright \u00A9 2020–2022 Leon Latsch
+ /
+ %
+ |
+ Chargement…
+ Mot de passe
+ Supprimer
+ Exporter
+ Une erreur est survenue. Veuillez réessayer.
+ Oui
+ Non
+ OK
+ Êtes vous sûr?
+ •
+
+
+ Importation en cours
+ Photok a besoin d\'accéder à votre espace de stockage pour importer des fichiers.
+ Voulez-vous importer %1$d fichier(s) ?
+
+
+ Créer votre mot de passe
+ Entrer le mot de passe
+ Confirmer votre mot de passe
+ Fiabilité du mot de passe :
+ Créer
+ Faible
+ Modérée
+ Forte
+ \u26A0 Les mots de passe ne correspondent pas
+ Installer
+
+
+ Déverrouiller votre coffre-fort
+ Entrer le mot de passe
+ Déverrouiller
+ \u26A0 Mauvais mot de passe
+
+
+ Il n\'y a pas de fichier dans votre coffre-fort
+ Tous les fichiers
+
+
+ Importer
+ Photos
+ Vidéos
+ Sauvegarde
+ Ajouter des médias à Photok…
+
+
+ Fermer
+ Annuler
+ Terminé
+ Initialisation…
+ Annulé
+ \u26A0 Certains éléments n\'ont pas pu être traités
+
+
+ Détails
+ Nom du fichier :
+ Importé le :
+ Type de fichier :
+ Taille du fichier :
+
+
+ Verrouiller
+ Réglages
+
+
+ Tout sélectionner
+ Supprimer
+ Exporter
+
+
+ Voulez-vous vraiment supprimer %1$d fichier(s) ?
+ Voulez-vous vraiment supprimer ce fichier ?
+ Suppression en cours…
+
+
+ Voulez-vous vraiment exporter %1$d fichier(s) vers votre galerie ?
+ Voulez-vous vraiment exporter ce fichier vers votre galerie ?
+ Exportation en cours…
+ Photok a besoin d\'accéder à votre espace de stockage pour exporter des fichiers.
+ Exporté
+
+
+ Version :
+ Développé par :
+ leonlatsch.dev
+ https://leonlatsch.dev
+ Logiciel tiers
+ Politique de confidentialité
+ https://leonlatsch.dev/photok_privacy_policy
+ Nouvelles
+
+
+
+ Réglages
+
+ App
+ Thème
+ Défaut du système
+ Clair
+ Sombre
+
+ Galerie
+ Plein écran automatique
+ Entrer en mode plein écran lors de l\'ouverture d\'un fichier
+
+ Sécurité
+ Autoriser les captures d\'écran
+ Autorise la capture d\'écran. Nécessite un redémarrage.
+ Changer le mot de passe
+ Changez votre mot de passe
+ Délai de verrouillage automatique
+ Se verrouille en arrière-plan après un certain temps
+ Immédiatement
+ 1 Minute
+ 2 Minutes
+ 5 Minutes
+ 10 Minutes
+ Jamais
+ Code de démarrage secret
+ Code secret pour démarrer Photok à partir de l\'application téléphone.
+ Entrez *#*#[votre code]#*#* dans le clavier téléphonique pour lancer Photok.
+ *#*#
+ #*#*
+ Masquer l\'application
+ Masque l\'icône de l\'application du tiroir d\'applications.
+
+ Avancé
+ Utiliser avec précaution
+ Réinitialiser le coffre-fort
+ Effacer les données et réinitialiser le mot de passe
+ Voulez-vous VRAIMENT réinitialiser votre coffre-fort ? Toutes les données seront perdues !
+ Sauvegarde
+ Créer une sauvegarde de votre coffre-fort
+
+ Autre
+ Feedback
+ Envoyez-moi un e-mail avec des commentaires
+ Photok Feedback
+ Donnez votre avis sur Photok :)
+ dev.leonlatsch@gmail.com
+ Code source
+ Contribuer à Photok
+ https://github.com/leonlatsch/Photok
+ Crédits
+ Contributeurs et crédits
+ À propos
+ Informations sur Photok
+
+
+ Contributeurs
+ Visitez Photok sur GitHub pour voir tous les contributeurs
+ Icônes
+
+
+ Changer votre mot de passe
+ Ancien mot de passe
+ Nouveau mot de passe
+ Vérifier
+ Entrez votre nouveau mot de passe
+ Confirmez votre nouveau mot de passe
+ Changer le mot de passe
+ Sauvegarde recommandée !
Changer votre mot de passe nécessite de rechiffrer tous vos fichiers ! Voulez-vous continuer?
+ Rechiffrement des fichier(s)…
+
+
+ Cacher Photok
+ Afficher Photok
+ Photok est actuellement :
+ VISIBLE
+ CACHÉ
+ Téléphone
+ Voulez-vous vraiment cacher Photok ?
+ Voulez-vous montrer à nouveau Photok ?
+ Une fois caché, Photok ne peut être lancé qu\'à partir du clavier téléphonique avec votre code de démarrage secret.
+ Code de lancement actuel :
+
+
+ Suivant
+ Terminer
+ Passer
+
+ Bienvenue sur
+ Un endroit sûr pour vos photos.
+ Créer un mot de passe
+ Créez un mot de passe sécurisé. Votre mot de passe sert à crypter vos photos directement sur votre téléphone.
+ Importez des photos
+ Commencez à importer vos photos et protégez-les des autres.\nVous pourrez ensuite les supprimer de votre galerie.
+
+
+ Création d\'une sauvegarde…
+ Restaurer la sauvegarde
+ Validation de la sauvegarde…
+ Créé le :
+ Fichiers contenus :
+ Compatible :
+ Taille :
+ Déverrouiller et restaurer
+ \u26A0 Fichier non valide
+ Restauration de la sauvegarde…
+ Déverrouiller la sauvegarde
+
+
+ Nouveautés dans
+ Voir le Changelog
+ https://github.com/leonlatsch/Photok/releases
+
+ Fonctionnalité : Menu de récupération
+ Pour en savoir plus sur le nouveau menu de récupération, visitez la page GitHub de Photok
+
+ Amélioration des performances
+ De nombreuses améliorations de performances pour Photok
+
+ EMPTY
+ EMPTY
+
+ EMPTY
+ EMPTY
+
+
+ Menu de récupération
+ Ouvrir Photok
+ Réinitialiser la visibilité de l\'application
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cd78a010..a8c49901 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -93,7 +93,7 @@
Are you sure, you want to delete %1$d file(s)?
- Are you sure, you want to delete this files?
+ Are you sure, you want to delete this file?
Deleting file(s)…
diff --git a/gradle.properties b/gradle.properties
index 086b7b53..bfcc9281 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,9 +1,9 @@
-#Sat Sep 17 11:08:00 UTC 2022
+#Sat Oct 08 14:39:42 UTC 2022
kotlin.code.style=official
kapt.incremental.apt=true
android.databinding.incremental=true
-appVersionName=1.4.1
+appVersionName=1.4.2
org.gradle.jvmargs=-Xmx2048m
-appVersionCode=22
+appVersionCode=23
android.useAndroidX=true
android.enableJetifier=true