From 5bd5facf703bdaafa0d23220686ac09c699e714a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20F=C4=B1r=C4=B1nc=C4=B1?= Date: Sat, 18 Apr 2020 14:56:13 +0300 Subject: [PATCH 01/75] Update strings.xml --- app/src/main/res/values-tr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index b5a5d49b8..0e526ef5d 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -293,7 +293,7 @@ Videoları nasıl hızlıca ileri sarabilirim? Ekranın yan tarafına iki kez dokunarak veya arama çubuğunun yanındaki geçerli veya maksimum süre metinlerine dokunarak bunu yapabilirsiniz. Videoları uygulama ayarlarından ayrı bir ekranda açmayı etkinleştirirseniz yatay hareketleri de kullanabilirsiniz. Klasörün gizlenmesi ve hariç tutulması arasındaki fark nedir? - Hariç tut, klasörü yalnızca Basit Galeri\'de görüntülemeyi engellerken, Gizle sistem genelinde çalışır ve klasörü diğer galerilerden de gizler. Verilen klasörde boş bir \".nomedia\" dosyası oluşturarak çalışır, daha sonra herhangi bir dosya yöneticisi ile kaldırabilirsiniz. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + Hariç tut, klasörü yalnızca Basit Galeri\'de görüntülemeyi engellerken, Gizle sistem genelinde çalışır ve klasörü diğer galerilerden de gizler. Verilen klasörde boş bir \".nomedia\" dosyası oluşturarak çalışır, daha sonra herhangi bir dosya yöneticisi ile kaldırabilirsiniz. Bazı cihazların Kamera, Ekran Görüntüleri ve İndirilenler gibi klasörlerin gizlenmesine izin vermediğini unutmayın. Neden albüm resimlerini içeren klasörler görünüyor? Bazı olağandışı albümlerin ortaya çıktığını göreceksiniz. Onları uzun süre basarak ve Hariç tut\'u seçerek kolayca hariç tutabilirsiniz. Bir sonraki iletişim kutusunda, üst klasörü seçebilirsiniz, ancak diğer ilgili albümlerin de gösterilmesini önleyecektir. Resimler içeren bir klasör görünmüyor, ne yapabilirim? From 57ccf6dc71c2bf905b4a879badb3fce68daf5e7d Mon Sep 17 00:00:00 2001 From: spkprs Date: Sat, 18 Apr 2020 15:13:27 +0300 Subject: [PATCH 02/75] Update strings.xml --- app/src/main/res/values-el/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index eb980f61b..26a99d926 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -294,7 +294,7 @@ Πώς μπορώ να τρέξω μπροστά (fast forward) τα βίντεο; Μπορείτε να το κάνετε πατώντας δύο φορές την πλευρά της οθόνης ή πατώντας το κείμενο τρέχοντος ή μέγιστης διάρκειας κοντά στη γραμμή αναζήτησης. Αν ενεργοποιήσετε το άνοιγμα βίντεο σε ξεχωριστή οθόνη στις ρυθμίσεις εφαρμογής, μπορείτε επίσης να χρησιμοποιήσετε και τις οριζόντιες κινήσεις. Ποια είναι διαφορά μεταξύ απόκρυψης και εξαίρεσης ενός φακέλου; - Η εξαίρεση δεν επιτρέπει την εμφάνιση του φακέλου μόνο στην Απλή Συλλογή, ενώ η απόκρυψη λειτουργεί σε επίπεδο συστήματος και θα αποκρύψει τον φάκελο και από άλλες εφαρμογές γκάλερι. Λειτουργεί δημιουργώντας ένα άδειο \".nomedia\" αρχείο στον επιλεγμένο φάκελο, το οποίο μπορείτε να το διαγράψετε και με οποιονδήποτε διαχειριστή αρχείων. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + Η εξαίρεση δεν επιτρέπει την εμφάνιση του φακέλου μόνο στην Απλή Συλλογή, ενώ η απόκρυψη λειτουργεί σε επίπεδο συστήματος και θα αποκρύψει τον φάκελο και από άλλες εφαρμογές γκάλερι. Λειτουργεί δημιουργώντας ένα άδειο \".nomedia\" αρχείο στον επιλεγμένο φάκελο, το οποίο μπορείτε να το διαγράψετε και με οποιονδήποτε διαχειριστή αρχείων. Σημειώστε ότι μερικές συσκευές δεν αποδέχονται την απόκρυψη φακέλων όπως Κάμερας, Στιγμιοτύπων, και Λήψεων. Γιατί εμφανίζονται φάκελοι με εξώφυλλο μουσικής ή αυτόκολλητα; Είναι πιθανόν να δείτε κάποια περίεργα άλμπουμ να εμφανίζονται. Μπορείτε να τα εξαιρέσετε εύκολα με παρατεταμένο άγγιγμα και επιλογή του Εξαίρεση. Στον επόμενο διάλογο μπορείτε να επιλέξετε επάνω φάκελο. Είναι πιθανό να μην επιτρέψει την εμφάνιση και άλλων σχετικών άλμπουμ. Ένας φάκελος με εικόνες δεν εμφανίζεται. Τι μπορώ να κάνω; From 5ca662103bb2ee6a05d3194c66d49fbb216c352b Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 18 Apr 2020 15:30:43 +0200 Subject: [PATCH 03/75] removing the folder locking check from a few places to avoid duplication --- .../pro/activities/PhotoVideoActivity.kt | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt index 50600c6b0..0c2112df0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt @@ -103,12 +103,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList if (realPath.getFilenameFromPath().contains('.') || filename.contains('.')) { if (isFileTypeVisible(realPath)) { bottom_actions.beGone() - handleLockedFolderOpening(realPath.getParentPath()) { success -> - if (success) { - sendViewPagerIntent(realPath) - } - finish() - } + sendViewPagerIntent(realPath) + finish() return } } else { @@ -120,13 +116,9 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList if (mUri!!.scheme == "file") { if (filename.contains('.')) { bottom_actions.beGone() - handleLockedFolderOpening(mUri!!.path!!.getParentPath()) { success -> - if (success) { - rescanPaths(arrayListOf(mUri!!.path!!)) - sendViewPagerIntent(mUri!!.path!!) - } - finish() - } + rescanPaths(arrayListOf(mUri!!.path!!)) + sendViewPagerIntent(mUri!!.path!!) + finish() } return } else { @@ -134,13 +126,9 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList if (path != mUri.toString() && path.isNotEmpty() && mUri!!.authority != "mms" && filename.contains('.') && getDoesFilePathExist(path)) { if (isFileTypeVisible(path)) { bottom_actions.beGone() - handleLockedFolderOpening(path.getParentPath()) { success -> - if (success) { - rescanPaths(arrayListOf(mUri!!.path!!)) - sendViewPagerIntent(path) - } - finish() - } + rescanPaths(arrayListOf(mUri!!.path!!)) + sendViewPagerIntent(path) + finish() return } } From 66eab912043eec08f919d7a0d5b5a142703e77e8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 18 Apr 2020 15:42:11 +0200 Subject: [PATCH 04/75] update version to 6.14.2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index da738680a..a4f3b803f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 29 - versionCode 301 - versionName "6.14.1" + versionCode 302 + versionName "6.14.2" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From 08f3674a32bff9ecb8c57edec50fe9fae4cd6697 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 18 Apr 2020 15:42:28 +0200 Subject: [PATCH 05/75] updating changelog --- CHANGELOG.md | 10 ++++++++++ fastlane/metadata/android/en-US/changelogs/302.txt | 6 ++++++ 2 files changed, 16 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/302.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 717c71b10..8043313cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ Changelog ========== +Version 6.14.2 *(2020-04-18)* +---------------------------- + + * Fixed some Photo Editor bugs + * Properly handle locked folders at opening from widgets and shortcuts + * Open the map at clicking the coordinates at the Properties window + * Properly sort items at the Other Folder dialog at copy/move + * Fixed some folder un/hiding related glitches + * A couple other translation and UX improvements + Version 6.14.1 *(2020-04-14)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/302.txt b/fastlane/metadata/android/en-US/changelogs/302.txt new file mode 100644 index 000000000..7e687a795 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/302.txt @@ -0,0 +1,6 @@ + * Fixed some Photo Editor bugs + * Properly handle locked folders at opening from widgets and shortcuts + * Open the map at clicking the coordinates at the Properties window + * Properly sort items at the Other Folder dialog at copy/move + * Fixed some folder un/hiding related glitches + * A couple other translation and UX improvements From 6083a30c71f3ab2b7a23759c4b46ab8cd7eab0b4 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Sun, 19 Apr 2020 16:18:39 +0200 Subject: [PATCH 06/75] Dutch --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index e2673cd7d..d30738888 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -293,7 +293,7 @@ Hoe kan ik terug- of vooruitspoelen in video’s? Dubbelklik op de zijkant van het scherm, of tik op de cijfers die de voortgang of de lengte van de video weergeven om resp. terug of vooruit te springen. Als de instelling om video\'s in een apart scherm te openen is ingeschakeld, dan kunnen ook horizontale veeggebaren worden gebruikt. Wat is het verschil tussen het verbergen en het uitsluiten van mappen? - Met \"Uitsluiten\" wordt het tonen van de map alleen binnen deze app voorkomen, terwijl \"Verbergen\" de map ook zal verbergen voor andere galerij-apps. Met \"Verbergen\" wordt een bestand genaamd \".nomedia\" in de te verbergen map aangemaakt (het verwijderen van dit bestand uit de map maakt het verbergen ongedaan). Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + Met \"Uitsluiten\" wordt het tonen van de map alleen binnen deze app voorkomen, terwijl \"Verbergen\" de map ook zal verbergen voor andere galerij-apps. Met \"Verbergen\" wordt een bestand genaamd \".nomedia\" in de te verbergen map aangemaakt (het verwijderen van dit bestand uit de map maakt het verbergen ongedaan). Op sommige apparaten is het echter niet mogelijk om specifieke mappen, zoals Camera, Screenshots en Downloads, te verbergen. Waarom zie ik mappen met stickers of covers van muziekalbums? Soms worden er wat ongebruikelijke afbeeldingen van andere apps getoond. Deze zijn gemakkelijk uit het overzicht te halen door lang te drukken op de map en vervolgens te kiezen voor \"Uitsluiten\". In het daaropvolgende venster is ook de bovenliggende map te kiezen; dit zou het tonen van soortgelijke ongewenste items kunnen voorkomen. Een bepaalde map met afbeeldingen wordt niet getoond. Wat kan ik doen? From 6d779134f13762832d715262ff03aa5673c0ff52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hevesi=20J=C3=A1nos?= <44799533+hevesij@users.noreply.github.com> Date: Sun, 19 Apr 2020 19:19:53 +0200 Subject: [PATCH 07/75] Update strings.xml --- app/src/main/res/values-hu/strings.xml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index a19a97886..c89f3f1c1 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1,5 +1,4 @@ - - + Simple Gallery Galéria Szerkesztés @@ -20,7 +19,7 @@ Borítókép változtatása Válasszon fotót Hangerő - Fényerő + Fényesség Tájolás zárolása Tájolás feloldása Tájolás változtatása @@ -80,7 +79,7 @@ Forgatás Érvénytelen kép elérési útvonal Sikertelen kép szerkesztés - Image editing cancelled + A képszerkesztés megszakítva A fájl szerkesztése sikerült Kép szerkesztés ezzel: Nem található kép szerkesztő @@ -92,12 +91,9 @@ Tükrözés Tükrözés vízszintesen Tükrözés függőlegesen - Szabad + Szabad + Egyéb - - Egyéb - - Simple Wallpaper Beállítás háttérképként @@ -207,7 +203,7 @@ Egyéni Alaphelyzetbe - Square + Négyzet Transform Szűrő Nincs @@ -215,7 +211,7 @@ Árnyékok Exposure Highlights - Fényesség + Fényerő Kontraszt Színtelítettség Világosság @@ -296,7 +292,7 @@ A következő alkalommal, amikor megpróbál megnyitni egy képet vagy videót, Hogyan tudom előre tekerni a videókat? You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too. Mi a különbség a mappa elrejtése és kizárása között? - A Kizárás megakadályozza, hogy a mappát a Simple Gallery megjelenítse, az Elrejtés pedig rendszer szinten működik, és elrejti a mappát más galériákból is. Úgy működik, hogy létrehoz egy üres \". nomedia\" nevű fájlt az adott mappában, amelyet bármikor eltávolíthat bármilyen fájlkezelővel is. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. Miért jelennek meg a zenei borítóval vagy matricával rendelkező mappák? Lehet, hogy látni fog néhány szokatlan album megjelenést. Könnyen kizárhatja a hosszú megnyomással és a Kizárás kiválasztásával. A következő párbeszédablakban kiválaszthatja a szülő mappát, és valószínűleg megakadályozza, hogy a többi kapcsolódó album is megjelenjen. A képekkel nem rendelkező mappa nem jelenik meg, vagy nem jeleníti meg az összes elemet. Mit tehetek? @@ -378,6 +374,7 @@ Ezzel csak a kiválasztott mappák láthatók, mivel a kizárás és a befoglal Reddit: https://www.reddit.com/r/SimpleMobileTools + - Egyéb + Szabad + Egyéb Simple Wallpaper @@ -292,7 +293,7 @@ A következő alkalommal, amikor megpróbál megnyitni egy képet vagy videót, Hogyan tudom előre tekerni a videókat? You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too. Mi a különbség a mappa elrejtése és kizárása között? - Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + A Kizárás megakadályozza, hogy a mappát a Simple Gallery megjelenítse, az Elrejtés pedig rendszer szinten működik, és elrejti a mappát más galériákból is. Úgy működik, hogy létrehoz egy üres \". nomedia\" nevű fájlt az adott mappában, amelyet bármikor eltávolíthat bármilyen fájlkezelővel is. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. Miért jelennek meg a zenei borítóval vagy matricával rendelkező mappák? Lehet, hogy látni fog néhány szokatlan album megjelenést. Könnyen kizárhatja a hosszú megnyomással és a Kizárás kiválasztásával. A következő párbeszédablakban kiválaszthatja a szülő mappát, és valószínűleg megakadályozza, hogy a többi kapcsolódó album is megjelenjen. A képekkel nem rendelkező mappa nem jelenik meg, vagy nem jeleníti meg az összes elemet. Mit tehetek? From 782a103928ad75eb8eb590d2065b3549ba8f29e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Mon, 20 Apr 2020 10:05:02 +0200 Subject: [PATCH 09/75] Update strings.xml --- app/src/main/res/values-ca/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index fc8d6ee71..72841ee51 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -293,7 +293,7 @@ Com puc fer avançar els vídeos? Podeu fer-ho tocant dues vegades el costat de la pantalla o tocant els textos de durada actual o màxima a prop de la barra de cerca. Si activeu l\’obertura de vídeos en una pantalla diferent a la configuració de l\’aplicació, també podeu fer servir gestos horitzontals. Quina és la diferència entre ocultar i excloure una carpeta? - Excloure impedeix mostrar la carpeta només a Simple Galery, mentre que Ocultar també amaga la carpeta a altres galeries. Funciona creant un fitxer \". Nomedia \" buit a la carpeta donada, que podeu eliminar amb qualsevol gestor de fitxers. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + Excloure impedeix mostrar la carpeta només a Simple Galery, mentre que Ocultar també amaga la carpeta a altres galeries. Funciona creant un fitxer \". Nomedia \" buit a la carpeta donada, que podeu eliminar amb qualsevol gestor de fitxers. Tingueu en compte que alguns dispositius no permeten amagar carpetes com Càmera, Captures de pantalla i Descàrregues. Per què apareixen les carpetes amb les portades de la música o adhesius? Pot passar que veuràs que apareixen alguns àlbums inusuals. Podeu excloure’ls fàcilment prement-los i seleccionant Excloure. Al següent diàleg, podeu seleccionar la carpeta principal, és probable que impedeixi que apareguin altres àlbums relacionats. Una carpeta amb imatges no apareix, què puc fer? From f59d262a443ce45ee713b267b49ad5be78ab4460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Mon, 20 Apr 2020 10:06:20 +0200 Subject: [PATCH 10/75] Update strings.xml --- app/src/main/res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 5ecfbf3a4..0af41911a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -293,7 +293,7 @@ ¿Cómo puedo avanzar videos? Puede hacerlo tocando dos veces el costado de la pantalla o tocando los textos de duración actual o máxima cerca de la barra de búsqueda. Si habilita la apertura de videos en una pantalla separada en la configuración de la aplicación, también puede usar gestos horizontales. ¿Cuál es la diferencia entre ocultar y excluir una carpeta? - Excluir evita mostrar la carpeta solo en Simple Gallery, mientras que Ocultar funciona en el sistema y oculta la carpeta de otras galerías también. Funciona al crear un archivo \".nomedia \" vacío en la carpeta determinada, que luego puede eliminar también con cualquier administrador de archivos. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + Excluir evita mostrar la carpeta solo en Simple Gallery, mientras que Ocultar funciona en el sistema y oculta la carpeta de otras galerías también. Funciona al crear un archivo \".nomedia \" vacío en la carpeta determinada, que luego puede eliminar también con cualquier administrador de archivos. Tenga en cuenta que algunos dispositivos no permiten ocultar carpetas como Cámara, Capturas de pantalla y Descargas. ¿Por qué aparecen las carpetas con la portada de la música o las pegatinas? Puede suceder que veas aparecer algunos álbumes inusuales. Puede excluirlos fácilmente presionándolos durante mucho tiempo y seleccionando Excluir. En el siguiente cuadro de diálogo, puede seleccionar la carpeta principal, lo más probable es que evite que aparezcan otros álbumes relacionados. Una carpeta con imágenes no aparece, ¿qué puedo hacer? From dd0122ef658afca066445ed8f8e3c887c875494f Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Apr 2020 19:38:31 +0200 Subject: [PATCH 11/75] removing the ly.img.sdk.RECEIVE_RESULT_PERMISSION permission --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a4f3b803f..449bec95c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.25.25' + implementation 'com.simplemobiletools:commons:5.26.12' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b871b2d77..febd7c9b4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,9 @@ + From a1e0d077985a897e5a94d22ad53c95abb51e92d4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Apr 2020 20:11:57 +0200 Subject: [PATCH 12/75] fix a glitch with fullscreen view bottom actions being at the top --- .../gallery/pro/activities/ViewPagerActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index 712f45fe6..a492c4e9f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt @@ -758,7 +758,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } private fun initBottomActionsLayout() { - bottom_actions.layoutParams.height = resources.getDimension(R.dimen.bottom_actions_height).toInt() + navigationBarHeight + val useNavigationBarHeight = if (navigationBarBottom) navigationBarHeight else 0 + bottom_actions.layoutParams.height = resources.getDimension(R.dimen.bottom_actions_height).toInt() + useNavigationBarHeight if (config.bottomActions) { bottom_actions.beVisible() } else { From 638dab9d970d64bb793bc78e20a41ab66333b9de Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Apr 2020 20:22:33 +0200 Subject: [PATCH 13/75] do not ask for authentication on every screen, at locked folders --- .../gallery/pro/activities/MainActivity.kt | 1 + .../gallery/pro/activities/MediaActivity.kt | 21 ++++++++++++------- .../pro/activities/ViewPagerActivity.kt | 14 ++++++++----- .../gallery/pro/helpers/Constants.kt | 1 + 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 113de1281..8da857d18 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -835,6 +835,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { handleLockedFolderOpening(path) { success -> if (success) { Intent(this, MediaActivity::class.java).apply { + putExtra(SKIP_AUTHENTICATION, true) putExtra(DIRECTORY, path) handleMediaIntent(this) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index 5f16757b6..766f4b99f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -160,11 +160,15 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { media_empty_text_placeholder_2.setTextColor(getAdjustedPrimaryColor()) if (mMedia.isEmpty() || config.getFolderSorting(mPath) and SORT_BY_RANDOM == 0) { - handleLockedFolderOpening(mPath) { success -> - if (success) { - tryLoadGallery() - } else { - finish() + if (shouldSkipAuthentication()) { + tryLoadGallery() + } else { + handleLockedFolderOpening(mPath) { success -> + if (success) { + tryLoadGallery() + } else { + finish() + } } } } @@ -274,8 +278,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { private fun startSlideshow() { if (mMedia.isNotEmpty()) { Intent(this, ViewPagerActivity::class.java).apply { - val item = mMedia.firstOrNull { it is Medium } as? Medium - ?: return + val item = mMedia.firstOrNull { it is Medium } as? Medium ?: return + putExtra(SKIP_AUTHENTICATION, shouldSkipAuthentication()) putExtra(PATH, item.path) putExtra(SHOW_ALL, mShowAll) putExtra(SLIDESHOW_START_ON_ENTER, true) @@ -865,6 +869,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { openPath(path, false, extras) } else { Intent(this, ViewPagerActivity::class.java).apply { + putExtra(SKIP_AUTHENTICATION, shouldSkipAuthentication()) putExtra(PATH, path) putExtra(SHOW_ALL, mShowAll) putExtra(SHOW_FAVORITES, mPath == FAVORITES) @@ -932,6 +937,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { } } + private fun shouldSkipAuthentication() = intent.getBooleanExtra(SKIP_AUTHENTICATION, false) + private fun deleteFilteredFiles(filtered: ArrayList) { deleteFiles(filtered) { if (!it) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index a492c4e9f..710a6caf9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt @@ -308,11 +308,15 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View showSystemUI(true) - handleLockedFolderOpening(mPath.getParentPath()) { success -> - if (success) { - initContinue() - } else { - finish() + if (intent.getBooleanExtra(SKIP_AUTHENTICATION, false)) { + initContinue() + } else { + handleLockedFolderOpening(mPath.getParentPath()) { success -> + if (success) { + initContinue() + } else { + finish() + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt index d6d6abef0..683fbf25e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt @@ -132,6 +132,7 @@ const val IS_VIEW_INTENT = "is_view_intent" const val PICKED_PATHS = "picked_paths" const val SHOULD_INIT_FRAGMENT = "should_init_fragment" const val PORTRAIT_PATH = "portrait_path" +const val SKIP_AUTHENTICATION = "skip_authentication" // rotations const val ROTATE_BY_SYSTEM_SETTING = 0 From bc37181dfd7c7c3e80092caa96d0ef0bce5430a9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Apr 2020 20:29:28 +0200 Subject: [PATCH 14/75] use the selected date format at grouping sections --- .../com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index 27c61a640..1e42aa243 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -549,7 +549,7 @@ class MediaFetcher(val context: Context) { return if (timestamp.areDigitsOnly()) { val cal = Calendar.getInstance(Locale.ENGLISH) cal.timeInMillis = timestamp.toLong() - val format = if (showDay) "dd MMM yyyy" else "MMM yyyy" + val format = if (showDay) context.config.dateFormat else "MMMM yyyy" DateFormat.format(format, cal).toString() } else { "" From 0aa268ce2927f3dc2c5bcd82cda1dd270d08f093 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Apr 2020 22:21:25 +0200 Subject: [PATCH 15/75] properly handle authentication skipping at videos too --- .../simplemobiletools/gallery/pro/activities/MediaActivity.kt | 4 ++++ .../gallery/pro/activities/PhotoVideoActivity.kt | 1 + 2 files changed, 5 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index 766f4b99f..c67750636 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -866,6 +866,10 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { if (isVideo) { val extras = HashMap() extras[SHOW_FAVORITES] = mPath == FAVORITES + + if (shouldSkipAuthentication()) { + extras[SKIP_AUTHENTICATION] = true + } openPath(path, false, extras) } else { Intent(this, ViewPagerActivity::class.java).apply { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt index 0c2112df0..27a010711 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt @@ -225,6 +225,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList private fun sendViewPagerIntent(path: String) { Intent(this, ViewPagerActivity::class.java).apply { + putExtra(SKIP_AUTHENTICATION, intent.getBooleanExtra(SKIP_AUTHENTICATION, false)) putExtra(SHOW_FAVORITES, intent.getBooleanExtra(SHOW_FAVORITES, false)) putExtra(IS_VIEW_INTENT, true) putExtra(IS_FROM_GALLERY, mIsFromGallery) From 7518d335742d02eab2da5de56611bc0c90aaf506 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Apr 2020 22:59:55 +0200 Subject: [PATCH 16/75] removing the dividers from the app settings --- app/src/main/res/layout/activity_settings.xml | 84 ------------------- 1 file changed, 84 deletions(-) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index b7d436f28..2a15a956a 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -113,13 +113,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - Date: Mon, 20 Apr 2020 23:00:09 +0200 Subject: [PATCH 17/75] use the extended navigation bar height check at the video fragment too --- .../simplemobiletools/gallery/pro/fragments/VideoFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index 76da0d990..b79337769 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt @@ -457,7 +457,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private fun initTimeHolder() { var right = 0 - var bottom = context!!.navigationBarHeight + var bottom = if (context!!.navigationBarBottom) context!!.navigationBarHeight else 0 if (mConfig.bottomActions) { bottom += resources.getDimension(R.dimen.bottom_actions_height).toInt() } From 69ed92442ee474061f11609a00d14c286b7d9325 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Apr 2020 23:07:18 +0200 Subject: [PATCH 18/75] replacing Left with Start, Right with End at the app settings --- app/src/main/res/layout/activity_settings.xml | 351 +++++++++--------- 1 file changed, 175 insertions(+), 176 deletions(-) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 2a15a956a..c6c79a55a 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,6 +1,5 @@ - + android:text="@string/customize_colors" /> @@ -40,9 +39,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -63,9 +62,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + android:text="@string/change_date_and_time_format" /> @@ -84,9 +83,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/bigger_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/bigger_margin"> + android:paddingStart="@dimen/medium_margin" + android:paddingEnd="@dimen/medium_margin" + android:text="@string/file_loading_priority" /> + tools:text="@string/compromise" /> @@ -121,7 +120,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/visibility" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + android:text="@string/manage_included_folders" /> @@ -150,9 +149,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + android:text="@string/manage_excluded_folders" /> @@ -171,9 +170,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + android:text="@string/manage_hidden_folders" /> @@ -192,9 +191,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -217,7 +216,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/videos" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -248,9 +247,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -271,9 +270,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -294,9 +293,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -317,9 +316,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -342,7 +341,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/thumbnails" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -373,9 +372,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -396,9 +395,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -419,9 +418,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -442,9 +441,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -467,7 +466,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/scrolling" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -498,9 +497,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -521,9 +520,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -546,7 +545,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/fullscreen_media" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -577,9 +576,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -600,9 +599,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -623,9 +622,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -646,9 +645,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -669,9 +668,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -692,9 +691,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -715,9 +714,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/bigger_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/bigger_margin"> + android:paddingStart="@dimen/medium_margin" + android:paddingEnd="@dimen/medium_margin" + android:text="@string/screen_rotation_by" /> + android:clickable="false" /> @@ -749,7 +748,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/deep_zoomable_images" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -780,9 +779,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -803,9 +802,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -826,9 +825,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -851,7 +850,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/extended_details" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> + app:switchPadding="@dimen/medium_margin" /> + android:text="@string/manage_extended_details" /> @@ -926,7 +925,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/security" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -957,9 +956,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -980,9 +979,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -1005,7 +1004,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/file_operations" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -1036,9 +1035,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -1059,9 +1058,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -1084,7 +1083,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/bottom_actions" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -1115,9 +1114,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + android:text="@string/manage_bottom_actions" /> @@ -1138,7 +1137,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/recycle_bin" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + app:switchPadding="@dimen/medium_margin" /> @@ -1169,9 +1168,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -1192,9 +1191,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + app:switchPadding="@dimen/medium_margin" /> @@ -1215,9 +1214,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/bigger_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/bigger_margin"> + android:paddingStart="@dimen/medium_margin" + android:paddingEnd="@dimen/medium_margin" + android:text="@string/empty_recycle_bin" /> + android:clickable="false" /> @@ -1249,7 +1248,7 @@ android:layout_marginTop="@dimen/activity_margin" android:text="@string/migrating" android:textAllCaps="true" - android:textSize="@dimen/smaller_text_size"/> + android:textSize="@dimen/smaller_text_size" /> + android:text="@string/export_settings" /> @@ -1278,9 +1277,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingLeft="@dimen/normal_margin" + android:paddingStart="@dimen/normal_margin" android:paddingTop="@dimen/activity_margin" - android:paddingRight="@dimen/normal_margin" + android:paddingEnd="@dimen/normal_margin" android:paddingBottom="@dimen/activity_margin"> + android:text="@string/import_settings" /> From 88804125de1fc0406b1322d714fb497807e90eaa Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Apr 2020 23:33:48 +0200 Subject: [PATCH 19/75] increasing the margin between settings sections --- app/build.gradle | 2 +- app/src/main/res/layout/activity_settings.xml | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 449bec95c..740878bb5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.26.12' + implementation 'com.simplemobiletools:commons:5.26.14' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index c6c79a55a..75ea7b056 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -117,7 +117,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/visibility" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -213,7 +213,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/videos" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -338,7 +338,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/thumbnails" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -463,7 +463,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/scrolling" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -542,7 +542,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/fullscreen_media" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -745,7 +745,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/deep_zoomable_images" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -847,7 +847,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/extended_details" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -922,7 +922,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/security" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -1001,7 +1001,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/file_operations" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -1080,7 +1080,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/bottom_actions" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -1134,7 +1134,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/recycle_bin" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> @@ -1245,7 +1245,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginTop="@dimen/activity_margin" + android:layout_marginTop="@dimen/section_margin" android:text="@string/migrating" android:textAllCaps="true" android:textSize="@dimen/smaller_text_size" /> From cac7f7e4bd9c0f257cd823dddedd9bbf00896517 Mon Sep 17 00:00:00 2001 From: Pzqqt <821026875@qq.com> Date: Tue, 21 Apr 2020 08:23:33 +0800 Subject: [PATCH 20/75] Update Simplified Chinese translation --- app/src/main/res/values-zh-rCN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 4e4bfd448..2eabef991 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -292,7 +292,7 @@ 如何快进/快退视频? 您可以双击屏幕边缘或点击搜索栏附近的当前或总时长的文字。 如果您在应用设置中启用了在独立页面播放视频,则也可以使用水平手势。 文件夹的隐藏和排除有什么区别? - 排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,你可以使用任何文件管理器删除它。Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + 排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,你可以使用任何文件管理器删除它。请注意,某些设备不允许隐藏\"Camera\",\"Screenshots\"和\"Downloads\"等文件夹。 为什么会出现音乐艺术家封面或贴纸文件夹? 你可能会看到一些不寻常的相册出现。你可以通过长按它们并选择“排除”来排除它们。在之后的对话框中,你可以选择父文件夹,这样也许就会阻止其他相关的相册出现。 有的图片文件夹没有显示,怎么回事? @@ -364,7 +364,7 @@ 查看简约系列的所有应用: https://www.simplemobiletools.com - 简约图库 Pro的独立网站: + 简约图库 Pro 的独立网站: https://www.simplemobiletools.com/gallery Facebook: From 38aea1cdeb006b8126af2e0704789583871b4d7e Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 21 Apr 2020 13:14:29 +0200 Subject: [PATCH 21/75] moving some video related icons to Commons --- app/build.gradle | 2 +- .../pro/activities/PanoramaVideoActivity.kt | 8 ++++---- .../pro/activities/VideoPlayerActivity.kt | 6 +++--- .../gallery/pro/adapters/MediaAdapter.kt | 2 +- .../gallery/pro/fragments/VideoFragment.kt | 4 ++-- .../main/res/drawable-hdpi/ic_next_outline.png | Bin 3135 -> 0 bytes .../main/res/drawable-hdpi/ic_pause_outline.png | Bin 2931 -> 0 bytes .../main/res/drawable-hdpi/ic_prev_outline.png | Bin 3143 -> 0 bytes .../main/res/drawable-hdpi/img_play_outline.png | Bin 3532 -> 0 bytes .../res/drawable-hdpi/img_play_outline_empty.png | Bin 2228 -> 0 bytes .../main/res/drawable-xhdpi/ic_next_outline.png | Bin 3371 -> 0 bytes .../main/res/drawable-xhdpi/ic_pause_outline.png | Bin 3053 -> 0 bytes .../main/res/drawable-xhdpi/ic_prev_outline.png | Bin 3378 -> 0 bytes .../main/res/drawable-xhdpi/img_play_outline.png | Bin 4470 -> 0 bytes .../drawable-xhdpi/img_play_outline_empty.png | Bin 2857 -> 0 bytes .../main/res/drawable-xxhdpi/ic_next_outline.png | Bin 6350 -> 0 bytes .../res/drawable-xxhdpi/ic_pause_outline.png | Bin 5994 -> 0 bytes .../main/res/drawable-xxhdpi/ic_prev_outline.png | Bin 6361 -> 0 bytes .../res/drawable-xxhdpi/img_play_outline.png | Bin 8414 -> 0 bytes .../drawable-xxhdpi/img_play_outline_empty.png | Bin 5674 -> 0 bytes .../res/drawable-xxxhdpi/ic_next_outline.png | Bin 7012 -> 0 bytes .../res/drawable-xxxhdpi/ic_pause_outline.png | Bin 4724 -> 0 bytes .../res/drawable-xxxhdpi/ic_prev_outline.png | Bin 7075 -> 0 bytes .../res/drawable-xxxhdpi/img_play_outline.png | Bin 9618 -> 0 bytes .../drawable-xxxhdpi/img_play_outline_empty.png | Bin 6911 -> 0 bytes .../main/res/layout/bottom_video_time_holder.xml | 6 +++--- app/src/main/res/layout/pager_video_item.xml | 2 +- .../main/res/layout/photo_video_item_grid.xml | 2 +- .../main/res/layout/photo_video_item_list.xml | 2 +- 29 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 app/src/main/res/drawable-hdpi/ic_next_outline.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_pause_outline.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_prev_outline.png delete mode 100644 app/src/main/res/drawable-hdpi/img_play_outline.png delete mode 100644 app/src/main/res/drawable-hdpi/img_play_outline_empty.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_next_outline.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_pause_outline.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_prev_outline.png delete mode 100644 app/src/main/res/drawable-xhdpi/img_play_outline.png delete mode 100644 app/src/main/res/drawable-xhdpi/img_play_outline_empty.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_next_outline.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_pause_outline.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_prev_outline.png delete mode 100644 app/src/main/res/drawable-xxhdpi/img_play_outline.png delete mode 100644 app/src/main/res/drawable-xxhdpi/img_play_outline_empty.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_next_outline.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_pause_outline.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_prev_outline.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/img_play_outline.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/img_play_outline_empty.png diff --git a/app/build.gradle b/app/build.gradle index 740878bb5..f76de02d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.26.14' + implementation 'com.simplemobiletools:commons:5.26.15' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt index b9a7976c3..7098e3e4a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt @@ -130,7 +130,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList mIsPlaying = true resumeVideo() } else { - video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline) + video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector) } video_toggle_play_pause.beVisible() } @@ -190,7 +190,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList } private fun resumeVideo() { - video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline) + video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline_vector) if (mCurrTime == mDuration) { setVideoProgress(0) mPlayOnReady = true @@ -203,7 +203,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList private fun pauseVideo() { vr_video_view.pauseVideo() - video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline) + video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector) window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } @@ -247,7 +247,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList } explore.requestLayout() } - video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline) + video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector) cardboard.setOnClickListener { vr_video_view.displayMode = CARDBOARD_DISPLAY_MODE diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt index 6f994024d..b1c319a1e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt @@ -290,7 +290,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen if (config.autoplayVideos) { resumeVideo() } else { - video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline) + video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector) } } } @@ -305,7 +305,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen } private fun resumeVideo() { - video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline) + video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline_vector) if (mExoPlayer == null) { return } @@ -322,7 +322,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen } private fun pauseVideo() { - video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline) + video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector) if (mExoPlayer == null) { return } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt index 5dcf75275..abe446094 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt @@ -500,7 +500,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList5AaeXhNJY#*kEq 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 diff --git a/app/src/main/res/drawable-hdpi/ic_prev_outline.png b/app/src/main/res/drawable-hdpi/ic_prev_outline.png deleted file mode 100644 index 898c74d78c45e409cd1438b7b7372dbbd3dbcedb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3143 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 diff --git a/app/src/main/res/drawable-xhdpi/img_play_outline.png b/app/src/main/res/drawable-xhdpi/img_play_outline.png deleted file mode 100644 index d61aa437158d152f927138074b98b0efd1f8dcec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4470 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 Aj{pDw diff --git a/app/src/main/res/drawable-xhdpi/img_play_outline_empty.png b/app/src/main/res/drawable-xhdpi/img_play_outline_empty.png deleted file mode 100644 index 2753608b6fda57c724531d5db28e0ef390d41100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2857 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 Hu0mjfyHa=o diff --git a/app/src/main/res/drawable-xxhdpi/ic_next_outline.png b/app/src/main/res/drawable-xxhdpi/ic_next_outline.png deleted file mode 100644 index f88b8d317533fdfb83e4389086b79515746f7238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6350 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 diff --git a/app/src/main/res/drawable-xxhdpi/ic_prev_outline.png b/app/src/main/res/drawable-xxhdpi/ic_prev_outline.png deleted file mode 100644 index b92feff7d2cc944fe51737b3d68337eafef3b9ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6361 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 Y3zN7`aiZY@{I3E~Q_@zfmWM_D51D8-g#Z8m diff --git a/app/src/main/res/drawable-xxhdpi/img_play_outline.png b/app/src/main/res/drawable-xxhdpi/img_play_outline.png deleted file mode 100644 index a3ffa45fb3e5bd7bb3b317cadd6c7aced5a2bfa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8414 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 diff --git a/app/src/main/res/drawable-xxhdpi/img_play_outline_empty.png b/app/src/main/res/drawable-xxhdpi/img_play_outline_empty.png deleted file mode 100644 index 95a4f7d28d423042ab1402a1a7181145dc7cc1ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5674 zcmV+_7S-vAP)V-HmG^k)Vh@gy0iz13LBQpU)2${%SRqyLR_I*iF zBqVk28}55mzqQ^{%)LdsNiUJ_g2J;1HN4Zu~v zy(y)Y?HpJxs=CmdL?LnZ2Hpw09GC}8C6r$1j5%3+Rsr_{e+DiBE=?)*wR2#@MJFsa zY7e3C9ta!>90qLF)|Rko&Djr!JhGw^NTQsD6_NTf7U(#24>295?k0nBXS{p+6JJ|b$qjEJH?0^C=8<`dS=LLv}a zzXmoCX95v(t4H!@6EU~Bz%)YfpHckYm_gUJ0&9Q^fiI<$Zg0^&TSp*uJK!_KmNl&f z_m+4&mjQPXk@33;Z*QF}iyEOjsFT@{F0v<~&&@0TzAZ40)~t0Oa6Rxz;14OKfo9*Z zB?MBR51c|+S>v01J0i*JRw5+u8$!Y?29~u#*;Kb8@{DE^+w|eU!NiNxY(t?&ME(B_ zxV+i1wWboNa10(sOlE&J=n;)ZKe6rHPIzvA0sN&(fk|~o;1J+Vz)Oj(ZamFd4~eb% zRN(6=rPWQi2hcTl2y`gnao?LrZfgdX z0sjh|ol;ubqwMZb@DWF z5tgXusYe*uh+PFWse7rPSMO=U`mIq7uv0a_6?$qx2wHoR~_3zaijjg*8sHsmG zde_)?&v8A}7pONF(xMUQS8rC2R3~kI1lp6iMpaeYpeRC`gW_J3aHzu-?wpZ z$y)Ui^+3BsNiGX@M?*Jy(#CCRH>-!*PL;qgpTBNs`DG_oQx_THb!yutRZ$qy==JJt zYG28VEB<)QQGh(TK_1r=FmWYukh>4#QG=wfZYVQkO-)dXYM@9h2EZeayy) z)O!tmr`wL|G#rK`+S}OX8?p9l4MEVltxVlTy}slGYQ`IItGZ9i2HzzxJlW?N%5~Z2 z@TlLi?D@zPogFL@e4{Q3MyAgO!y zEUa5w?`rq}M>y2o)t_75#J|!w@X*k~B_qytSINOGGEDVRYpcO9Vvz?~J{Gy$@WoAN zj>LA)fcK)mwa}YxS0gB&6#U+fxjU?`Mw7Hm?+)W&P4Z}fe)y2+c<`nBBgW}adv)H ziLcoY$cxw;TKzw$OEcM9Qy);DS7HJUfsq<=mwK^rMr}ku9cvss$aTH+7uRo{bMv|C zFU=Q$OV#%@VO@refuc{1bL zs$n*80`Q-9(W%%%FTIB77L=n4?Mzf&TaTdx+JpS<>rUX>E@}Cgh}H^k27Yd2BXrA_ zb}u1?axevW?cg5_CD0+n_BCAVOQI^+BbfuMBI;Y(Jm8DKXVhu!9a4D|`sq)IcAdk% z9C($3j+?J1ka5`lVDc)7tpYCVP~~}ZsQ2&q2(hJggOzqWa2t8s*iMA&19&=FW|Oyl zNfflaHRIY&LA}K9k-)|3`#ah3Sk#WZm@s^Xi?P7V3yb|}1lo%Yy|{*h0a{QEv?54E z3ExwJ6O9l-CBiis_&=f$=WvmTG>>sm5Xd;jaR7Oq=Ve4~;*o-Sfbk^YKZqBv6Y(JV z+t_Zv*04bWO#xn#@kJ6vyzkApw$m}02>D#np^nEVfIpG9jcrd@?CS|MgYW?j7ZTOq zmt8M+2bAU5}lR7MxwuX3iIo+Zs0&~=!I)P>pQfRp7BP7tWjBC3Ivw-6XE3G5E z*G03sI|;|{aJR9oh&hkxDU`sugh(DP77|TiyU~0f4ifQJ9syiwWIT4lmUbKPaK?3G z3C>LDA-c-UB^F?~SVlB18O1ZxLq2WwGai?dN1(dUnbJeBX(oB)_LmY;XcQZefb9s! z>g>(@emih~=5>>S$vuQeF}KL#J(<^yG;9NW95_wgz1@Qu zg4}1=3rwv`pj?aLfz0bhA|?|VkCz!moT^eleL2yLZ@3r(Y*SaFb8EpY$h>YOVzA@! zYgEMXSonh;&%Atcoj|#L6Gknt;Uf_W=!w8L9nN{H<{{@fCSXz-0@cXR@E_@@J01@Q zE?3_(G+DjH$PGn3x9&*HDZNr7FOoZo4X7WrJ{9;>8y%0iXZXhTklzTmk5K|O0(HmZ zM}e;xofuo~c+Ab^>a7P;a|SG<1ZpJ46S+mZlXohn46=QBz2p<2mlpM%9|7niG6YWn ze%prZ&fKoi1HD8_YECr0m*%wc9%)z&oCkabxT7$uTa8=-_4N|$&tZHb#BNSP(nyEI zw($_~S>VEy(z-T|C-;EBs$O7S@fj`>5s~eNlc=r6TH+Y^8N`8vcI%S4*58UAf;?+8 zzhGwObt4&l!1sv^#$Q%|Jdj5qfv0+j+}NiwZ(Id0YNw!|$U#1n3RN&MIz(=tacK>B zvMhmi%Dir*VSp$+aXN5aRmf9dE_ue#0I;}DpxmVR5mPd^1l9l-0G|UMs9^ro3pW2N z8^vm1c`qS-9?krcS?c7JQceZXZbyyC_B#W(Af;4QYc;pX=mKC#FTtb*gh(20Ol%sV zfQ=I9>F6gMgP)~6j=?QL5i-f`4Ym+?s)v~D!{qsMrVw$QQEb3U!pb@>rF30Y$x~n) zklRUMKCrx}*pnY5Pm!Jh>{ZoM2Q9_`al+wPf;_p&>aE1CY^3t)7NDQVMqN?Yz8@oR z8=64up;bL`&?>9}t^_`sQaY#2UghE7g~XBe;R=A&1ZVo|QQybNODY;euy`tY6|cGh zeZcpKG}XJ?JCrSl`W)if<>bS!1m>rd2I>-MF>p)fSoR<)n~pT}6P3P>2R@Qgx}#$L zoy}o7QBXA}8}$j`4k#Q*g~+`z`sEc&zbJ#rgvGoa!`FXmg!T2n;2%DXKt(r~E6J-`m56gqM`T=E1=KSJj{}ZR zDc#v6`p#hNO%N#O+}Se1_w}^m1GPbaX)qB*xHO@kH zJ=COrTwPt_8D42_6*cvxhCY*vb?Px{uHx1ZsQankQ{QM_uGHA5NCX(iP#sFTzk+D+tELY<=imtidA;wCls+}Qeo%rY#PTo(7M7uo&k z9+iPQLH&ffw8V4kQ;%-cfc{lon>i5GmFgGNR#)B{kubLEzm_0RO})`Z)v`9~_Wi!Z zfK(T&huawr#*T$Lvv~MrwytIBdmA~ZUc=$Gu*9HhhC==tN02VkN*H?Hxt4p;*QsZz zTQ_=e+o|W399+M8mAX$u2R91Tt<_W2|frz}Ov{`(mp*suvq(UKy-V zzoX7=>VUf#26>KE=UZO#+@l`eib40NuT$?U#~*8kd4IkY2zPWM49QcLJQ^?azt~E( z!e|h(s^q|H#pfc!RWNFuZ2=60`JXJmZE0*>XRA|NJ&Cc!jn|c&fW|^xuD+tBljuOG za|~;1k>$x#Q*TvwZP#RWGa~L~oK|)8sW+>ybOZ%FhXccva<2N6<;kP^sQRvUPilYl zw+)(5O?_Pbq&iyptbh^QdZYS>2CcK|0z(1MZ8q4j$&FFpPz#c%1 z)d-CK)y7DA4Qc;*TdntO3Pz~oV@ABI5vUou)z#{o9U%!|gJC3t%`;Lm%0$(NqF?=~ zjSf|mg&}57Fydv6nrz+F|B)e$+AD5b0E0L)4J+#*L+UhYJ=YlFsGPcp&4-c1^eMx< zZ`7nU7V$=dpk3>DG!oyAFue3@ny`i!tGUOTTLa?=$=8fL+(s@yT{pT$eYMSu*R&Xh zb9N`gGykx$%`_4NMt0#Yc7jf6kmzI^yPefhGstT zqt|P-q4ShWO>H%b#rc@!(+f6*n!3ag%g3s_+94T_hK}Ex|(IEa3E% zQd2uhwnVHMTg$<~7lD_Nf53l>Z%G`>ev%;5O+?9>yNDyY%Nkwx$Jipq5taMr5p9(A zAx`J+K%CZX_Ie9EPPCRfKc%#^$@gnr+wNk4_XR#p)aV=AqWjm$w3;B)LqwyHdkJ#Q zC+Y$%8jgfA3Nq|W)B)I~`0PZKPniKsBFfz)S~JfYa3}Bu;K!}1GSYIz%EqUI~W zHSOw%*!H)+kVbDIDulfhm`DZ2RbliIrI`O4IIZ2SG%N9-j0Ccsfp-G$Bg*7eVr&(| za-xCnIlv87C_h}Ohonv*>KK23@SBV#+XwoIDq&v-E(I31(x>%os1$+fDDR0IpqD}`6A#|iS09(^qv%ejv*Kqs|a0zf}O6i{V z4r$YI*XJvM$Ese#v7;VBL8dvty9sah&IFly z>9DyJs1X(5A0b*yd<(dxlbYCd;-X_5K->X%G4N{OK*DmHLTAirHPN`_kA$ST3Am#Q zR@HFP35)%#P$v^)ng_h5`0PmayxRl7BH#u>x4DIAT=GOGH*~4e0yhLkS+<>s4vPB$ zyAd(B$-q`LKZsio+^!%RliW{qxw)2T70}Uy8H%nW&|nyO)6;<638^%jh?dVGTm!QS zV)e2iFuEmcBB8$w5M+6b2*S=M@{b+^9wu5tJ_fAnCejQ>R}*M33UBuqBIY)Qa8gbu z2sDjQ#wQg&pGa(hb>)13Fs)Y+k?$2mYRFR5y2acTT7k#*V QdjJ3c07*qoM6N<$f`c;9-T(jq diff --git a/app/src/main/res/drawable-xxxhdpi/ic_next_outline.png b/app/src/main/res/drawable-xxxhdpi/ic_next_outline.png deleted file mode 100644 index 34fe17702ff335e31c6c0decaffbc64927bc9892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7012 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 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_pause_outline.png b/app/src/main/res/drawable-xxxhdpi/ic_pause_outline.png deleted file mode 100644 index 162ed84d1f497b59c708e06b510e56eae8006900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4724 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 diff --git a/app/src/main/res/drawable-xxxhdpi/img_play_outline_empty.png b/app/src/main/res/drawable-xxxhdpi/img_play_outline_empty.png deleted file mode 100644 index df8727abdb133e6d99e3b44abe6934d0e86d5ed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6911 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 FV1g~FaR2}S diff --git a/app/src/main/res/layout/bottom_video_time_holder.xml b/app/src/main/res/layout/bottom_video_time_holder.xml index 53701119c..3a7b6a477 100644 --- a/app/src/main/res/layout/bottom_video_time_holder.xml +++ b/app/src/main/res/layout/bottom_video_time_holder.xml @@ -16,7 +16,7 @@ android:layout_marginTop="@dimen/activity_margin" android:background="?attr/selectableItemBackgroundBorderless" android:padding="@dimen/normal_margin" - android:src="@drawable/ic_prev_outline" + android:src="@drawable/ic_prev_outline_vector" android:visibility="invisible"/> + android:src="@drawable/ic_play_outline_vector"/> Date: Tue, 21 Apr 2020 17:49:49 +0200 Subject: [PATCH 22/75] fixing the glitch with bottom actionbar being at the top --- app/build.gradle | 6 +++--- .../gallery/pro/activities/ViewPagerActivity.kt | 3 +-- .../gallery/pro/fragments/VideoFragment.kt | 7 +++++-- build.gradle | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f76de02d7..8b7da264d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,8 +58,8 @@ android { flavorDimensions "licensing" productFlavors { - proprietary { } - foss { } + proprietary {} + foss {} } lintOptions { @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.26.15' + implementation 'com.simplemobiletools:commons:5.26.18' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index 710a6caf9..bce53fb3f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt @@ -762,8 +762,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } private fun initBottomActionsLayout() { - val useNavigationBarHeight = if (navigationBarBottom) navigationBarHeight else 0 - bottom_actions.layoutParams.height = resources.getDimension(R.dimen.bottom_actions_height).toInt() + useNavigationBarHeight + bottom_actions.layoutParams.height = resources.getDimension(R.dimen.bottom_actions_height).toInt() + navigationBarHeight if (config.bottomActions) { bottom_actions.beVisible() } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index b69396ea8..e15f2486d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt @@ -28,7 +28,10 @@ import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.activities.PanoramaVideoActivity import com.simplemobiletools.gallery.pro.activities.VideoActivity -import com.simplemobiletools.gallery.pro.extensions.* +import com.simplemobiletools.gallery.pro.extensions.config +import com.simplemobiletools.gallery.pro.extensions.getVideoDuration +import com.simplemobiletools.gallery.pro.extensions.hasNavBar +import com.simplemobiletools.gallery.pro.extensions.parseFileChannel import com.simplemobiletools.gallery.pro.helpers.* import com.simplemobiletools.gallery.pro.models.Medium import com.simplemobiletools.gallery.pro.views.MediaSideScroll @@ -457,7 +460,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private fun initTimeHolder() { var right = 0 - var bottom = if (context!!.navigationBarBottom) context!!.navigationBarHeight else 0 + var bottom = context!!.navigationBarHeight if (mConfig.bottomActions) { bottom += resources.getDimension(R.dimen.bottom_actions_height).toInt() } diff --git a/build.gradle b/build.gradle index 7c3d47b8e..1964c5972 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.6.2' + classpath 'com.android.tools.build:gradle:3.6.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" if (is_proprietary) { classpath 'ly.img.android.pesdk:plugin:7.2.0' From ea1f4781e06f696e69c85c85105dbafb6d961ae9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 21 Apr 2020 17:52:02 +0200 Subject: [PATCH 23/75] set up the bottom action buttons before displaying --- .../gallery/pro/activities/PhotoVideoActivity.kt | 2 +- .../gallery/pro/activities/ViewPagerActivity.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt index 27a010711..ff328654b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt @@ -282,8 +282,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList } private fun initBottomActions() { - initBottomActionsLayout() initBottomActionButtons() + initBottomActionsLayout() } private fun initBottomActionsLayout() { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index bce53fb3f..46c64ef55 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt @@ -399,8 +399,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } private fun initBottomActions() { - initBottomActionsLayout() initBottomActionButtons() + initBottomActionsLayout() } private fun initFavorites() { From f2c77693dbb8175fe0b6f7e6ae9d94fafb4139c2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 21 Apr 2020 17:57:15 +0200 Subject: [PATCH 24/75] hide the bottom actions by default --- app/src/main/res/layout/fragment_holder.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/layout/fragment_holder.xml b/app/src/main/res/layout/fragment_holder.xml index ab722a90a..6aea1be0a 100644 --- a/app/src/main/res/layout/fragment_holder.xml +++ b/app/src/main/res/layout/fragment_holder.xml @@ -1,6 +1,5 @@ - @@ -8,17 +7,18 @@ + android:layout_height="match_parent" /> + android:background="@drawable/gradient_background_flipped" + android:contentDescription="@null" /> + layout="@layout/bottom_actions" + android:visibility="gone" /> From 582048590f047ec52d6e72c37848c1b34ab8a525 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 21 Apr 2020 18:00:15 +0200 Subject: [PATCH 25/75] do not allow clicking the play/pause at fullscreen videos --- .../simplemobiletools/gallery/pro/fragments/VideoFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index e15f2486d..d2142bfc1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt @@ -504,7 +504,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } mSeekBar.setOnSeekBarChangeListener(if (mIsFullscreen) null else this) - arrayOf(mView.video_curr_time, mView.video_duration).forEach { + arrayOf(mView.video_curr_time, mView.video_duration, mView.video_toggle_play_pause).forEach { it.isClickable = !mIsFullscreen } From 3c277115c1efdc3de60e76a6ddb7394b99af4ef2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 21 Apr 2020 19:39:14 +0200 Subject: [PATCH 26/75] do not remove the custom PhotoEditorSDK permission --- app/src/main/AndroidManifest.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index febd7c9b4..b871b2d77 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,9 +7,6 @@ - From 9799aa8b7e463c10c16418f9fd93ba27f93380bc Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 21 Apr 2020 19:47:16 +0200 Subject: [PATCH 27/75] update version to 6.14.3 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8b7da264d..8b9e0eec2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 29 - versionCode 302 - versionName "6.14.2" + versionCode 304 + versionName "6.14.3" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From 7d27cf8efcac5a9255b585a72c27cf3ec8e889c0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 21 Apr 2020 19:47:24 +0200 Subject: [PATCH 28/75] updating changelog --- CHANGELOG.md | 7 +++++++ fastlane/metadata/android/en-US/changelogs/303.txt | 3 +++ 2 files changed, 10 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/303.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 8043313cc..e78e0f03c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========== +Version 6.14.3 *(2020-04-21)* +---------------------------- + + * Use the selected date format grouped thumbnail section titles too + * Fixed a glitch related to locked folders asking authentication too often + * Refresh the UI here and there a bit + Version 6.14.2 *(2020-04-18)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/303.txt b/fastlane/metadata/android/en-US/changelogs/303.txt new file mode 100644 index 000000000..c18baadc7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/303.txt @@ -0,0 +1,3 @@ + * Use the selected date format grouped thumbnail section titles too + * Fixed a glitch related to locked folders asking authentication too often + * Refresh the UI here and there a bit From c57b3edac5e669a4d8fc970dd91c40c03041caca Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 23 Apr 2020 21:21:55 +0200 Subject: [PATCH 29/75] minor code style update --- .../gallery/pro/fragments/VideoFragment.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index d2142bfc1..d3a2a8616 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt @@ -479,8 +479,8 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private fun checkIfPanorama() { try { val fis = FileInputStream(File(mMedium.path)) - fis.use { fis -> - context!!.parseFileChannel(mMedium.path, fis.channel, 0, 0, 0) { + fis.use { + context!!.parseFileChannel(mMedium.path, it.channel, 0, 0, 0) { mIsPanorama = true } } @@ -591,8 +591,9 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S return } - if (mExoPlayer == null) + if (mExoPlayer == null) { return + } if (mIsPlaying) { mExoPlayer!!.playWhenReady = true From b5edf28e373e1069acf418961cdc6ea06c1bf91c Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 23 Apr 2020 21:52:25 +0200 Subject: [PATCH 30/75] update commons to 5.26.24 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 8b9e0eec2..9eba648fd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.26.18' + implementation 'com.simplemobiletools:commons:5.26.24' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' From f8c80c2a5faee3e7d641062961a92f9415703a7a Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 23 Apr 2020 22:24:42 +0200 Subject: [PATCH 31/75] speed up the fastscroller date text fetching --- .../gallery/pro/activities/MainActivity.kt | 6 +++++- .../gallery/pro/activities/ViewPagerActivity.kt | 1 + .../gallery/pro/dialogs/PickDirectoryDialog.kt | 6 ++++-- .../com/simplemobiletools/gallery/pro/models/Directory.kt | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 8da857d18..6ca984710 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -71,6 +71,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { private var mLatestMediaDateId = 0L private var mCurrentPathPrefix = "" // used at "Group direct subfolders" for navigation private var mOpenedSubfolders = arrayListOf("") // used at "Group direct subfolders" for navigating Up with the back button + private var mDateFormat = "" + private var mTimeFormat = "" private var mLastMediaHandler = Handler() private var mTempShowHiddenHandler = Handler() private var mZoomListener: MyRecyclerView.MyZoomListener? = null @@ -161,6 +163,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { override fun onResume() { super.onResume() config.isThirdPartyIntent = false + mDateFormat = config.dateFormat + mTimeFormat = getTimeFormat() if (mStoredAnimateGifs != config.animateGifs) { getRecyclerAdapter()?.updateAnimateGifs(config.animateGifs) @@ -1199,7 +1203,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { private fun getCurrentlyDisplayedDirs() = getRecyclerAdapter()?.dirs ?: ArrayList() - private fun getBubbleTextItem(index: Int) = getRecyclerAdapter()?.dirs?.getOrNull(index)?.getBubbleText(config.directorySorting, this) + private fun getBubbleTextItem(index: Int) = getRecyclerAdapter()?.dirs?.getOrNull(index)?.getBubbleText(config.directorySorting, this, mDateFormat, mTimeFormat) ?: "" private fun setupLatestMediaId() { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index 46c64ef55..75d4f965d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt @@ -1169,6 +1169,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } } + @SuppressLint("SourceLockedOrientationActivity") private fun checkOrientation() { if (!mIsOrientationLocked && config.screenRotation == ROTATE_BY_ASPECT_RATIO) { var flipSides = false diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/PickDirectoryDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/PickDirectoryDialog.kt index cf8f0b89e..4cad9e85c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/PickDirectoryDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/PickDirectoryDialog.kt @@ -122,6 +122,8 @@ class PickDirectoryDialog(val activity: BaseSimpleActivity, val sourcePath: Stri val scrollHorizontally = activity.config.scrollHorizontally && isGridViewType val sorting = activity.config.directorySorting + val dateFormat = activity.config.dateFormat + val timeFormat = activity.getTimeFormat() view.apply { directories_grid.adapter = adapter @@ -134,12 +136,12 @@ class PickDirectoryDialog(val activity: BaseSimpleActivity, val sourcePath: Stri if (scrollHorizontally) { directories_horizontal_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble directories_horizontal_fastscroller.setViews(directories_grid) { - directories_horizontal_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity)) + directories_horizontal_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity, dateFormat, timeFormat)) } } else { directories_vertical_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble directories_vertical_fastscroller.setViews(directories_grid) { - directories_vertical_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity)) + directories_vertical_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity, dateFormat, timeFormat)) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt index f68ae3171..4f37ea010 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt @@ -32,11 +32,11 @@ data class Directory( constructor() : this(null, "", "", "", 0, 0L, 0L, 0L, 0, 0, "", 0, 0) - fun getBubbleText(sorting: Int, context: Context) = when { + fun getBubbleText(sorting: Int, context: Context, dateFormat: String? = null, timeFormat: String? = null) = when { sorting and SORT_BY_NAME != 0 -> name sorting and SORT_BY_PATH != 0 -> path sorting and SORT_BY_SIZE != 0 -> size.formatSize() - sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context) + sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context, dateFormat, timeFormat) else -> taken.formatDate(context) } From db210e8bd12c7ca9c2cb47f632d3fa4c75a262cc Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 23 Apr 2020 22:34:58 +0200 Subject: [PATCH 32/75] speed up the sidebar date and time formatter at scrolling --- .../gallery/pro/activities/MediaActivity.kt | 7 ++++++- .../gallery/pro/activities/SearchActivity.kt | 6 +++++- .../gallery/pro/adapters/MediaAdapter.kt | 4 +++- .../gallery/pro/dialogs/PickMediumDialog.kt | 9 +++++++-- .../com/simplemobiletools/gallery/pro/models/Medium.kt | 4 ++-- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index c67750636..8ba0ec26c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -61,6 +61,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { private var mLoadedInitialPhotos = false private var mIsSearchOpen = false private var mLastSearchedText = "" + private var mDateFormat = "" + private var mTimeFormat = "" private var mLatestMediaId = 0L private var mLatestMediaDateId = 0L private var mLastMediaHandler = Handler() @@ -122,6 +124,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { override fun onResume() { super.onResume() + mDateFormat = config.dateFormat + mTimeFormat = getTimeFormat() + if (mStoredAnimateGifs != config.animateGifs) { getMediaAdapter()?.updateAnimateGifs(config.animateGifs) } @@ -443,7 +448,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { if (mediaAdapter?.isASectionTitle(index) == true) { realIndex++ } - return mediaAdapter?.getItemBubbleText(realIndex, sorting) ?: "" + return mediaAdapter?.getItemBubbleText(realIndex, sorting, mDateFormat, mTimeFormat) ?: "" } private fun checkLastMediaChanged() { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt index ced82efa0..4eea261ac 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt @@ -31,6 +31,8 @@ import java.io.File class SearchActivity : SimpleActivity(), MediaOperationsListener { private var mIsSearchOpen = false private var mLastSearchedText = "" + private var mDateFormat = "" + private var mTimeFormat = "" private var mSearchMenuItem: MenuItem? = null private var mCurrAsyncTask: GetMediaAsynctask? = null @@ -40,6 +42,8 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener { super.onCreate(savedInstanceState) setContentView(R.layout.activity_search) media_empty_text_placeholder.setTextColor(config.textColor) + mDateFormat = config.dateFormat + mTimeFormat = getTimeFormat() getAllMedia() } @@ -232,7 +236,7 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener { if (mediaAdapter?.isASectionTitle(index) == true) { realIndex++ } - return mediaAdapter?.getItemBubbleText(realIndex, sorting) ?: "" + return mediaAdapter?.getItemBubbleText(realIndex, sorting, mDateFormat, mTimeFormat) ?: "" } private fun measureRecyclerViewContent(media: ArrayList) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt index abe446094..eb9564979 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt @@ -493,7 +493,9 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList name sorting and SORT_BY_PATH != 0 -> path sorting and SORT_BY_SIZE != 0 -> size.formatSize() - sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context) + sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context, dateFormat, timeFormat) else -> taken.formatDate(context) } From 0a98fd053605aaf0276dee8fbb19e8ed80e6fa05 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 23 Apr 2020 23:02:38 +0200 Subject: [PATCH 33/75] catch exceptions thrown at getting file date taken --- .../gallery/pro/extensions/Context.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index b205d09c9..239deeb9b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -894,16 +894,14 @@ fun Context.getFileDateTaken(path: String): Long { val selection = "${Images.Media.DATA} = ?" val selectionArgs = arrayOf(path) - val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null) - cursor?.use { - if (cursor.moveToFirst()) { - do { - try { - return cursor.getLongValue(Images.Media.DATE_TAKEN) - } catch (ignored: Exception) { - } - } while (cursor.moveToNext()) + try { + val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null) + cursor?.use { + if (cursor.moveToFirst()) { + return cursor.getLongValue(Images.Media.DATE_TAKEN) + } } + } catch (ignored: Exception) { } return 0L From 26e96418b6dff379b0d260dd279a7669b2023302 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 24 Apr 2020 11:22:38 +0200 Subject: [PATCH 34/75] speed up some folder visibility checks --- app/build.gradle | 2 +- .../gallery/pro/activities/MediaActivity.kt | 2 +- .../gallery/pro/adapters/DirectoryAdapter.kt | 8 ++++---- .../gallery/pro/extensions/Context.kt | 7 +++---- .../gallery/pro/extensions/String.kt | 11 ++++++----- .../gallery/pro/helpers/MediaFetcher.kt | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9eba648fd..770a85eb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.26.24' + implementation 'com.simplemobiletools:commons:5.26.25' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index 8ba0ec26c..d68db8212 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -221,7 +221,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_media, menu) - val isFolderHidden = mPath.containsNoMedia() + val isFolderHidden = mPath.containsNoMedia(this) menu.apply { findItem(R.id.group).isVisible = !config.scrollHorizontally diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index 224c6556c..230216da3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -149,8 +149,8 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList) { - menu.findItem(R.id.cab_hide).isVisible = selectedPaths.any { !it.doesThisOrParentHaveNoMedia() } - menu.findItem(R.id.cab_unhide).isVisible = selectedPaths.any { it.doesThisOrParentHaveNoMedia() } + menu.findItem(R.id.cab_hide).isVisible = selectedPaths.any { !it.doesThisOrParentHaveNoMedia(activity) } + menu.findItem(R.id.cab_unhide).isVisible = selectedPaths.any { it.doesThisOrParentHaveNoMedia(activity) } } private fun checkPinBtnVisibility(menu: Menu, selectedPaths: ArrayList) { @@ -240,7 +240,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList if (success) { - if (path.containsNoMedia()) { + if (path.containsNoMedia(activity)) { activity.removeNoMedia(path) { if (activity.config.shouldShowHidden) { updateFolderNames() @@ -320,7 +320,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList() val includedFolders = activity.config.includedFolders val newDirs = dirs.filterIndexed { index, directory -> - val removeDir = directory.path.doesThisOrParentHaveNoMedia() && !includedFolders.contains(directory.path) + val removeDir = directory.path.doesThisOrParentHaveNoMedia(activity) && !includedFolders.contains(directory.path) if (removeDir) { affectedPositions.add(index) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 239deeb9b..5c4bfabd2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -370,7 +370,7 @@ fun Context.storeDirectoryItems(items: ArrayList) { fun Context.checkAppendingHidden(path: String, hidden: String, includedFolders: MutableSet): String { val dirName = getFolderNameFromPath(path) - return if (path.doesThisOrParentHaveNoMedia() && !path.isThisOrParentIncluded(includedFolders)) { + return if (path.doesThisOrParentHaveNoMedia(this) && !path.isThisOrParentIncluded(includedFolders)) { "$dirName $hidden" } else { dirName @@ -516,7 +516,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: val shouldShowHidden = config.shouldShowHidden || forceShowHidden val excludedPaths = config.excludedFolders val includedPaths = config.includedFolders - var filteredDirectories = directories.filter { it.path.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden) } as ArrayList + var filteredDirectories = directories.filter { it.path.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, this) } as ArrayList val filterMedia = config.filterMedia filteredDirectories = (when { @@ -534,7 +534,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: val hiddenString = resources.getString(R.string.hidden) filteredDirectories.forEach { - it.name = if (it.path.doesThisOrParentHaveNoMedia() && !it.path.isThisOrParentIncluded(includedPaths)) { + it.name = if (it.path.doesThisOrParentHaveNoMedia(this) && !it.path.isThisOrParentIncluded(includedPaths)) { "${it.name.removeSuffix(hiddenString).trim()} $hiddenString" } else { it.name.removeSuffix(hiddenString).trim() @@ -543,7 +543,6 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: val clone = filteredDirectories.clone() as ArrayList callback(clone.distinctBy { it.path.getDistinctPath() } as ArrayList) - removeInvalidDBDirectories(filteredDirectories) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt index 2c0420b9a..1408d33fc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt @@ -1,9 +1,10 @@ package com.simplemobiletools.gallery.pro.extensions +import android.content.Context import android.media.MediaMetadataRetriever import android.os.Environment -import com.simplemobiletools.commons.extensions.doesThisOrParentHaveNoMedia -import com.simplemobiletools.commons.helpers.NOMEDIA +import com.simplemobiletools.commons.extensions.containsNoMedia +import com.simplemobiletools.commons.extensions.doesParentHaveNoMedia import java.io.File import java.io.IOException @@ -11,7 +12,7 @@ fun String.isThisOrParentIncluded(includedPaths: MutableSet) = includedP fun String.isThisOrParentExcluded(excludedPaths: MutableSet) = excludedPaths.any { equals(it, true) } || excludedPaths.any { "$this/".startsWith("$it/", true) } -fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPaths: MutableSet, showHidden: Boolean): Boolean { +fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPaths: MutableSet, showHidden: Boolean, context: Context): Boolean { if (isEmpty()) { return false } @@ -35,7 +36,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPath val containsNoMedia = if (showHidden) { false } else { - File(this, NOMEDIA).exists() + file.containsNoMedia(context) } return if (!showHidden && containsNoMedia) { @@ -49,7 +50,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPath } else if (!showHidden && file.isDirectory && file.canonicalFile == file.absoluteFile) { var containsNoMediaOrDot = containsNoMedia || contains("/.") if (!containsNoMediaOrDot) { - containsNoMediaOrDot = file.doesThisOrParentHaveNoMedia() + containsNoMediaOrDot = file.doesParentHaveNoMedia(context) } !containsNoMediaOrDot } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index 1e42aa243..ed11d0fe2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -66,7 +66,7 @@ class MediaFetcher(val context: Context) { val shouldShowHidden = config.shouldShowHidden val excludedPaths = config.excludedFolders val includedPaths = config.includedFolders - folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden) }.toMutableList() as ArrayList + folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, context) }.toMutableList() as ArrayList } catch (e: Exception) { ArrayList() } @@ -192,7 +192,7 @@ class MediaFetcher(val context: Context) { val showHidden = config.shouldShowHidden val excludedFolders = config.excludedFolders - foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden) }.toHashSet() + foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden, context) }.toHashSet() return foldersToScan.distinctBy { it.getDistinctPath() }.toMutableSet() as LinkedHashSet } From aa4af8a292e7d714575fa63afc993fdd502a457b Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 24 Apr 2020 14:40:55 +0200 Subject: [PATCH 35/75] make folders distinct before checking if they should be visible --- .../com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index ed11d0fe2..ddf73d713 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -192,8 +192,8 @@ class MediaFetcher(val context: Context) { val showHidden = config.shouldShowHidden val excludedFolders = config.excludedFolders - foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden, context) }.toHashSet() - return foldersToScan.distinctBy { it.getDistinctPath() }.toMutableSet() as LinkedHashSet + return foldersToScan.distinctBy { it.getDistinctPath() } + .filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden, context) }.toMutableSet() as LinkedHashSet } private fun addFolder(curFolders: HashSet, folder: String) { From 1b1fac9b56eb5eeb7db5618b5d5ce180b9a6c15a Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 24 Apr 2020 17:48:26 +0200 Subject: [PATCH 36/75] flip some checks at Portrait photos to make it quicker --- .../simplemobiletools/gallery/pro/activities/MainActivity.kt | 3 ++- .../com/simplemobiletools/gallery/pro/extensions/Context.kt | 2 +- .../com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 6ca984710..086f853a0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -954,6 +954,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { if (!directory.isRecycleBin()) { mediaDB.insertAll(curMedia) } + getCachedMedia(directory.path, getVideosOnly, getImagesOnly) { it.forEach { if (!curMedia.contains(it)) { @@ -1163,7 +1164,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } else if (it.path != config.tempFolderPath) { val children = if (isPathOnOTG(it.path)) getOTGFolderChildrenNames(it.path) else File(it.path).list()?.asList() val hasMediaFile = children?.any { - it != null && (it.isMediaFile() || (File(it).isDirectory && it.startsWith("img_", true))) + it != null && (it.isMediaFile() || (it.startsWith("img_", true) && File(it).isDirectory)) } ?: false if (!hasMediaFile) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 5c4bfabd2..cd68b5c55 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -564,7 +564,7 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag val foldersToAdd = ArrayList() for (folder in foldersToScan) { val allFiles = File(folder).listFiles() ?: continue - allFiles.filter { it.isDirectory && it.name.startsWith("img_", true) }.forEach { + allFiles.filter { it.name.startsWith("img_", true) && it.isDirectory }.forEach { foldersToAdd.add(it.absolutePath) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index ddf73d713..4145ba453 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -172,7 +172,7 @@ class MediaFetcher(val context: Context) { val config = context.config val includedFolders = config.includedFolders val OTGPath = config.OTGPath - var foldersToScan = config.everShownFolders.filter { it == FAVORITES || it == RECYCLE_BIN || context.getDoesFilePathExist(it, OTGPath) }.toHashSet() + val foldersToScan = config.everShownFolders.filter { it == FAVORITES || it == RECYCLE_BIN || context.getDoesFilePathExist(it, OTGPath) }.toHashSet() cursor.use { if (cursor.moveToFirst()) { @@ -244,7 +244,7 @@ class MediaFetcher(val context: Context) { val isSvg = if (isImage || isVideo || isGif || isRaw) false else path.isSvg() if (!isImage && !isVideo && !isGif && !isRaw && !isSvg) { - if (showPortraits && file.isDirectory && file.name.startsWith("img_", true)) { + if (showPortraits && file.name.startsWith("img_", true) && file.isDirectory) { val portraitFiles = file.listFiles() ?: continue val cover = portraitFiles.firstOrNull { it.name.contains("cover", true) } ?: portraitFiles.firstOrNull() if (cover != null && !files.contains(cover)) { From 25177e6d3d8f988baf55fc44029e12258e4603fd Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 24 Apr 2020 17:55:10 +0200 Subject: [PATCH 37/75] show Portrait photos by default only on Android 9+ --- .../gallery/pro/activities/MainActivity.kt | 2 +- .../gallery/pro/dialogs/FilterMediaDialog.kt | 2 +- .../simplemobiletools/gallery/pro/helpers/Config.kt | 2 +- .../simplemobiletools/gallery/pro/helpers/Constants.kt | 10 +++++++++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 086f853a0..c53acb145 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -1065,7 +1065,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { if (mIsSearchOpen) { directories_empty_placeholder.text = getString(R.string.no_items_found) directories_empty_placeholder_2.beGone() - } else if (dirs.isEmpty() && config.filterMedia == TYPE_DEFAULT_FILTER) { + } else if (dirs.isEmpty() && config.filterMedia == getDefaultFileFilter()) { directories_empty_placeholder.text = getString(R.string.no_media_add_included) directories_empty_placeholder_2.text = getString(R.string.add_folder) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/FilterMediaDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/FilterMediaDialog.kt index dc8a06293..5bcd1d09c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/FilterMediaDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/FilterMediaDialog.kt @@ -46,7 +46,7 @@ class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result: result += TYPE_PORTRAITS if (result == 0) { - result = TYPE_DEFAULT_FILTER + result = getDefaultFileFilter() } activity.config.filterMedia = result diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt index 06663d8f1..ca35ccda2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt @@ -191,7 +191,7 @@ class Config(context: Context) : BaseConfig(context) { set(blackBackground) = prefs.edit().putBoolean(BLACK_BACKGROUND, blackBackground).apply() var filterMedia: Int - get() = prefs.getInt(FILTER_MEDIA, TYPE_DEFAULT_FILTER) + get() = prefs.getInt(FILTER_MEDIA, getDefaultFileFilter()) set(filterMedia) = prefs.edit().putInt(FILTER_MEDIA, filterMedia).apply() var dirColumnCnt: Int diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt index 683fbf25e..9e4c19f12 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.gallery.pro.helpers import com.simplemobiletools.commons.helpers.MONTH_SECONDS +import com.simplemobiletools.commons.helpers.isPiePlus // shared preferences const val DIRECTORY_SORT_ORDER = "directory_sort_order" @@ -169,7 +170,14 @@ const val TYPE_GIFS = 4 const val TYPE_RAWS = 8 const val TYPE_SVGS = 16 const val TYPE_PORTRAITS = 32 -const val TYPE_DEFAULT_FILTER = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS or TYPE_PORTRAITS + +fun getDefaultFileFilter(): Int { + var types = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS + if (isPiePlus()) { + types += TYPE_PORTRAITS + } + return types +} const val LOCATION_INTERNAL = 1 const val LOCATION_SD = 2 From 9cd55a1ce4c430faaf0da04f35b6fb71bcb1e35d Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 24 Apr 2020 18:08:01 +0200 Subject: [PATCH 38/75] updating photo editor sdk to 7.2.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1964c5972..7be743fd2 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ buildscript { classpath 'com.android.tools.build:gradle:3.6.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" if (is_proprietary) { - classpath 'ly.img.android.pesdk:plugin:7.2.0' + classpath 'ly.img.android.pesdk:plugin:7.2.1' } // NOTE: Do not place your application dependencies here; they belong From ca4697002341b3be79f8049ac34845f92d77449f Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 24 Apr 2020 19:11:14 +0200 Subject: [PATCH 39/75] removing un/hide and exclude menu items from folder screen --- .../gallery/pro/activities/MediaActivity.kt | 51 ++----------------- app/src/main/res/menu/menu_media.xml | 12 ----- 2 files changed, 4 insertions(+), 59 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index d68db8212..8b7bae108 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -22,7 +22,6 @@ import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.transition.Transition -import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE @@ -36,7 +35,10 @@ import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.adapters.MediaAdapter import com.simplemobiletools.gallery.pro.asynctasks.GetMediaAsynctask import com.simplemobiletools.gallery.pro.databases.GalleryDatabase -import com.simplemobiletools.gallery.pro.dialogs.* +import com.simplemobiletools.gallery.pro.dialogs.ChangeGroupingDialog +import com.simplemobiletools.gallery.pro.dialogs.ChangeSortingDialog +import com.simplemobiletools.gallery.pro.dialogs.ChangeViewTypeDialog +import com.simplemobiletools.gallery.pro.dialogs.FilterMediaDialog import com.simplemobiletools.gallery.pro.extensions.* import com.simplemobiletools.gallery.pro.helpers.* import com.simplemobiletools.gallery.pro.interfaces.MediaOperationsListener @@ -221,14 +223,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_media, menu) - val isFolderHidden = mPath.containsNoMedia(this) menu.apply { findItem(R.id.group).isVisible = !config.scrollHorizontally - findItem(R.id.hide_folder).isVisible = !isFolderHidden && !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN - findItem(R.id.unhide_folder).isVisible = isFolderHidden && !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN - findItem(R.id.exclude_folder).isVisible = !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN - findItem(R.id.empty_recycle_bin).isVisible = mPath == RECYCLE_BIN findItem(R.id.empty_disable_recycle_bin).isVisible = mPath == RECYCLE_BIN findItem(R.id.restore_all_files).isVisible = mPath == RECYCLE_BIN @@ -264,9 +261,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { R.id.folder_view -> switchToFolderView() R.id.change_view_type -> changeViewType() R.id.group -> showGroupByDialog() - R.id.hide_folder -> tryHideFolder() - R.id.unhide_folder -> unhideFolder() - R.id.exclude_folder -> tryExcludeFolder() R.id.create_new_folder -> createNewFolder() R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden() R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden() @@ -545,43 +539,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { } } - private fun tryHideFolder() { - if (config.wasHideFolderTooltipShown) { - hideFolder() - } else { - ConfirmationDialog(this, getString(R.string.hide_folder_description)) { - config.wasHideFolderTooltipShown = true - hideFolder() - } - } - } - - private fun hideFolder() { - addNoMedia(mPath) { - runOnUiThread { - if (!config.shouldShowHidden) { - finish() - } else { - invalidateOptionsMenu() - } - } - } - } - - private fun unhideFolder() { - removeNoMedia(mPath) { - runOnUiThread { - invalidateOptionsMenu() - } - } - } - - private fun tryExcludeFolder() { - ExcludeFolderDialog(this, arrayListOf(mPath)) { - finish() - } - } - private fun deleteDirectoryIfEmpty() { val fileDirItem = FileDirItem(mPath, mPath.getFilenameFromPath(), true) if (config.deleteEmptyFolders && !fileDirItem.isDownloadsFolder() && fileDirItem.isDirectory && fileDirItem.getProperFileCount(this, true) == 0) { diff --git a/app/src/main/res/menu/menu_media.xml b/app/src/main/res/menu/menu_media.xml index 13d96302a..98a5d3590 100644 --- a/app/src/main/res/menu/menu_media.xml +++ b/app/src/main/res/menu/menu_media.xml @@ -59,18 +59,6 @@ android:id="@+id/group" android:title="@string/group_by" app:showAsAction="never"/> - - - Date: Fri, 24 Apr 2020 19:22:32 +0200 Subject: [PATCH 40/75] update version to 6.14.4 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 770a85eb6..0aafce576 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 29 - versionCode 304 - versionName "6.14.3" + versionCode 305 + versionName "6.14.4" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From a2037bef9fc4ff50424a01fa9bc3815a4a4d26f6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 24 Apr 2020 19:22:39 +0200 Subject: [PATCH 41/75] updating changelog --- CHANGELOG.md | 8 ++++++++ fastlane/metadata/android/en-US/changelogs/305.txt | 4 ++++ 2 files changed, 12 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/305.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index e78e0f03c..543497307 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========== +Version 6.14.4 *(2020-04-24)* +---------------------------- + + * Improved the performance on multiple places + * Removed some unnecessary permissions added recently + * Fixed some photo editor glitches + * Show Portrait images by default only on Android 9+ + Version 6.14.3 *(2020-04-21)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/305.txt b/fastlane/metadata/android/en-US/changelogs/305.txt new file mode 100644 index 000000000..f0b9651e1 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/305.txt @@ -0,0 +1,4 @@ + * Improved the performance on multiple places + * Removed some unnecessary permissions added recently + * Fixed some photo editor glitches + * Show Portrait images by default only on Android 9+ From 963fd57113f4ad4debc07eee0deaa785406d1470 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 25 Apr 2020 12:52:52 +0200 Subject: [PATCH 42/75] avoid loading the gallery twice at first launch, caused by permission --- .../gallery/pro/activities/MainActivity.kt | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index c53acb145..189905f29 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -153,6 +153,14 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { directories_switch_searching.setOnClickListener { launchSearchActivity() } + + // just request the permission, tryLoadGallery will then trigger in onResume + handlePermission(PERMISSION_WRITE_STORAGE) { + if (!it) { + toast(R.string.no_storage_permissions) + finish() + } + } } override fun onStart() { @@ -431,27 +439,22 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } private fun tryLoadGallery() { - handlePermission(PERMISSION_WRITE_STORAGE) { - if (it) { - if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.gallery")) { - ConfirmationDialog(this, "", R.string.upgraded_from_free, R.string.ok, 0) {} - config.wasUpgradedFromFreeShown = true - } - - checkOTGPath() - checkDefaultSpamFolders() - - if (config.showAll) { - showAllMedia() - } else { - getDirectories() - } - - setupLayoutManager() - } else { - toast(R.string.no_storage_permissions) - finish() + if (hasPermission(PERMISSION_WRITE_STORAGE)) { + if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.gallery")) { + ConfirmationDialog(this, "", R.string.upgraded_from_free, R.string.ok, 0) {} + config.wasUpgradedFromFreeShown = true } + + checkOTGPath() + checkDefaultSpamFolders() + + if (config.showAll) { + showAllMedia() + } else { + getDirectories() + } + + setupLayoutManager() } } From 462182271dff837cb161b9a7bb281f43fe4caad9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 25 Apr 2020 16:20:21 +0200 Subject: [PATCH 43/75] make sure to always create a new thread for inserting some things in db --- .../gallery/pro/activities/MainActivity.kt | 15 ++++++++++----- .../gallery/pro/activities/MediaActivity.kt | 4 +++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 189905f29..4b043fa22 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -955,7 +955,9 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { // update directories and media files in the local db, delete invalid items updateDBDirectory(directory) if (!directory.isRecycleBin()) { - mediaDB.insertAll(curMedia) + Thread { + mediaDB.insertAll(curMedia) + }.start() } getCachedMedia(directory.path, getVideosOnly, getImagesOnly) { @@ -1029,10 +1031,13 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { dirs.add(newDir) setupAdapter(dirs) try { - directoryDao.insert(newDir) - if (folder != RECYCLE_BIN) { - mediaDB.insertAll(newMedia) - } + // make sure to create a new thread for these operations, dont just use the common bg thread + Thread { + directoryDao.insert(newDir) + if (folder != RECYCLE_BIN) { + mediaDB.insertAll(newMedia) + } + }.start() } catch (ignored: Exception) { } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index 8b7bae108..5ac44db95 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -873,7 +873,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { if (!isFromCache) { val mediaToInsert = (mMedia).filter { it is Medium && it.deletedTS == 0L }.map { it as Medium } try { - mediaDB.insertAll(mediaToInsert) + Thread { + mediaDB.insertAll(mediaToInsert) + }.start() } catch (e: Exception) { } } From 11304070468769ecd2389035a57cf6070927011d Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 26 Apr 2020 10:04:38 +0200 Subject: [PATCH 44/75] rescan folders after restarting so they get scanned quicker later --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 10 ++++++++++ .../pro/receivers/BootCompletedReceiver.kt | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/gallery/pro/receivers/BootCompletedReceiver.kt diff --git a/app/build.gradle b/app/build.gradle index 0aafce576..7358c9839 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.26.25' + implementation 'com.simplemobiletools:commons:5.26.26' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b871b2d77..de8fca45c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ + @@ -285,6 +286,15 @@ android:resource="@xml/widget_info"/> + + + + + + + Date: Sun, 26 Apr 2020 11:36:28 +0200 Subject: [PATCH 45/75] use a different thread for doing database things at folder thumbnails view --- .../gallery/pro/extensions/Context.kt | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index cd68b5c55..4af66f86e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -604,23 +604,25 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag callback(grouped.clone() as ArrayList) val OTGPath = config.OTGPath - val mediaToDelete = ArrayList() - media.filter { !getDoesFilePathExist(it.path, OTGPath) }.forEach { - if (it.path.startsWith(recycleBinPath)) { - deleteDBPath(it.path) - } else { - mediaToDelete.add(it) - } - } - try { - if (mediaToDelete.isNotEmpty()) { - mediaDB.deleteMedia(*mediaToDelete.toTypedArray()) - - mediaToDelete.filter { it.isFavorite }.forEach { - favoritesDB.deleteFavoritePath(it.path) + val mediaToDelete = ArrayList() + Thread { + media.filter { !getDoesFilePathExist(it.path, OTGPath) }.forEach { + if (it.path.startsWith(recycleBinPath)) { + deleteDBPath(it.path) + } else { + mediaToDelete.add(it) + } } - } + + if (mediaToDelete.isNotEmpty()) { + mediaDB.deleteMedia(*mediaToDelete.toTypedArray()) + + mediaToDelete.filter { it.isFavorite }.forEach { + favoritesDB.deleteFavoritePath(it.path) + } + } + }.start() } catch (ignored: Exception) { } } From 2a353df76ac0ec27688b735cf49fb63b4473a797 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 26 Apr 2020 11:40:20 +0200 Subject: [PATCH 46/75] lets disable Portrait file displaying by default, until it gets improved --- .../simplemobiletools/gallery/pro/helpers/Constants.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt index 9e4c19f12..35933b7df 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt @@ -171,13 +171,7 @@ const val TYPE_RAWS = 8 const val TYPE_SVGS = 16 const val TYPE_PORTRAITS = 32 -fun getDefaultFileFilter(): Int { - var types = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS - if (isPiePlus()) { - types += TYPE_PORTRAITS - } - return types -} +fun getDefaultFileFilter() = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS const val LOCATION_INTERNAL = 1 const val LOCATION_SD = 2 From ae7d2764935adb5f6af1a3fbd03302076373bf29 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 26 Apr 2020 12:02:21 +0200 Subject: [PATCH 47/75] update version to 6.14.5 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7358c9839..d88ea2484 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 29 - versionCode 305 - versionName "6.14.4" + versionCode 306 + versionName "6.14.5" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From 3214df4065fc260f8629c38a35c483bd225f6731 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 26 Apr 2020 12:02:29 +0200 Subject: [PATCH 48/75] updating changelog --- CHANGELOG.md | 6 ++++++ fastlane/metadata/android/en-US/changelogs/306.txt | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/306.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 543497307..3b9ed0668 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========== +Version 6.14.5 *(2020-04-26)* +---------------------------- + + * Disable Portrait photo showing by default, until it gets improved + * Added a couple other performance improvements here and there + Version 6.14.4 *(2020-04-24)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/306.txt b/fastlane/metadata/android/en-US/changelogs/306.txt new file mode 100644 index 000000000..777329cff --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/306.txt @@ -0,0 +1,2 @@ + * Disable Portrait photo showing by default, until it gets improved + * Added a couple other performance improvements here and there From 74cd554248f9a1f2ba005af2fa8136c0f1ad0157 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 26 Apr 2020 18:45:06 +0200 Subject: [PATCH 49/75] run media fetcher on reboot on a background thread --- .../gallery/pro/receivers/BootCompletedReceiver.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/receivers/BootCompletedReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/receivers/BootCompletedReceiver.kt index 9ccb705d7..f8aae1326 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/receivers/BootCompletedReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/receivers/BootCompletedReceiver.kt @@ -3,13 +3,16 @@ package com.simplemobiletools.gallery.pro.receivers import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.gallery.pro.extensions.updateDirectoryPath import com.simplemobiletools.gallery.pro.helpers.MediaFetcher class BootCompletedReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { - MediaFetcher(context).getFoldersToScan().forEach { - context.updateDirectoryPath(it) + ensureBackgroundThread { + MediaFetcher(context).getFoldersToScan().forEach { + context.updateDirectoryPath(it) + } } } } From 18071f5fe8ba5449dc06834ce19ad67bf788e903 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 26 Apr 2020 18:59:38 +0200 Subject: [PATCH 50/75] updating commons to 5.26.27 --- app/build.gradle | 2 +- .../gallery/pro/adapters/DirectoryAdapter.kt | 8 ++++---- .../simplemobiletools/gallery/pro/extensions/Context.kt | 4 ++-- .../simplemobiletools/gallery/pro/extensions/String.kt | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d88ea2484..dd442ccd5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.26.26' + implementation 'com.simplemobiletools:commons:5.26.27' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index 230216da3..224c6556c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -149,8 +149,8 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList) { - menu.findItem(R.id.cab_hide).isVisible = selectedPaths.any { !it.doesThisOrParentHaveNoMedia(activity) } - menu.findItem(R.id.cab_unhide).isVisible = selectedPaths.any { it.doesThisOrParentHaveNoMedia(activity) } + menu.findItem(R.id.cab_hide).isVisible = selectedPaths.any { !it.doesThisOrParentHaveNoMedia() } + menu.findItem(R.id.cab_unhide).isVisible = selectedPaths.any { it.doesThisOrParentHaveNoMedia() } } private fun checkPinBtnVisibility(menu: Menu, selectedPaths: ArrayList) { @@ -240,7 +240,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList if (success) { - if (path.containsNoMedia(activity)) { + if (path.containsNoMedia()) { activity.removeNoMedia(path) { if (activity.config.shouldShowHidden) { updateFolderNames() @@ -320,7 +320,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList() val includedFolders = activity.config.includedFolders val newDirs = dirs.filterIndexed { index, directory -> - val removeDir = directory.path.doesThisOrParentHaveNoMedia(activity) && !includedFolders.contains(directory.path) + val removeDir = directory.path.doesThisOrParentHaveNoMedia() && !includedFolders.contains(directory.path) if (removeDir) { affectedPositions.add(index) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 4af66f86e..99674593e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -370,7 +370,7 @@ fun Context.storeDirectoryItems(items: ArrayList) { fun Context.checkAppendingHidden(path: String, hidden: String, includedFolders: MutableSet): String { val dirName = getFolderNameFromPath(path) - return if (path.doesThisOrParentHaveNoMedia(this) && !path.isThisOrParentIncluded(includedFolders)) { + return if (path.doesThisOrParentHaveNoMedia() && !path.isThisOrParentIncluded(includedFolders)) { "$dirName $hidden" } else { dirName @@ -534,7 +534,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: val hiddenString = resources.getString(R.string.hidden) filteredDirectories.forEach { - it.name = if (it.path.doesThisOrParentHaveNoMedia(this) && !it.path.isThisOrParentIncluded(includedPaths)) { + it.name = if (it.path.doesThisOrParentHaveNoMedia() && !it.path.isThisOrParentIncluded(includedPaths)) { "${it.name.removeSuffix(hiddenString).trim()} $hiddenString" } else { it.name.removeSuffix(hiddenString).trim() diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt index 1408d33fc..0aa790df9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt @@ -36,7 +36,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPath val containsNoMedia = if (showHidden) { false } else { - file.containsNoMedia(context) + file.containsNoMedia() } return if (!showHidden && containsNoMedia) { @@ -50,7 +50,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPath } else if (!showHidden && file.isDirectory && file.canonicalFile == file.absoluteFile) { var containsNoMediaOrDot = containsNoMedia || contains("/.") if (!containsNoMediaOrDot) { - containsNoMediaOrDot = file.doesParentHaveNoMedia(context) + containsNoMediaOrDot = file.doesParentHaveNoMedia() } !containsNoMediaOrDot } else { From 6728bd1bf7abc3cacff8f8e40172e3449ba754bd Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 26 Apr 2020 19:13:29 +0200 Subject: [PATCH 51/75] update version to 6.14.6 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index dd442ccd5..86dd0da0e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 29 - versionCode 306 - versionName "6.14.5" + versionCode 307 + versionName "6.14.6" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From 94e756b0139289399e7679d635b662f2f5099643 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 26 Apr 2020 19:13:36 +0200 Subject: [PATCH 52/75] updating changelog --- CHANGELOG.md | 5 +++++ fastlane/metadata/android/en-US/changelogs/307.txt | 1 + 2 files changed, 6 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/307.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b9ed0668..7f56ad90c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========== +Version 6.14.6 *(2020-04-26)* +---------------------------- + + * Added a few more stability and performance improvements + Version 6.14.5 *(2020-04-26)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/307.txt b/fastlane/metadata/android/en-US/changelogs/307.txt new file mode 100644 index 000000000..c04bf610a --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/307.txt @@ -0,0 +1 @@ + * Added a few more stability and performance improvements From e7174f9001a9804173a0aea33eea8ed690c8a2d6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 10:07:22 +0200 Subject: [PATCH 53/75] update photo editor to 7.2.2 --- app/build.gradle | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 86dd0da0e..e5960e784 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.26.27' + implementation 'com.simplemobiletools:commons:5.27.2' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/build.gradle b/build.gradle index 7be743fd2..bdcacf2cc 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ buildscript { classpath 'com.android.tools.build:gradle:3.6.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" if (is_proprietary) { - classpath 'ly.img.android.pesdk:plugin:7.2.1' + classpath 'ly.img.android.pesdk:plugin:7.2.2' } // NOTE: Do not place your application dependencies here; they belong From 8bbc498724cebae33023bfb86dfff2a964b3cbec Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 10:14:55 +0200 Subject: [PATCH 54/75] catch some exceptions at inserting folders in db --- .../gallery/pro/activities/MainActivity.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 4b043fa22..8de0bfadb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -425,7 +425,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { private fun checkDefaultSpamFolders() { if (!config.spamFoldersChecked) { val spamFolders = arrayListOf( - "/storage/emulated/0/Android/data/com.facebook.orca/files/stickers" + "/storage/emulated/0/Android/data/com.facebook.orca/files/stickers" ) val OTGPath = config.OTGPath @@ -1030,16 +1030,17 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { val newDir = createDirectoryFromMedia(folder, newMedia, albumCovers, hiddenString, includedFolders, getProperFileSize) dirs.add(newDir) setupAdapter(dirs) - try { - // make sure to create a new thread for these operations, dont just use the common bg thread - Thread { + + // make sure to create a new thread for these operations, dont just use the common bg thread + Thread { + try { directoryDao.insert(newDir) if (folder != RECYCLE_BIN) { mediaDB.insertAll(newMedia) } - }.start() - } catch (ignored: Exception) { - } + } catch (ignored: Exception) { + } + }.start() } mLoadedInitialPhotos = true @@ -1213,7 +1214,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { private fun getCurrentlyDisplayedDirs() = getRecyclerAdapter()?.dirs ?: ArrayList() private fun getBubbleTextItem(index: Int) = getRecyclerAdapter()?.dirs?.getOrNull(index)?.getBubbleText(config.directorySorting, this, mDateFormat, mTimeFormat) - ?: "" + ?: "" private fun setupLatestMediaId() { ensureBackgroundThread { From f0736fe634f4ef749136786fc84ae2d15bd37fcd Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 10:17:17 +0200 Subject: [PATCH 55/75] show an error at deleting a folder exception, to see what is wrong there --- .../gallery/pro/activities/MainActivity.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 8de0bfadb..ebc2f1f5a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -546,7 +546,13 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { val fileDirItems = folders.asSequence().filter { it.isDirectory }.map { FileDirItem(it.absolutePath, it.name, true) }.toMutableList() as ArrayList when { fileDirItems.isEmpty() -> return - fileDirItems.size == 1 -> toast(String.format(getString(R.string.deleting_folder), fileDirItems.first().name)) + fileDirItems.size == 1 -> { + try { + toast(String.format(getString(R.string.deleting_folder), fileDirItems.first().name)) + } catch (e: Exception) { + showErrorToast(e) + } + } else -> { val baseString = if (config.useRecycleBin) R.plurals.moving_items_into_bin else R.plurals.delete_items val deletingItems = resources.getQuantityString(baseString, fileDirItems.size, fileDirItems.size) From a4c1da2ac669720484900635bc28a67d45587333 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 10:25:34 +0200 Subject: [PATCH 56/75] use a background thread for fetching video durations --- .../gallery/pro/fragments/VideoFragment.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index d3a2a8616..ed7a61842 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt @@ -330,7 +330,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } private fun setupTimer() { - activity!!.runOnUiThread(object : Runnable { + activity?.runOnUiThread(object : Runnable { override fun run() { if (mExoPlayer != null && !mIsDragged && mIsPlaying) { mCurrTime = (mExoPlayer!!.currentPosition / 1000).toInt() @@ -687,9 +687,13 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } private fun setupVideoDuration() { - mDuration = mMedium.path.getVideoDuration() - setupTimeHolder() - setPosition(0) + ensureBackgroundThread { + mDuration = mMedium.path.getVideoDuration() + activity?.runOnUiThread { + setupTimeHolder() + setPosition(0) + } + } } private fun videoPrepared() { From 69addc428ad8d5d7a1655746c6c9227a83038044 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 11:04:34 +0200 Subject: [PATCH 57/75] improving the way video durations are fetched, should be a lot quicker --- app/build.gradle | 2 +- .../pro/activities/ViewPagerActivity.kt | 2 +- .../gallery/pro/extensions/Context.kt | 80 +++++++++---------- .../gallery/pro/extensions/String.kt | 12 --- .../gallery/pro/fragments/VideoFragment.kt | 4 +- .../gallery/pro/helpers/MediaFetcher.kt | 18 ++--- 6 files changed, 53 insertions(+), 65 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e5960e784..d5dd6293e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.27.2' + implementation 'com.simplemobiletools:commons:5.27.3' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index 75d4f965d..06e97a770 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt @@ -389,7 +389,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } val isFavorite = favoritesDB.isFavorite(mPath) - val duration = if (type == TYPE_VIDEOS) mPath.getVideoDuration() else 0 + val duration = if (type == TYPE_VIDEOS) getVideoDuration(mPath) ?: 0 else 0 val ts = System.currentTimeMillis() val medium = Medium(null, mPath.getFilenameFromPath(), mPath, mPath.getParentPath(), ts, ts, File(mPath).length(), type, duration, isFavorite, 0) mediaDB.insert(medium) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 99674593e..559e949a5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -216,16 +216,16 @@ fun Context.getDirectParentSubfolders(dirs: ArrayList, currentPathPre } val directory = Directory(newDirId++, - parent, - subDirs.first().tmb, - getFolderNameFromPath(parent), - subDirs.sumBy { it.mediaCnt }, - lastModified, - dateTaken, - subDirs.sumByLong { it.size }, - getPathLocation(parent), - mediaTypes, - "") + parent, + subDirs.first().tmb, + getFolderNameFromPath(parent), + subDirs.sumBy { it.mediaCnt }, + lastModified, + dateTaken, + subDirs.sumByLong { it.size }, + getPathLocation(parent), + mediaTypes, + "") directory.containsMediaFilesDirectly = false dirs.add(directory) @@ -442,15 +442,15 @@ fun Context.getPathLocation(path: String): Int { fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList? = null) { val options = RequestOptions() - .signature(path.getFileSignature()) - .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true) - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) - .priority(Priority.LOW) - .format(DecodeFormat.PREFER_ARGB_8888) + .signature(path.getFileSignature()) + .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true) + .diskCacheStrategy(DiskCacheStrategy.RESOURCE) + .priority(Priority.LOW) + .format(DecodeFormat.PREFER_ARGB_8888) val builder = Glide.with(applicationContext) - .asBitmap() - .load(path) + .asBitmap() + .load(path) if (cropThumbnails) options.centerCrop() else options.fitCenter() builder.apply(options).into(target) @@ -458,34 +458,34 @@ fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boo fun Context.loadJpg(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList? = null) { val options = RequestOptions() - .signature(path.getFileSignature()) - .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true) - .priority(Priority.LOW) - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) + .signature(path.getFileSignature()) + .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true) + .priority(Priority.LOW) + .diskCacheStrategy(DiskCacheStrategy.RESOURCE) val builder = Glide.with(applicationContext) - .load(path) + .load(path) if (cropThumbnails) options.centerCrop() else options.fitCenter() builder.apply(options) - .transition(DrawableTransitionOptions.withCrossFade()) - .into(target) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(target) } fun Context.loadStaticGIF(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList? = null) { val options = RequestOptions() - .signature(path.getFileSignature()) - .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true) - .priority(Priority.LOW) - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) + .signature(path.getFileSignature()) + .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true) + .priority(Priority.LOW) + .diskCacheStrategy(DiskCacheStrategy.RESOURCE) val builder = Glide.with(applicationContext) - .asBitmap() // make sure the GIF wont animate - .load(path) + .asBitmap() // make sure the GIF wont animate + .load(path) if (cropThumbnails) options.centerCrop() else options.fitCenter() builder.apply(options) - .into(target) + .into(target) } fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boolean) { @@ -493,12 +493,12 @@ fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boo val options = RequestOptions().signature(path.getFileSignature()) Glide.with(applicationContext) - .`as`(PictureDrawable::class.java) - .listener(SvgSoftwareLayerSetter()) - .load(path) - .apply(options) - .transition(DrawableTransitionOptions.withCrossFade()) - .into(target) + .`as`(PictureDrawable::class.java) + .listener(SvgSoftwareLayerSetter()) + .load(path) + .apply(options) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(target) } fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: Boolean = false, forceShowHidden: Boolean = false, callback: (ArrayList) -> Unit) { @@ -789,9 +789,9 @@ fun Context.addPathToDB(path: String) { try { val isFavorite = favoritesDB.isFavorite(path) - val videoDuration = if (type == TYPE_VIDEOS) path.getVideoDuration() else 0 + val videoDuration = if (type == TYPE_VIDEOS) getVideoDuration(path) ?: 0 else 0 val medium = Medium(null, path.getFilenameFromPath(), path, path.getParentPath(), System.currentTimeMillis(), System.currentTimeMillis(), - File(path).length(), type, videoDuration, isFavorite, 0L) + File(path).length(), type, videoDuration, isFavorite, 0L) mediaDB.insert(medium) } catch (ignored: Exception) { @@ -888,7 +888,7 @@ fun Context.updateDirectoryPath(path: String) { fun Context.getFileDateTaken(path: String): Long { val projection = arrayOf( - Images.Media.DATE_TAKEN + Images.Media.DATE_TAKEN ) val uri = Files.getContentUri("external") diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt index 0aa790df9..3f36fa99e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt @@ -1,7 +1,6 @@ package com.simplemobiletools.gallery.pro.extensions import android.content.Context -import android.media.MediaMetadataRetriever import android.os.Environment import com.simplemobiletools.commons.extensions.containsNoMedia import com.simplemobiletools.commons.extensions.doesParentHaveNoMedia @@ -67,15 +66,4 @@ fun String.getDistinctPath(): String { } } -fun String.getVideoDuration(): Int { - var seconds = 0 - try { - val retriever = MediaMetadataRetriever() - retriever.setDataSource(this) - seconds = Math.round(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION).toInt() / 1000f) - } catch (e: Exception) { - } - return seconds -} - fun String.isDownloadsFolder() = equals(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString(), true) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index ed7a61842..4122e2941 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt @@ -29,7 +29,6 @@ import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.activities.PanoramaVideoActivity import com.simplemobiletools.gallery.pro.activities.VideoActivity import com.simplemobiletools.gallery.pro.extensions.config -import com.simplemobiletools.gallery.pro.extensions.getVideoDuration import com.simplemobiletools.gallery.pro.extensions.hasNavBar import com.simplemobiletools.gallery.pro.extensions.parseFileChannel import com.simplemobiletools.gallery.pro.helpers.* @@ -688,7 +687,8 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private fun setupVideoDuration() { ensureBackgroundThread { - mDuration = mMedium.path.getVideoDuration() + mDuration = context?.getVideoDuration(mMedium.path) ?: 0 + activity?.runOnUiThread { setupTimeHolder() setPosition(0) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index 4145ba453..4cbef5ad3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -49,9 +49,9 @@ class MediaFetcher(val context: Context) { val OTGPath = context.config.OTGPath val folders = getLatestFileFolders() folders.addAll(arrayListOf( - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(), - "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)}/Camera", - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(), + "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)}/Camera", + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() ).filter { context.getDoesFilePathExist(it, OTGPath) }) val filterMedia = context.config.filterMedia @@ -193,7 +193,7 @@ class MediaFetcher(val context: Context) { val showHidden = config.shouldShowHidden val excludedFolders = config.excludedFolders return foldersToScan.distinctBy { it.getDistinctPath() } - .filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden, context) }.toMutableSet() as LinkedHashSet + .filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden, context) }.toMutableSet() as LinkedHashSet } private fun addFolder(curFolders: HashSet, folder: String) { @@ -294,7 +294,7 @@ class MediaFetcher(val context: Context) { } else { val lastModified = if (getProperLastModified) file.lastModified() else 0L var dateTaken = lastModified - val videoDuration = if (getVideoDurations && isVideo) path.getVideoDuration() else 0 + val videoDuration = if (getVideoDurations && isVideo) context.getVideoDuration(path) ?: 0 else 0 if (getProperDateTaken) { var newDateTaken = dateTakens.remove(path) @@ -383,7 +383,7 @@ class MediaFetcher(val context: Context) { } val path = Uri.decode(file.uri.toString().replaceFirst("${context.config.OTGTreeUri}/document/${context.config.OTGPartition}%3A", "${context.config.OTGPath}/")) - val videoDuration = if (getVideoDurations) path.getVideoDuration() else 0 + val videoDuration = if (getVideoDurations) context.getVideoDuration(path) ?: 0 else 0 val isFavorite = favoritePaths.contains(path) val medium = Medium(null, filename, path, folder, dateModified, dateTaken, size, type, videoDuration, isFavorite, 0L) media.add(medium) @@ -396,8 +396,8 @@ class MediaFetcher(val context: Context) { val dateTakens = HashMap() if (folder != FAVORITES) { val projection = arrayOf( - Images.Media.DISPLAY_NAME, - Images.Media.DATE_TAKEN + Images.Media.DISPLAY_NAME, + Images.Media.DATE_TAKEN ) val uri = Files.getContentUri("external") @@ -494,7 +494,7 @@ class MediaFetcher(val context: Context) { val sortDescending = currentGrouping and GROUP_DESCENDING != 0 val sorted = if (currentGrouping and GROUP_BY_LAST_MODIFIED_DAILY != 0 || currentGrouping and GROUP_BY_LAST_MODIFIED_MONTHLY != 0 || - currentGrouping and GROUP_BY_DATE_TAKEN_DAILY != 0 || currentGrouping and GROUP_BY_DATE_TAKEN_MONTHLY != 0) { + currentGrouping and GROUP_BY_DATE_TAKEN_DAILY != 0 || currentGrouping and GROUP_BY_DATE_TAKEN_MONTHLY != 0) { mediumGroups.toSortedMap(if (sortDescending) compareByDescending { it.toLongOrNull() ?: 0L } else { From 6c77382f6060f95e1151f5432bdba03419be9e67 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 11:29:36 +0200 Subject: [PATCH 58/75] rescan created .nomedia files at hiding folders --- .../gallery/pro/extensions/Activity.kt | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt index 262939140..14d9a2e0c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt @@ -84,24 +84,24 @@ fun SimpleActivity.launchAbout() { LICENSE_PICASSO or LICENSE_EXOPLAYER or LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_FILTERS or LICENSE_GESTURE_VIEWS val faqItems = arrayListOf( - FAQItem(R.string.faq_5_title_commons, R.string.faq_5_text_commons), - FAQItem(R.string.faq_1_title, R.string.faq_1_text), - FAQItem(R.string.faq_2_title, R.string.faq_2_text), - FAQItem(R.string.faq_3_title, R.string.faq_3_text), - FAQItem(R.string.faq_4_title, R.string.faq_4_text), - FAQItem(R.string.faq_5_title, R.string.faq_5_text), - FAQItem(R.string.faq_6_title, R.string.faq_6_text), - FAQItem(R.string.faq_7_title, R.string.faq_7_text), - FAQItem(R.string.faq_8_title, R.string.faq_8_text), - FAQItem(R.string.faq_10_title, R.string.faq_10_text), - FAQItem(R.string.faq_11_title, R.string.faq_11_text), - FAQItem(R.string.faq_12_title, R.string.faq_12_text), - FAQItem(R.string.faq_13_title, R.string.faq_13_text), - FAQItem(R.string.faq_14_title, R.string.faq_14_text), - FAQItem(R.string.faq_15_title, R.string.faq_15_text), - FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons), - FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons), - FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons)) + FAQItem(R.string.faq_5_title_commons, R.string.faq_5_text_commons), + FAQItem(R.string.faq_1_title, R.string.faq_1_text), + FAQItem(R.string.faq_2_title, R.string.faq_2_text), + FAQItem(R.string.faq_3_title, R.string.faq_3_text), + FAQItem(R.string.faq_4_title, R.string.faq_4_text), + FAQItem(R.string.faq_5_title, R.string.faq_5_text), + FAQItem(R.string.faq_6_title, R.string.faq_6_text), + FAQItem(R.string.faq_7_title, R.string.faq_7_text), + FAQItem(R.string.faq_8_title, R.string.faq_8_text), + FAQItem(R.string.faq_10_title, R.string.faq_10_text), + FAQItem(R.string.faq_11_title, R.string.faq_11_text), + FAQItem(R.string.faq_12_title, R.string.faq_12_text), + FAQItem(R.string.faq_13_title, R.string.faq_13_text), + FAQItem(R.string.faq_14_title, R.string.faq_14_text), + FAQItem(R.string.faq_15_title, R.string.faq_15_text), + FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons), + FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons), + FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons)) startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true) } @@ -156,7 +156,11 @@ fun BaseSimpleActivity.addNoMedia(path: String, callback: () -> Unit) { } } else { try { - file.createNewFile() + if (file.createNewFile()) { + rescanFolderMedia(file.absolutePath) + } else { + toast(R.string.unknown_error_occurred) + } } catch (e: Exception) { showErrorToast(e) } @@ -419,7 +423,7 @@ fun Activity.fixDateTaken(paths: ArrayList, showToasts: Boolean, hasResc for (path in paths) { val dateTime = ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME_ORIGINAL) - ?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue + ?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue // some formats contain a "T" in the middle, some don't // sample dates: 2015-07-26T14:55:23, 2018:09:05 15:09:05 @@ -611,18 +615,18 @@ fun saveFile(path: String, bitmap: Bitmap, out: FileOutputStream, degrees: Int) fun Activity.getShortcutImage(tmb: String, drawable: Drawable, callback: () -> Unit) { ensureBackgroundThread { val options = RequestOptions() - .format(DecodeFormat.PREFER_ARGB_8888) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .fitCenter() + .format(DecodeFormat.PREFER_ARGB_8888) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .fitCenter() val size = resources.getDimension(R.dimen.shortcut_size).toInt() val builder = Glide.with(this) - .asDrawable() - .load(tmb) - .apply(options) - .centerCrop() - .into(size, size) + .asDrawable() + .load(tmb) + .apply(options) + .centerCrop() + .into(size, size) try { (drawable as LayerDrawable).setDrawableByLayerId(R.id.shortcut_image, builder.get()) From 0d0153323106fd937eb254de369fa71ce320c810 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 11:56:30 +0200 Subject: [PATCH 59/75] fix #1818, be less agressive at Favorite items cleanup --- .../com/simplemobiletools/gallery/pro/extensions/Context.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 559e949a5..79794510f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -606,6 +606,7 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag try { val mediaToDelete = ArrayList() + // creating a new thread intentionally, do not reuse the common background thread Thread { media.filter { !getDoesFilePathExist(it.path, OTGPath) }.forEach { if (it.path.startsWith(recycleBinPath)) { @@ -699,7 +700,6 @@ fun Context.deleteDBPath(path: String) { fun Context.deleteMediumWithPath(path: String) { try { mediaDB.deleteMediumPath(path) - favoritesDB.deleteFavoritePath(path) } catch (ignored: Exception) { } } From bf600a2fe4eb4c9b3b685111392146bd997f4709 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 12:49:43 +0200 Subject: [PATCH 60/75] updating Glide to 4.11.0 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d5dd6293e..2638f2be4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.27.3' + implementation 'com.simplemobiletools:commons:5.27.4' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' @@ -94,7 +94,7 @@ dependencies { implementation 'com.github.tibbi:gestureviews:512f929d82' implementation 'com.github.tibbi:subsampling-scale-image-view:381878c078' - kapt 'com.github.bumptech.glide:compiler:4.10.0' + kapt 'com.github.bumptech.glide:compiler:4.11.0' kapt 'androidx.room:room-compiler:2.2.5' implementation 'androidx.room:room-runtime:2.2.5' From 9e7350da162e8e4e66a37bad063b96c65f427ac7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 15:36:27 +0200 Subject: [PATCH 61/75] do not add the excluded folders into everShownFolders --- .../gallery/pro/activities/MainActivity.kt | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index ebc2f1f5a..99d8b4f5d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -1056,21 +1056,30 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { directories_refresh_layout.isRefreshing = false checkPlaceholderVisibility(dirs) } - checkInvalidDirectories(dirs) - val everShownFolders = config.everShownFolders as HashSet - dirs.mapTo(everShownFolders) { it.path } + checkInvalidDirectories(dirs) + if (mDirs.size > 50) { + excludeSpamFolders() + } + + val excludedFolders = config.excludedFolders + val everShownFolders = HashSet() + + // do not add excluded folders and their subfolders at everShownFolders + dirs.filter { dir -> + if (excludedFolders.any { dir.path.startsWith(it) }) { + return@filter false + } + return@filter true + }.mapTo(everShownFolders) { it.path } try { + // catch some extreme exceptions like too many everShownFolders for storing, shouldnt really happen config.everShownFolders = everShownFolders } catch (e: Exception) { config.everShownFolders = HashSet() } mDirs = dirs.clone() as ArrayList - - if (mDirs.size > 55) { - excludeSpamFolders() - } } private fun checkPlaceholderVisibility(dirs: ArrayList) { From 11140b964fbbc717a9b466605ab20d72c65b50fe Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 15:48:08 +0200 Subject: [PATCH 62/75] update version to 6.14.7 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2638f2be4..ca7810628 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 29 - versionCode 307 - versionName "6.14.6" + versionCode 308 + versionName "6.14.7" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From 2981b9d5c431a22ce41a05916f795ee63d99350e Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 4 May 2020 15:48:15 +0200 Subject: [PATCH 63/75] updating changelog --- CHANGELOG.md | 8 ++++++++ fastlane/metadata/android/en-US/changelogs/308.txt | 4 ++++ 2 files changed, 12 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/308.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f56ad90c..75d6f504c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========== +Version 6.14.7 *(2020-05-04)* +---------------------------- + + * Fixed a glitch with some favorite items disappearing + * Improve folder hiding, add the new .nomedia file into MediaStore + * Improve the performance of getting video file duration + * A few other improvements here and there + Version 6.14.6 *(2020-04-26)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/308.txt b/fastlane/metadata/android/en-US/changelogs/308.txt new file mode 100644 index 000000000..50ef5a7fd --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/308.txt @@ -0,0 +1,4 @@ + * Fixed a glitch with some favorite items disappearing + * Improve folder hiding, add the new .nomedia file into MediaStore + * Improve the performance of getting video file duration + * A few other improvements here and there From 88497c21afd15c18f3a671a5697bd7066a221594 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 5 May 2020 16:15:21 +0200 Subject: [PATCH 64/75] reverting glide back to 4.10.0, it was too unstable --- app/build.gradle | 4 ++-- .../gallery/pro/activities/ViewPagerActivity.kt | 2 +- .../com/simplemobiletools/gallery/pro/extensions/Context.kt | 2 +- .../simplemobiletools/gallery/pro/fragments/VideoFragment.kt | 2 +- .../com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ca7810628..68fbc02cd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.27.4' + implementation 'com.simplemobiletools:commons:5.27.7' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' @@ -94,7 +94,7 @@ dependencies { implementation 'com.github.tibbi:gestureviews:512f929d82' implementation 'com.github.tibbi:subsampling-scale-image-view:381878c078' - kapt 'com.github.bumptech.glide:compiler:4.11.0' + kapt 'com.github.bumptech.glide:compiler:4.10.0' kapt 'androidx.room:room-compiler:2.2.5' implementation 'androidx.room:room-runtime:2.2.5' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index 06e97a770..a29be1226 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt @@ -389,7 +389,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } val isFavorite = favoritesDB.isFavorite(mPath) - val duration = if (type == TYPE_VIDEOS) getVideoDuration(mPath) ?: 0 else 0 + val duration = if (type == TYPE_VIDEOS) getDuration(mPath) ?: 0 else 0 val ts = System.currentTimeMillis() val medium = Medium(null, mPath.getFilenameFromPath(), mPath, mPath.getParentPath(), ts, ts, File(mPath).length(), type, duration, isFavorite, 0) mediaDB.insert(medium) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 79794510f..f5fb3572d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -789,7 +789,7 @@ fun Context.addPathToDB(path: String) { try { val isFavorite = favoritesDB.isFavorite(path) - val videoDuration = if (type == TYPE_VIDEOS) getVideoDuration(path) ?: 0 else 0 + val videoDuration = if (type == TYPE_VIDEOS) getDuration(path) ?: 0 else 0 val medium = Medium(null, path.getFilenameFromPath(), path, path.getParentPath(), System.currentTimeMillis(), System.currentTimeMillis(), File(path).length(), type, videoDuration, isFavorite, 0L) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index 4122e2941..35c1b8913 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt @@ -687,7 +687,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private fun setupVideoDuration() { ensureBackgroundThread { - mDuration = context?.getVideoDuration(mMedium.path) ?: 0 + mDuration = context?.getDuration(mMedium.path) ?: 0 activity?.runOnUiThread { setupTimeHolder() diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index 4cbef5ad3..9e66b62b8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -294,7 +294,7 @@ class MediaFetcher(val context: Context) { } else { val lastModified = if (getProperLastModified) file.lastModified() else 0L var dateTaken = lastModified - val videoDuration = if (getVideoDurations && isVideo) context.getVideoDuration(path) ?: 0 else 0 + val videoDuration = if (getVideoDurations && isVideo) context.getDuration(path) ?: 0 else 0 if (getProperDateTaken) { var newDateTaken = dateTakens.remove(path) @@ -383,7 +383,7 @@ class MediaFetcher(val context: Context) { } val path = Uri.decode(file.uri.toString().replaceFirst("${context.config.OTGTreeUri}/document/${context.config.OTGPartition}%3A", "${context.config.OTGPath}/")) - val videoDuration = if (getVideoDurations) context.getVideoDuration(path) ?: 0 else 0 + val videoDuration = if (getVideoDurations) context.getDuration(path) ?: 0 else 0 val isFavorite = favoritePaths.contains(path) val medium = Medium(null, filename, path, folder, dateModified, dateTaken, size, type, videoDuration, isFavorite, 0L) media.add(medium) From 4839814129de05bb46de1979f835517c5e531b2d Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 5 May 2020 16:23:13 +0200 Subject: [PATCH 65/75] update version to 6.14.8 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 68fbc02cd..e69231253 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 29 - versionCode 308 - versionName "6.14.7" + versionCode 309 + versionName "6.14.8" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From af85817ebc4f696fc8b6d52eb2777728919246f5 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 5 May 2020 16:23:22 +0200 Subject: [PATCH 66/75] updating changelog --- CHANGELOG.md | 5 +++++ fastlane/metadata/android/en-US/changelogs/309.txt | 1 + 2 files changed, 6 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/309.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 75d6f504c..1d017dc06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========== +Version 6.14.8 *(2020-05-05)* +---------------------------- + + * Added some crashfixes + Version 6.14.7 *(2020-05-04)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/309.txt b/fastlane/metadata/android/en-US/changelogs/309.txt new file mode 100644 index 000000000..4e56a31f9 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/309.txt @@ -0,0 +1 @@ + * Added some crashfixes From 5bd32403b9a03252c841d23b52b51f2980145620 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 May 2020 21:24:17 +0200 Subject: [PATCH 67/75] updating some arabic strings --- app/src/main/res/values-ar/strings.xml | 180 ++++++++++++------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 999035282..f03d3e85e 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -10,17 +10,17 @@ إلغاء تثبيت المجلد تثبيت في الأعلى إظهار كل محتويات المجلدات - كل المحلات + كل المجلدات التبديل إلى عرض المجلد مجلد آخر عرض علي الخريطة موقع غير معروف - ذيادة عدد الأعمدة + زيادة عدد الأعمدة تقليل عدد الأعمدة تغيير صورة الغلاف تحديد صورة الصوت - السبوع + السطوع قفل الاتجاه فتح الاتجاه تغيير الاتجاه @@ -30,7 +30,7 @@ إصلاح تاريخ إلتقاط القيمة جارٍ الإصلاح… تم إصلاح التواريخ بنجاح - No Date Taken values have been found + لم يتم العثور على تاريخ التقاط القيم مشاركة الصورة الذي تم تغيير حجمها مرحباً,\n\nيبدو أنك قمت بترقية التطبيق المجاني القديم. يمكنك الآن إلغاء تثبيت الإصدار القديم، الذي يحتوي على زر \'الترقية إلى Pro\' في أعلي إعدادات التطبيق.\n\nسيتم حذف عناصر سلة المحذوفات فقط، كما سيتم حذف العناصر المفضلة، كما سيتعين عليك إعادة ضبط إعدادات التطبيق .\n\nشكراً! التبديل إلي البحث فى الملفات عبر كافة المجلدات المرئية @@ -80,8 +80,8 @@ تدوير مسار الصورة غير صحيح فشل تعديل الصورة - Image editing cancelled - File edited successfully + تم إلغاء تعديل الصورة + تم تعديل الملف بنجاح تعديل الصورة باستخدام: لم يتم العثور على أي محرر للصور موقع الملف غير معروف @@ -202,85 +202,85 @@ تبديل رؤية الملف - Custom - Reset - Square - Transform - Filter - None - Adjust - Shadows - Exposure - Highlights - Brightness - Contrast - Saturation - Clarity - Gamma - Blacks - Whites - Temperature - Sharpness - Reset - Focus - None - Radial - Linear - Mirrored - Gaussian - Text - Text Options - Text Color - Font - Add - Edit - Straighten - Font - Color - BG Color - Alignment - To Front - Delete - Your text - Brush - Color - Size - Hardness - To Front - Delete - Brush Color - Editor - Close Editor? - Do you really want to discard the image? - Yes - No - Cancel - Accept - Save - Exporting image… - Exporting image %s. - Flip H - Flip V - Undo - Redo - Color Picker - Transparent - White - Gray - Black - Light blue - Blue - Purple - Orchid - Pink - Red - Orange - Gold - Yellow - Olive - Green - Aquamarin - Pipettable color + مخصص + إعادة تعيين + مربع + تحويل + فلتر + لا شيء + ضبط + ظلال + التعرض + أكثر وضوحاً + السطوع + التباين + التشبع + الوضوح + جاما + دراجات الأسود + دراجات الأبيض + درجة الحرارة + الحدة + إعادة تعيين + تركيز + لا شيء + قطري + خطي + مرآة + جاوس + النص + خيارات النص + لون الخط + الخط + إضافة + تعديل + الصلابة + الخط + اللون + لون الخلفية + محاذاة + إلي الأمام + حذف + النص الخاص بك + الفرشاة + اللون + الحجم + الصلابة + إلي الأمام + حذف + لون الفرشاة + المحرر + هل تريد إغلاق المحرر؟ + هل تريد فعلاً تجاهل الصورة؟ + نعم + لا + إلغاء + موافق + حفظ + جارٍ تصدير الصورة… + جارٍ تصدير الصورة %s. + أنعكاس أفقي + أنعكاس رأسي + تراجع + إعادة + لاقط اللون + شفاف + أبيض + رمادي + أسود + أزرق فاتح + أزرق + بنفسجي + أرجواني + وردي + أحمر + برتقالي + ذهبي + أصفر + زيتوني + أخضر + زبرجد + Pipettable لون كيف يمكنني جعل تطبيق الاستديو معرض الجهاز الإفتراضي ؟ @@ -290,9 +290,9 @@ كيف يمكنني جعل ألبوماً يظهر دائماً في الأعلى ؟ يمكنك الضغط مطولاً علي الألبوم المطلوب وحدد أيقونة "التثبيت" في قائمة الإجراءات، التي ستقوم بتثبيته في الأعلي. يمكنك تثبيت مجلدات متعددة أيضا، سيتم فرز العناصر المثبتة حسب طريقة الفرز الإفتراضية. كيف يمكنني تسريع مقاطع الفيديو؟ - You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too. + يمكنك القيام بذلك عن طريق النقر المزدوج على جانب الشاشة, أو النقر على نصوص المدة الحالية أو القصوى بالقرب من شريط التمرير. إذا قمت بتمكين فتح مقاطع الفيديو على شاشة منفصلة في إعدادات التطبيق، يمكنك استخدام الإيماءات الأفقية أيضاً. ما هو الفرق بين إخفاء المجلد وإستبعاده ؟ - Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. الإستبعاد يمنع عرض المجلد فقط في الاستديو، بينما الإخفاء يعمل على مستوى النظام ويخفي المجلد من المعارض الأخرى أيضاً. يعمل عن طريق إنشاء ملف فارغ \ ".nomedia \" في المجلد المحدد ، والذي يمكنك إزالته بعد ذلك بواسطة أي مدير ملفات أيضًا. + لاحظ أن بعض الأجهزة لا تسمح بإخفاء المجلدات مثل الكاميرا ولقطات الشاشة والتنزيلات. الإستبعاد يمنع عرض المجلد فقط في الاستديو، بينما الإخفاء يعمل على مستوى النظام ويخفي المجلد من المعارض الأخرى أيضاً. يعمل عن طريق إنشاء ملف فارغ \ ".nomedia \" في المجلد المحدد ، والذي يمكنك إزالته بعد ذلك بواسطة أي مدير ملفات أيضًا. لماذا تظهر المجلدات مع صورة غلاف الموسيقى أو الملصقات؟ قد يحدث أن ترى بعض الألبومات غير العادية تظهر. يمكنك بسهولة إستبعادهم بالضغط مطولاً عليهم وأختر إستبعاد. في مربع الحوار التالي يمكنك بعد ذلك تحديد المجلد الاصل، من المحتمل ان يمنع ظهور الألبومات الأخري ذات الصلة أيضاً. المجلد الذي به صور لا يظهر، أو لا يظهر كل العناصر. ماذا يمكنني أن أفعل؟ @@ -316,7 +316,7 @@ المعرض البسيط الـ Pro - محرر ومدير الصور - Browse your memories without any interruptions with this photo and video gallery + أستعرض ذكرياتك دون أي انقطاع مع معرض الصور والفيديو هذا (تطبيق المعرض البسيط الـ Pro) هو معرض بدون إنترنت قابل للتخصيص بدرجة كبيرة يتمتع بتنظيم الصور وتحريرها وإستعادة الملفات المحذوفة من خلال "سلة المحذوفات" وحماية الملفات وإخفاؤها وعرض مجموعة كبيرة من تنسيقات الصور والفيديو المختلفة بما في ذلك تنسيقات RAW و SVG وغير ذلك الكثير. @@ -326,7 +326,7 @@ المعرض البسيط الـ Pro - الميزات ------------------------------------------------- - معرض بدون إنترنت بدون إعلانات أو نوافذ منبثقة + معرض بدون إنترنت بدون إعلانات أو نوافذ منبثقة • محرر صور (معرض البسيط) - قص، تدوير، تغيير حجم، رسم، فلاتر وغير ذلك • لا حاجة للوصول إلى الإنترنت، مما يمنحك المزيد من الخصوصية والأمان @@ -362,7 +362,7 @@ حماية وإخفاء الصور والفيديوهات والملفات باستخدام رمز الـ PIN أو النمط أو الماسح الضوئي لبصمة الاصبع لجهازك يمكنك حماية الصور ومقاطع الفيديو والألبومات بأكملها وإخفائها. يمكنك حماية التطبيق نفسه أو وضع قفل الأمان علي وظائف معينة للتطبيق علي سبيل المثال، لا يمكنك حذف ملف دون إجراء مسح ضوئي لبصمة الاصبع، مما يساعد علي حماية ملفاتك من الحذف غير المقصود. - أطلع على المجموعة الكاملة من الأدوات البسيطة هنا: + أطلع على المجموعة الكاملة من تطبيقات البسيط هنا: https://www.simplemobiletools.com موقع مستقل لتطبيق المعرض البسيط الـ Pro : From 1d1fdc8fa0ff66a0133f07477b30935d7943f04a Mon Sep 17 00:00:00 2001 From: Alberto Luaces Date: Thu, 7 May 2020 13:27:57 +0200 Subject: [PATCH 68/75] Update Galician language strings. --- app/src/main/res/values-gl/strings.xml | 278 ++++++++++++------------- 1 file changed, 139 insertions(+), 139 deletions(-) diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 7b030b01e..a8e0da8bf 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -23,26 +23,26 @@ Brillo Fixar orientación Desbloquear orientación - Change orientation - Force portrait - Force landscape - Use default orientation - Fix Date Taken value - Fixing… - Dates fixed successfully - No Date Taken values have been found - Share a resized version - Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks! - Switch to file search across all visible folders + Cambiar orientación + Forzar retrato + Forzar paisaxe + Usar a orientación predeterminada + Arranxar o valor da Data de Captura + Arranxando… + Datas arranxadas con éxito + Non se atoparon valores de Datas de Captura + Comparta unha versión reducida + Ola,\n\nsemella que actualizou desde a vella aplicación gratuita. Pode desinstalar a versión vella, que ten un botón \'Upgrade to Pro\' enriba da pantalla de configuración.\n\nSo terá os elementos borrados da Papeleira de reciclaxe, os elementos favoritos sen marcar e tamén terá que reiniciar os Axustes.\n\nGrazas! + Cambiar á procura de ficheiros en todolos cartafoles visibles. Filtrar medios Imaxes Vídeos GIFs - RAW images + Imaxes RAW SVGs - Portraits + Retratos Non se atoparon medios dos indicados polo filtro. Cambiar filtro @@ -65,7 +65,7 @@ Xestionar cartafoles incluídos Engadir cartafol Si ten algún cartafol con medios, mais non foi recoñecido polo aplicativo, pódeo engadir manualmente.\n\nEngadindo aquí elementos non eliminará outros. - No media files have been found. You can solve it by adding the folders containing media files manually. + Non se atopou ningún ficheiro audiovisual. Pode solucionalo engadindo manualmente algúns cartafoles con eses ficheiros. Redimensionar @@ -80,8 +80,8 @@ Rotar Ruta a imaxe non válida Fallo na edición da imaxe - Image editing cancelled - File edited successfully + Cancelouse a edición da imaxe + Ficheiro editado con éxito Editar imaxe con: Non se atopou ningún editor Localización do ficheiro descoñecida @@ -92,8 +92,8 @@ Voltear Voltear horizontalmente Voltear verticalmente - Free - Other + Libre + Outro Fondo de pantalla @@ -117,10 +117,10 @@ Orde aleatoria Mover atrás Reproducir en bucle - Animation - None - Fade - Slide + Animación + Nengún + Esvaecemento + Deslizamento Rematou a presentación Non se atoparon medios para a presentación @@ -135,28 +135,28 @@ Non agrupar ficheiros Cartafol Último modificado - Last modified (daily) - Last modified (monthly) + Último modificado (diario) + Último modificado (mensual) Data de captura - Date taken (daily) - Date taken (monthly) - Tipo de ficheior + Data de captura (diaria) + Data de captura (mensual) + Tipo de ficheiro Extensión - Please note that grouping and sorting are 2 independent fields + Por favor, teña en conta que agrupar e ordenar son dous campos diferentes - Folder shown on the widget: - Show folder name + Cartafol a mostrar no widget: + Amosar nome de cartafol Reproducir vídeos automticamente - Remember last video playback position + Lembrar a posición do vídeo na última vez Mudar a visibilidade do ficheiro videos en bucle Animar os GIFs na icona Brillo ao máximo cando mire medios Recortar iconas a cadrados - Show video durations + Amosar a duración dos vídeos Rotar medios a pantalla completa a Axuste do sistema Rotación do dispositivo @@ -172,113 +172,113 @@ Xestionar información polo miúdo Permitir zoom con un dedo a pantalla completa Permitir o cambio instantáneo de medios pulsando nos lados da pantalla - Allow deep zooming images + Permitir ampliar moito as imaxes Agochar detalles extendidos cando a barra de estado está oculta - Show some action buttons at the bottom of the screen - Show the Recycle Bin at the folders screen - Deep zoomable images - Show images in the highest possible quality - Show the Recycle Bin as the last item on the main screen - Allow closing the fullscreen view with a down gesture - Allow 1:1 zooming in with two double taps - Always open videos on a separate screen with new horizontal gestures - Show a notch if available - Allow rotating images with gestures - File loading priority - Speed - Compromise - Avoid showing invalid files - Show image file types + Mostrar botóns para accións na parte baixa da pantalla + Mostrar a Papeleira de Reciclaxe na pantalla de cartafoles + Imaxes con moita ampliación + Mostrar imaxes na súa máxima calidade + Mostrar a Papeleira de Reciclaxe como no derradeiro posto da pantalla principal + Permitir pechar a visualización en pantalla completa deslizando cara abaixo + Permitir ampliar a 1:1 con dous toques + Abrir sempre os vídeos nunha pantalla diferente con novos xestos horizontais + Mostrar unha marca se a houbera + Permitir rotar unha imaxe con xestos + Prioridade de carga de ficheiro + Velocidade + Compromiso + Non mostrar ficheiros inválidos + Mostrar tipos de ficheiros de imaxe Iconas Medios a pantalla completa Detalles ampliados - Bottom actions + Actions do fondo - Manage visible bottom actions - Toggle favorite - Toggle file visibility + Xestionar accións visibles do fondo + Alternar favorito + Alternar visibilidade do ficheiro - Custom - Reset - Square - Transform - Filter - None - Adjust - Shadows - Exposure - Highlights - Brightness - Contrast - Saturation - Clarity + Personalizado + Reiniciar + Cadrado + Transformar + Filtrar + Nengún + Axustar + Sombras + Exposición + Resalte + Brillo + Contraste + Saturación + Claridade Gamma - Blacks - Whites - Temperature - Sharpness - Reset - Focus - None + Negros + Brancos + Temperatura + Nitidez + Reiniciar + Foco + Nengún Radial - Linear - Mirrored - Gaussian - Text - Text Options - Text Color - Font - Add - Edit - Straighten - Font - Color - BG Color - Alignment - To Front - Delete - Your text - Brush - Color - Size - Hardness - To Front - Delete - Brush Color + Lineal + Reflectir + Gaussiano + Texto + Opcións de Texto + Cor de Texto + Fonte + Engadir + Editar + Endereitar + Fonte + Cor + Color Fondo + Aliñamento + Á Front + Borrar + Seu texto + Pincel + Cor + Tamaño + Dureza + Á Front + Borrar + Cor do Pincel Editor - Close Editor? - Do you really want to discard the image? - Yes - No - Cancel - Accept - Save - Exporting image… - Exporting image %s. - Flip H - Flip V - Undo - Redo - Color Picker - Transparent - White - Gray - Black - Light blue - Blue - Purple - Orchid - Pink - Red - Orange - Gold - Yellow - Olive - Green + Pechar o Editor? + Ten a certeza de desbotar a imaxe? + Si + Non + Cancelar + Aceptar + Gardar + Exportando imaxe… + Exportando imaxe %s. + Volteo H + Volteo V + Desfacer + Refacer + Escolla de Cor + Transparente + Branco + Gris + Negro + Azul claro + Azul + Púrpura + Rosa brillante + Rosa + Vermello + Laranxa + Dourado + Amarelo + Verde oliva + Verde Aquamarin Pipettable color @@ -291,7 +291,7 @@ Cómo podo facer que un álbume apareza sempre arriba de todo? Pode manter premido o álbume e escoller a icona de Fixar no menú de accións, esto fixarao arriba. Pode fixar varios cartafoles tambén, os elementos fixados estarán ordenados polo criterio por omisión. Cómo podo aumentar a velocidade de reprodución de vídeo? - You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too. + Pode facelo tocando dúas veces o lateral da pantalla, ou tocando os textos de duración máxima ou actual preto da barra de avance. Se activa abrir os vídeos nunha pantalla separada, tamén pode usar xestos horizontais. Cal é a diferenza entre agochar e excluír un cartafol? A Exclusión prevén que se mostre o cartafol só en Simple Gallery, mentras Agochar funciona para todo o sistema e agocha o cartafol para outras galerías tamén. Esto funciona creando un ficheiro baldeiro de nome \".nomedia\" no cartafol, que tamén pode quitar con calquer xestor de ficheiros. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. Por qué aparecen cartafoles de música con portadas ou pegatinas? @@ -301,18 +301,18 @@ E qué pasa si só quero que sexan visibles certos cartafoles Engadir un cartafol a Cartafoles incluídos non exclúe nada de xeito automático. O que pode facer é ir a Axustes -> Xestionar cartafoles incluídos, excluír o cartafol root \"/\", e despóis engadir os cartafoles desexados con Axustes -> Xestionar Cartafoles Incluídos. Esto fará visibles só aos cartafoles escollidos, como tanto excluír e incluír son recursivos e si está excluído e logo incluído, será mostrado. - Can I crop images with this app? - Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view. - Can I somehow group media file thumbnails? - Sure, just use the \"Group by\" menu item while at the thumbnails view. You can group files by multiple criteria, including Date Taken. If you use the \"Show all folders content\" function you can group them by folders too. - Sorting by Date Taken doesn\'t seem to work properly, how can I fix it? - It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\". - I see some color banding on the images. How can I improve the quality? - The current solution for displaying images works fine in the vast majority of cases, but if you want even better image quality, you can enable the \"Show images in the highest possible quality\" at the app settings, in the \"Deep zoomable images\" section. - I have hidden a file/folder. How can I unhide it? - You can either press the \"Temporarily show hidden items\" menu item at the main screen, or toggle \"Show hidden items\" in the app settings to see the hidden item. If you want to unhide it, just long press it and select \"Unhide\". Folders are hidden by adding a hidden \".nomedia\" file into them, you can delete the file with any file manager too. - Why does the app take up so much space? - App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days. + Podo recortar imaxes con esta aplicación? + Si, pode recortar imaxes no editor, arrastrando as esquinas das imaxes. Pode chegar ao editor tanto presionando na imaxe durante un anaco e seleccionando Editar, ou seleccionando Editar dende a vista de pantalla completa. + Podo agrupar as iconas de algún xeito? + Claro, use no menu \"Agrupar por\" na vista de iconas. Pode facelo por múltiples criterios, incluindo a data de captura. Se usa a función \"Mostrar o contido dos cartafoles\", tamén pode agruparlos por cartafoles. + Semella que Ordenar por Data non está a funcionar, como o amaño? + Seguramente foi causa de copiar os ficheiros de algures. Pode amañalo seleccionando as iconas e \"Arranxar o valor da Data de Captura\". + Vexo bandas de cor nas imaxes. Como podo mellorar a súa calidade? + A solución actual de mostra das imaxes funciona ben na maioría dos casos, pero se desexa unha calidade maior, active \"Mostrar imaxes na máxima calidade posible\" na configuración, na sección \"Imaxes con moita ampliación\". + Teño un ficheiro ou cartafol oculto. Como o amoso? + Pode ou ben activar \"Mostrar temporalmente ficheiros agochados\" no menu principal, ou activar \"Amosar obxectos ocultos\" na configuración. Se quere amosalo sempre, pode presionar uns intres e seleccionar \"Amosar\". Os cartafoles agóchanse engadindo un ficheiro oculto \".nomedia\" no seu interior; tamén pode borrar ese ficheiro con calquera xestor de ficheiros. + Por que consume tanto espacio esta aplicación? + Os ficheiros temporais poden chegar aos 250MB e server para cargar máis rápido. Se a aplicación está a consumir máis espazo, o máis probable é que teña ficheiros nam Papeleira de Reciclaxe. Estes ficheiros contan no tamaño da aplicación. Pode baleirala abríndoa e borrando os ficheiros, ou dende a configuración. Cada ficheiro da Papeleira bórrase automáticamente tras 30 días. From d44dfa8b6673f6353013fd1dacd0bbc0e5388c69 Mon Sep 17 00:00:00 2001 From: Charles-770 Date: Fri, 8 May 2020 19:38:23 +0200 Subject: [PATCH 69/75] Update strings.xml --- app/src/main/res/values-fr/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index fd39efd95..5b744b246 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -80,9 +80,9 @@ Pivoter Emplacement invalide L\'édition de l\'image a échoué - L\'édition de l\'image a été annulé + L\'édition de l\'image a été annulée L\'image a été éditée avec succès - Modifier l\'image avec: + Modifier l\'image avec : Aucun éditeur d\'image trouvé Emplacement du fichier inconnu Impossible de remplacer le fichier source @@ -99,7 +99,7 @@ Fond d\'écran simple Définir comme fond d\'écran Échec de la définition en tant que fond d\'écran - Définir comme fond d\'écran avec: + Définir comme fond d\'écran avec : Définition du fond d\'écran en cours… Fond d\'écran défini Rapport d\'affichage portrait @@ -110,7 +110,7 @@ Diaporama - Intervalle (secondes): + Intervalle (secondes) : Inclure les images Inclure les vidéos Inclure les GIFs @@ -145,7 +145,7 @@ \'Grouper par\' et \'Trier par\' sont 2 modes indépendants - Dossier affiché sur le widget: + Dossier affiché sur le widget : Afficher le nom du dossier @@ -222,7 +222,7 @@ Température Netteté Réinitialiser - Focus + Floutage Aucun Radial Linéaire @@ -288,11 +288,11 @@ J\'ai verrouillé l\'application avec un mot de passe et je ne m\'en rappelle plus. Que faire ? Il y a deux façons de procéder. Soit vous réinstallez l\'application, soit vous recherchez l\'application dans les paramètres de l\'appareil et appuyez sur \"Effacer les données\". Cela va seulement réinitialiser les paramètres de l\'application et ne supprimera pas vos fichiers. Comment faire pour qu\'un album soit toujours affiché tout en haut ? - Vous devez simplement à effectuer un appui prolongé sur l\'album en question et choisir l\'icône \"Épingler\" dans le menu d\'actions. Vous pouvez en épingler plusieurs. Les éléments épinglés seront alors triés selon l\'ordre par défaut. + Vous devez simplement effectuer un appui prolongé sur l\'album en question et choisir l\'icône \"Épingler\" dans le menu d\'actions. Vous pouvez en épingler plusieurs. Les éléments épinglés seront alors triés selon l\'ordre par défaut. Comment avancer rapidement dans les vidéos ? - You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too. + Appuyez deux fois sur le côté de l\'écran, ou appuyez sur la valeur de durée actuelle ou maximale près de la barre de recherche. Si vous activez l\'ouverture des vidéos sur un écran séparé dans les paramètres de l\'application, vous pouvez également utiliser des gestes horizontaux. Quelle est la différence entre cacher et exclure un dossier ? - \"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Cacher un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier caché, et peut être supprimé avec n\'importe quel explorateur de fichiers. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. + \"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Cacher un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris pour les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier caché, et peut être supprimé avec n\'importe quel explorateur de fichiers. Notez que certains appareils ne permettent pas de masquer certains dossiers tels qu\'Appareil photo, Captures d'écran et Téléchargements. Pourquoi des dossiers avec des pochettes d\'albums musicaux ou des miniatures d\'images sont affichés ? Il est possible que des albums qui ne devraient pas être affichés le soient. Vous pouvez les exclure facilement en les sélectionnant par un appui prolongé, puis en choisissant l\'option \"Exclure\", après quoi vous pouvez aussi sélectionner le dossier parent, ce qui devrait éviter l\'apparition d\'albums similaires. Un dossier avec des images n\'apparaît pas. Que faire ? From c7e6e7e84daac6cccb3670f3408394a140b4ce55 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 17 May 2020 10:08:48 +0200 Subject: [PATCH 70/75] do not remove items from everShownFolders map --- app/build.gradle | 2 +- .../simplemobiletools/gallery/pro/activities/MainActivity.kt | 3 ++- app/src/main/res/values-fr/strings.xml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e69231253..2bddd7b2f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.27.7' + implementation 'com.simplemobiletools:commons:5.28.3' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 99d8b4f5d..6da154531 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -1063,7 +1063,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } val excludedFolders = config.excludedFolders - val everShownFolders = HashSet() + val everShownFolders = config.everShownFolders.toMutableSet() as HashSet // do not add excluded folders and their subfolders at everShownFolders dirs.filter { dir -> @@ -1079,6 +1079,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } catch (e: Exception) { config.everShownFolders = HashSet() } + mDirs = dirs.clone() as ArrayList } diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5b744b246..e80fa9b4e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -292,7 +292,7 @@ Comment avancer rapidement dans les vidéos ? Appuyez deux fois sur le côté de l\'écran, ou appuyez sur la valeur de durée actuelle ou maximale près de la barre de recherche. Si vous activez l\'ouverture des vidéos sur un écran séparé dans les paramètres de l\'application, vous pouvez également utiliser des gestes horizontaux. Quelle est la différence entre cacher et exclure un dossier ? - \"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Cacher un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris pour les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier caché, et peut être supprimé avec n\'importe quel explorateur de fichiers. Notez que certains appareils ne permettent pas de masquer certains dossiers tels qu\'Appareil photo, Captures d'écran et Téléchargements. + \"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Cacher un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris pour les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier caché, et peut être supprimé avec n\'importe quel explorateur de fichiers. Notez que certains appareils ne permettent pas de masquer certains dossiers tels qu\'Appareil photo, Captures d\'écran et Téléchargements. Pourquoi des dossiers avec des pochettes d\'albums musicaux ou des miniatures d\'images sont affichés ? Il est possible que des albums qui ne devraient pas être affichés le soient. Vous pouvez les exclure facilement en les sélectionnant par un appui prolongé, puis en choisissant l\'option \"Exclure\", après quoi vous pouvez aussi sélectionner le dossier parent, ce qui devrait éviter l\'apparition d\'albums similaires. Un dossier avec des images n\'apparaît pas. Que faire ? From 6cdf9ac905f488d1e4d1f0375fc0878b14f0d452 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 17 May 2020 10:18:37 +0200 Subject: [PATCH 71/75] adding some WhatsApp folders at the everShownFolders, check them too --- .../simplemobiletools/gallery/pro/helpers/Config.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt index ca35ccda2..9d70eb98c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt @@ -400,11 +400,13 @@ class Config(context: Context) : BaseConfig(context) { set(everShownFolders) = prefs.edit().putStringSet(EVER_SHOWN_FOLDERS, everShownFolders).apply() private fun getEverShownFolders() = hashSetOf( - internalStoragePath, - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).absolutePath, - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath, - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath, - "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath}/Screenshots" + internalStoragePath, + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).absolutePath, + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath, + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath, + "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath}/Screenshots", + "internalStoragePath/WhatsApp/Media/WhatsApp Images", + "internalStoragePath/WhatsApp/Media/WhatsApp Video" ) var showRecycleBinAtFolders: Boolean From 668df3b8fb5aa0f56f101fef08a34ab1cd94b7f9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 17 May 2020 11:23:52 +0200 Subject: [PATCH 72/75] show a prompt mentioning our new apps --- app/build.gradle | 2 +- .../gallery/pro/activities/MainActivity.kt | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2bddd7b2f..619f3eb7d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.28.3' + implementation 'com.simplemobiletools:commons:5.28.4' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 6da154531..5b8ecbb71 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -23,6 +23,7 @@ import androidx.recyclerview.widget.RecyclerView import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog import com.simplemobiletools.commons.dialogs.FilePickerDialog +import com.simplemobiletools.commons.dialogs.NewAppsIconsDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.FileDirItem @@ -51,7 +52,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { private val PICK_MEDIA = 2 private val PICK_WALLPAPER = 3 private val LAST_MEDIA_CHECK_PERIOD = 3000L - private val NEW_APP_PACKAGE = "com.simplemobiletools.clock" private var mIsPickImageIntent = false private var mIsPickVideoIntent = false @@ -118,12 +118,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { mIsPasswordProtectionPending = config.isAppPasswordProtectionOn setupLatestMediaId() - // notify some users about the Clock app - /*if (System.currentTimeMillis() < 1523750400000 && !config.wasNewAppShown && config.appRunCount > 100 && config.appRunCount % 50 != 0 && !isPackageInstalled(NEW_APP_PACKAGE)) { - config.wasNewAppShown = true - NewAppDialog(this, NEW_APP_PACKAGE, "Simple Clock") - }*/ - if (!config.wereFavoritesPinned) { config.addPinnedFolders(hashSetOf(FAVORITES)) config.wereFavoritesPinned = true @@ -161,6 +155,12 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { finish() } } + + // notify some users about the Dialer, SMS Messenger and Voice Recorder apps + if (!config.wasMessengerRecorderShown && config.appRunCount > 35) { + NewAppsIconsDialog(this) + config.wasMessengerRecorderShown = true + } } override fun onStart() { From 3c8ec82bc73875308e58fafd74a9896e0076efd7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 17 May 2020 11:37:55 +0200 Subject: [PATCH 73/75] catching some exceptions thrown at inserting media in db --- .../gallery/pro/activities/MainActivity.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index 5b8ecbb71..161e89604 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -958,11 +958,14 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { setupAdapter(dirs) - // update directories and media files in the local db, delete invalid items + // update directories and media files in the local db, delete invalid items. Intentionally creating a new thread updateDBDirectory(directory) if (!directory.isRecycleBin()) { Thread { - mediaDB.insertAll(curMedia) + try { + mediaDB.insertAll(curMedia) + } catch (ignored: Exception) { + } }.start() } From f811064fc8807e60617dea2a651f000ff271402d Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 17 May 2020 11:52:54 +0200 Subject: [PATCH 74/75] removing the support library SDK related line from PhotoEditor --- app/build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 619f3eb7d..f76bd1d69 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -111,8 +111,6 @@ if (is_proprietary) { licencePath 'pesdk_license' } - supportLibVersion "28.0.0" - modules { include 'ui:core' include 'ui:text' From 2e2ad4de70b7728e4a27ec4a868f9a30fc9465f9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 17 May 2020 17:16:30 +0200 Subject: [PATCH 75/75] adding a new string for allowing video zooming with double tap --- app/src/main/res/values-ar/strings.xml | 1 + app/src/main/res/values-az/strings.xml | 1 + app/src/main/res/values-ca/strings.xml | 1 + app/src/main/res/values-cs/strings.xml | 1 + app/src/main/res/values-da/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-el/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fi/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-gl/strings.xml | 1 + app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 1 + app/src/main/res/values-id/strings.xml | 1 + app/src/main/res/values-in/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-ko-rKR/strings.xml | 1 + app/src/main/res/values-lt/strings.xml | 1 + app/src/main/res/values-nb/strings.xml | 1 + app/src/main/res/values-ne/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-sk/strings.xml | 1 + app/src/main/res/values-sl/strings.xml | 1 + app/src/main/res/values-sr/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-vi/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rHK/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 37 files changed, 37 insertions(+) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index f03d3e85e..f26a144e6 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -189,6 +189,7 @@ إختيار وسط تجنب إظهار الملفات غير الصالحة إظهار أنواع ملفات الصور + Allow zooming videos with double tapping them الصور المصغرة diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 0ff9c2c27..0345c3ee3 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -189,6 +189,7 @@ Compromise Avoid showing invalid files Show image file types + Allow zooming videos with double tapping them Thumbnails diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 72841ee51..e76b84883 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -189,6 +189,7 @@ Compromès Eviteu mostrar fitxers no vàlids Mostra els tipus de fitxers d\’imatges + Allow zooming videos with double tapping them Miniatures diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index d54ebc69d..abfab3d00 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -189,6 +189,7 @@ Kompromis Nezobrazovat neplatné soubory Zobrazit typ obrázkových souborů + Allow zooming videos with double tapping them Náhledy diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 06669b295..e36395aaa 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -189,6 +189,7 @@ Kompromis Undgå at vise ugyldige filer Vis billeders filtyper + Allow zooming videos with double tapping them Miniaturer diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c9306ce0c..83e28096f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -189,6 +189,7 @@ Kompromiss Das Anzeigen von ungültigen Dateien vermeiden Bilddateitypen anzeigen + Allow zooming videos with double tapping them Thumbnails diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 26a99d926..c0e6b3725 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -189,6 +189,7 @@ Συμβιβασμός Αποφυγή εμφάνισης μη έγκυρων αρχείων Εμφάνιση τύπου αρχείου εικόνας + Allow zooming videos with double tapping them Εικονίδια diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0af41911a..edcbc545c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -189,6 +189,7 @@ Compromiso Evita mostrar archivos inválidos Mostrar tipos de archivo de imagen + Allow zooming videos with double tapping them Miniaturas diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 4d41db449..a534d0937 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -189,6 +189,7 @@ Compromise Avoid showing invalid files Show image file types + Allow zooming videos with double tapping them Esikatselukuvat diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e80fa9b4e..abfc0a3cd 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -189,6 +189,7 @@ Compromis Éviter l\'affichage de fichiers invalides Afficher les types d\'image + Allow zooming videos with double tapping them Miniatures diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index a8e0da8bf..2e29b592e 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -189,6 +189,7 @@ Compromiso Non mostrar ficheiros inválidos Mostrar tipos de ficheiros de imaxe + Allow zooming videos with double tapping them Iconas diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 268b17aba..791ccca05 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -189,6 +189,7 @@ Compromise Avoid showing invalid files Show image file types + Allow zooming videos with double tapping them Sličice diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2639845c8..6f58b1bbf 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -189,6 +189,7 @@ Kiegyensúlyozott Kerülje az érvénytelen fájlok mutatását Mutassa a kép fájl típusokat + Allow zooming videos with double tapping them Miniatűrök diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index bd6058a06..632bb08dc 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -189,6 +189,7 @@ Kompromi Hindari menampilkan berkas yang tidak valid Tampilkan tipe berkas gambar + Allow zooming videos with double tapping them Thumbnail diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 551518bb2..78a0371b9 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -189,6 +189,7 @@ Kompromi Hindari menampilkan berkas yang tidak valid Tampilkan tipe berkas gambar + Allow zooming videos with double tapping them Thumbnail diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a256242d3..4ff38eea8 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -189,6 +189,7 @@ Compromesso Evita di mostrare file non validi Mostra i tipi di file immagine + Allow zooming videos with double tapping them Anteprime diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 0c3136efb..3e23a8359 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -189,6 +189,7 @@ Compromise Avoid showing invalid files Show image file types + Allow zooming videos with double tapping them サムネイル設定 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index d89965a64..e5d6b2bcc 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -189,6 +189,7 @@ 균형 잘못된 파일 보이지 않기 사진 파일 종류 표시 + Allow zooming videos with double tapping them 섬네일 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index aea953c84..3af9c6ee8 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -189,6 +189,7 @@ Compromise Avoid showing invalid files Show image file types + Allow zooming videos with double tapping them Miniatiūros diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 2bde23e73..fc2b8a968 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -189,6 +189,7 @@ Kompromiss Unngå visning av ugyldige filer Vis bildefiltyper + Allow zooming videos with double tapping them Minibilder diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 9316bd49f..bbe309c2c 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -189,6 +189,7 @@ Compromise Avoid showing invalid files तस्बिरको फाईल किसिम देखाउनुहोस + Allow zooming videos with double tapping them Thumbnails diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d30738888..212416f44 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -189,6 +189,7 @@ Compromis Ongeldige bestanden verbergen Bestandstypen tonen + Allow zooming videos with double tapping them Miniatuurvoorbeelden diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 1fdc0f456..53cf557e2 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -189,6 +189,7 @@ Kompromis Unikaj pokazywania niewłaściwych plików Pokazuj rozszerzenia zdjęć + Allow zooming videos with double tapping them Miniatury diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index eedcd71f4..06c052feb 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -189,6 +189,7 @@ Meio termo Evitar a exibição de arquivos inválidos Exibir tipos de arquivo de imagem + Allow zooming videos with double tapping them Miniaturas diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index da94ecd5b..33f0306fd 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -189,6 +189,7 @@ Qualidade Não mostrar ficheiros inválidos Mostrar o tipo de imagem + Allow zooming videos with double tapping them Miniaturas diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 467d57d4d..a096930d9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -189,6 +189,7 @@ Компромисс Пропускать файлы с ошибками Показывать типы файлов изображений + Allow zooming videos with double tapping them Миниатюры diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index e8a835b0f..f27104046 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -189,6 +189,7 @@ Kompromis Nezobrazovať neplatné súbory Zobraziť typ obrázkových súborov + Povoliť približovanie videí dvojitým ťuknutím Náhľady diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index a4a8f4c11..e8ce195da 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -189,6 +189,7 @@ Kompromis Izogni se prikazovanju napačnih datotek Show image file types + Allow zooming videos with double tapping them Sličice diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index f1313700f..83d4cbffd 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -189,6 +189,7 @@ Компромис Не приказуј оштећене датотеке Show image file types + Allow zooming videos with double tapping them Сличице diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 456a94d2d..885d15451 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -189,6 +189,7 @@ Compromise Avoid showing invalid files Show image file types + Allow zooming videos with double tapping them Miniatyrer diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 0e526ef5d..4ec982e38 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -189,6 +189,7 @@ Ödünsüz Geçersiz dosyaları göstermekten kaçın Resim dosyası türlerini göster + Allow zooming videos with double tapping them Küçük resimler diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 759dbc849..4bddcc824 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -189,6 +189,7 @@ Компроміс Запобігати показу пошкоджених файлів Показувати типи файлів зображень + Allow zooming videos with double tapping them Ескізи diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index b03d4bc6f..a5355a365 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -189,6 +189,7 @@ Thỏa hiệp Tránh hiển thị các tệp không hợp lệ Hiển thị các loại tệp hình ảnh + Allow zooming videos with double tapping them Hình thu nhỏ diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2eabef991..2a995dc06 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -189,6 +189,7 @@ 折中 避免显示无效的文件 显示图片文件类型 + Allow zooming videos with double tapping them 缩略图 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index b759be2e0..0e322d4d2 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -189,6 +189,7 @@ 折衷 避免顯示無效的檔案 Show image file types + Allow zooming videos with double tapping them 縮圖 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 8b212341e..c3d2593a0 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -189,6 +189,7 @@ 妥協 避免顯示無效的檔案 顯示圖片檔案類型 + Allow zooming videos with double tapping them 縮圖 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ddf7f34e1..6b9af0098 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -189,6 +189,7 @@ Compromise Avoid showing invalid files Show image file types + Allow zooming videos with double tapping them Thumbnails