From 3e825fe315e259c35daeb0397e9d79a76e46e5f9 Mon Sep 17 00:00:00 2001 From: Arnaud Gissinger <37625778+mathix420@users.noreply.github.com> Date: Sat, 17 Sep 2022 20:02:48 +0200 Subject: [PATCH 1/5] Add french translations (#190) --- app/src/main/assets/contributors.json | 6 + app/src/main/res/values-fr/strings.xml | 248 +++++++++++++++++++++++++ app/src/main/res/values/strings.xml | 2 +- 3 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/values-fr/strings.xml diff --git a/app/src/main/assets/contributors.json b/app/src/main/assets/contributors.json index 0f0749d3..d919a157 100644 --- a/app/src/main/assets/contributors.json +++ b/app/src/main/assets/contributors.json @@ -34,5 +34,11 @@ "name": "Luke Jake", "contact": "@comparesheriff on Github", "website": "https://github.com/comparesheriff" + }, + { + "contribution": "French translation and reporting bugs", + "name": "Arnaud Gissinger", + "contact": "agissing@student.42.fr", + "website": "https://mathix.ninja" } ] 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..59153ffc --- /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)… From 1407bafaeea2e3df565dea5f62ea3d965f00779b Mon Sep 17 00:00:00 2001 From: Translation Badges Updater <> Date: Sat, 17 Sep 2022 20:49:50 +0000 Subject: [PATCH 2/5] Update Translation Badges in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) 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) From 7be049f6185dc23364afb9a0b4de8bc54b0d7449 Mon Sep 17 00:00:00 2001 From: Leon Latsch Date: Sat, 17 Sep 2022 23:11:21 +0200 Subject: [PATCH 3/5] fix special characters in fr translations --- app/src/main/res/values-fr/strings.xml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 59153ffc..b26ba291 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -36,7 +36,7 @@ Importation en cours - Photok a besoin d'accéder à votre espace de stockage pour importer des fichiers. + Photok a besoin d\'accéder à votre espace de stockage pour importer des fichiers. Voulez-vous importer %1$d fichier(s) ? @@ -58,7 +58,7 @@ \u26A0 Mauvais mot de passe - Il n'y a pas de fichier dans votre coffre-fort + Il n\'y a pas de fichier dans votre coffre-fort Tous les fichiers @@ -74,7 +74,7 @@ Terminé Initialisation… Annulé - \u26A0 Certains éléments n'ont pas pu être traités + \u26A0 Certains éléments n\'ont pas pu être traités Détails @@ -101,7 +101,7 @@ 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. + Photok a besoin d\'accéder à votre espace de stockage pour exporter des fichiers. Exporté @@ -126,11 +126,11 @@ Galerie Plein écran automatique - Entrer en mode plein écran lors de l'ouverture d'un fichier + 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. + 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 @@ -142,12 +142,12 @@ 10 Minutes Jamais Code de démarrage secret - Code secret pour démarrer Photok à partir de l'application téléphone. + 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. + Masquer l\'application + Masque l\'icône de l\'application du tiroir d\'applications. Avancé Utiliser avec précaution @@ -196,7 +196,7 @@ 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. + 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 : @@ -212,7 +212,7 @@ Commencez à importer vos photos et protégez-les des autres.\nVous pourrez ensuite les supprimer de votre galerie. - Création d'une sauvegarde… + Création d\'une sauvegarde… Restaurer la sauvegarde Validation de la sauvegarde… Créé le : @@ -244,5 +244,5 @@ Menu de récupération Ouvrir Photok - Réinitialiser la visibilité de l'application + Réinitialiser la visibilité de l\'application From f17a6fb07704d3ef6deab5ea98fcfa8989120cd4 Mon Sep 17 00:00:00 2001 From: Leon Latsch <50983026+leonlatsch@users.noreply.github.com> Date: Thu, 6 Oct 2022 23:43:36 +0200 Subject: [PATCH 4/5] implement granular media permissions on android 13 (#193) --- app/src/main/AndroidManifest.xml | 2 + .../gallery/ui/importing/ImportMenuDialog.kt | 11 ++---- .../gallery/ui/importing/SharedUrisStore.kt | 2 - .../leonlatsch/photok/main/ui/MainActivity.kt | 37 +++++++++++++------ .../photok/main/ui/MainViewModel.kt | 10 ++--- .../dev/leonlatsch/photok/other/Constants.kt | 1 - .../photok/permissions/MediaPermissions.kt | 34 +++++++++++++++++ .../leonlatsch/photok/uicomponnets/Chooser.kt | 6 ++- 8 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/dev/leonlatsch/photok/permissions/MediaPermissions.kt 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) From c2c08264d052b8fa8f4f4e4cd5048081301d3994 Mon Sep 17 00:00:00 2001 From: Release Bot <> Date: Sat, 8 Oct 2022 14:39:56 +0000 Subject: [PATCH 5/5] Update version to 1.4.2 and update open source licenses --- app/src/main/assets/open_source_licenses.json | 27 ++++++++++++------- gradle.properties | 6 ++--- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/src/main/assets/open_source_licenses.json b/app/src/main/assets/open_source_licenses.json index db37cbd1..eb16ad5d 100644 --- a/app/src/main/assets/open_source_licenses.json +++ b/app/src/main/assets/open_source_licenses.json @@ -1927,6 +1927,23 @@ ], "dependency": "com.google.android.material:material:1.4.0-beta01" }, + { + "project": "MikeOrtiz/TouchImageView", + "description": "Adds touch functionality to Android ImageView.", + "version": "3.0.1", + "developers": [ + "Michael Ortiz" + ], + "url": "https://github.com/MikeOrtiz/TouchImageView", + "year": "2011", + "licenses": [ + { + "license": "MIT License", + "license_url": "https://api.github.com/licenses/mit" + } + ], + "dependency": "com.github.MikeOrtiz:TouchImageView:3.0.1" + }, { "project": "org.jetbrains.kotlin:kotlin-android-extensions-runtime", "description": "Kotlin Android Extensions Runtime", @@ -2012,16 +2029,6 @@ ], "dependency": "com.jakewharton.timber:timber:4.7.1" }, - { - "project": "TouchImageView", - "description": null, - "version": "3.0.1", - "developers": [], - "url": null, - "year": null, - "licenses": [], - "dependency": "com.github.MikeOrtiz:TouchImageView:3.0.1" - }, { "project": "VersionedParcelable", "description": "Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.", 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