From 98c7bd44fd84e4640c16b74d84cd4b1c08b272bd Mon Sep 17 00:00:00 2001 From: Lukasz Kryger Date: Mon, 24 Feb 2020 12:56:40 +0100 Subject: [PATCH 01/46] Remaining strings translated to Polish I stumbled upon an untranslated settings entry and looked it up here on github, decided to go through the entire file. Please let me know if any of the translations cannot be accepted because of technical reasons (too long to fit the UI etc.) Source: I'm a native speaker. --- app/src/main/res/values-pl/strings.xml | 190 ++++++++++++------------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 4e45c42ab..0abecad8b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -31,10 +31,10 @@ Napraw datę utworzenia Naprawiam… Daty zostały naprawione - No Date Taken values have been found + Nie znaleziono wartości dat utworzenia Udostępnij zmienioną wersję - 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 + Hej,\n\nwygląda na to że zaktualizowałeś ze starszej, darmowej wersji aplikacji. Możesz ją teraz odinstalować przyciskiej \'Upgrade to Pro\' w ustawieniach.\n\nZostaną jedynie usunięte elementy z Kosza, odznaczone Ulubione i konieczne będzie zresetowanie ustawień aplikacji.\n\nDziękujemy! + Przełącz na przeszukiwanie plików we wszystkich widocznych folderach Filtruj multimedia @@ -43,7 +43,7 @@ GIFy Obrazy RAW Obrazy SVG - Portraits + Portrety Nie znaleziono multimediów zgodnych z zastosowanymi filtrami. Zmień filtry @@ -66,7 +66,7 @@ Zarządzaj dołączonymi folderami Dodaj folder Jeśli masz jakieś foldery z multimediami, ale aplikacja ich nie wykryła, możesz je dodać ręcznie tutaj. - No media files have been found. You can solve it by adding the folders containing media files manually. + Nie znaleziono plików z multimediami. Możesz to naprawić poprzez dodanie folderów ręcznie. Zmień rozmiar @@ -83,8 +83,8 @@ Ścieżka Nieprawidłowa ścieżka Edycja obrazu nie powiodła się - Image editing cancelled - File edited successfully + Anulowano edycję obrazu + Plik wyedytowany Edytuj obraz w: Nie znalazłem edytora zdjęć Nieznana lokalizacja pliku @@ -120,10 +120,10 @@ Losowa kolejność Odwrotna kolejność Zapętlaj - Animation - None - Fade - Slide + Animacja + Brak + Przenikanie + Przesuwanie Pokaz slajdów zakończony Nie znalazłem multimediów do pokazu slajdów @@ -138,11 +138,11 @@ Nie grupuj plików Folderu Daty ostatniej modyfikacji - Last modified (daily) - Last modified (monthly) + Daty ostatniej modyfikacji (dniami) + Daty ostatniej modyfikacji (miesiącami) Daty utworzenia - Date taken (daily) - Date taken (monthly) + Data utworzenia (dniami) + Data utworzenia (miesiącami) Typu Rozszerzenia Uwaga: grupowanie i sortowanie to dwa niezależne pola @@ -205,85 +205,85 @@ Widoczność plików - Custom - Reset - Square - Transform - Filter - None - Adjust - Shadows - Exposure - Highlights - Brightness - Contrast - Saturation - Clarity + Własne + Resetuj + Kwadrat + Transformacja + Filtr + Brak + Dopasuj + Cienie + Ekspozycja + Światła + Jasność + Kontrast + Nasycenie + Klarowniść Gamma - Blacks - Whites - Temperature - Sharpness - Reset + Czerń + Biel + Temperatura + Ostrość + Resetuj 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 + Brak + Radialny + Linearny + Lustrzany + Gaussa + Tekst + Opcje tekstu + Kolor tekstu + Czcionka + Dodaj + Edytuj + Wyprostuj + Czcionka + Kolor + Kolor tła + Wyrównanie + Do przodu + Usuń + Twój tekst + Pędzel + Kolor + Rozmiar + Twardość + Do przodu + Usuń + Kolor pędzla + Edytor + Zamknąć edytor? + Odrzucić zmiany w obrazie? + Tak + Nie + Anuluj + Zaakceptuj + Zapisz + Eksport obrazu… + Wyeksportowano obraz %s. + Odbij w poziomie + Odbij w pionie + Cofnij + Ponów + Wybieracz kolorów + Przezroczysty + Biały + Szary + Czarny + Jasnoniebieski + Niebieski + Fioletowy + Orchidea + Różowy + Czerwony + Pomarańczowy + Złoty + Żółty + Oliwkowy + Zielony + Akwamaryna + Kolor pipety Jak mogę ustawić tą aplikację jako domyślną aplikację galerii? @@ -293,7 +293,7 @@ Jak sprawić, aby album(y) zawsze pojawiał(y) się na górze? Przytrzymaj album(y) i wybierz ikonę przypięcia w pasku akcji. Jak mogę przwijać filmy? - 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. + Możesz to osiągnąć dotykając dwa razu z boku ekranu, lub dotykając aktualnej lub makysmalnej długości tekstu przy pasku wyszukiwania. Jeśli włączysz w ustawieniach otwieranie video na nowym ekranie, możesz też używać gestów poziomych. Jaka jest różnica między ukryciem, a wykluczeniem folderu? Wykluczenie działa tylko w obrębie niniejszej aplikacji (wszędzie indziej pliki są normalnie widoczne), ukrywanie - w obrębie całego systemu (nie widać ich nigdzie), dodawany jest wtedy do folderu pusty plik \'.nomedia\', który możesz usunąć w dowolnym menedżerze plików. Dlaczego pokazują mi się foldery z okładkami do piosenek i tym podobne rzeczy? @@ -312,8 +312,8 @@ Obecne rozwiązanie służące wyświetlaniu obrazów działa jak powinno w większości w przypadków. Jeśli jednak tak nie jest, pomocna może okazać się opcja \'Pokazuj obrazy w najwyższej możliwej jakości\' w sekcji \'Duże powiększanie obrazów\'. Mam ukryte pliki i / lub foldery. Jak mogę zobaczyć? Możesz to zrobić albo wybierając opcję \'Tymczasowo pokaż ukryte multimedia\' w menu na ekranie głównym, lub \'Pokazuj ukryte elementy\' w ustawieniach. Foldery są ukrywane poprzez dodanie do nich pustego, ukrytego pliku \'.nomedia\'. Usunąć go możesz dowolnym menedżerem plików. - 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. + Dlaczego aplikacja zajmuje tak dużo miejsca? + Pamięć podręczna aplikacji zajmuje do 250MB, zapewniając szybsze ładowanie obrazów. Aplikacja może zajmować więcej miejsca przez elementy w Koszu, które doliczane są do rozmiaru aplikacji. Wyczyść Kosz przez otwarcie go i usunięcie wszystkich elementów, lub z poziomu ustawień aplikacji. Każdy plik w Koszu jest też automatycznie usuwany po 30 dniach. From d917e42b72a75d029da31c6b51a352bd1241efdf Mon Sep 17 00:00:00 2001 From: Leo Pham Date: Fri, 28 Feb 2020 21:47:57 +1100 Subject: [PATCH 02/46] Add proprietary and foss product flavors The introduction of the proprietary PhotoEditor SDK prevented this app from being truly free and open source, and so F-Droid could no longer build the app. By adding a licensing flavor dimension, we segregate the non-FOSS code to a separate version, while providing a FOSS version without the editor. To build the proprietary version, select one of the proprietary build variants from Build Variants pane in Android Studio (on the left side of the window). Fixes #1706. --- app/build.gradle | 48 ++++++++++++------- app/src/main/AndroidManifest.xml | 12 ++--- app/src/proprietary/AndroidManifest.xml | 39 +++++++++++++++ .../assets/pesdk_license | 0 .../gallery/pro/activities/NewEditActivity.kt | 0 build.gradle | 9 +++- 6 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 app/src/proprietary/AndroidManifest.xml rename app/src/{main => proprietary}/assets/pesdk_license (100%) rename app/src/{main => proprietary}/kotlin/com/simplemobiletools/gallery/pro/activities/NewEditActivity.kt (100%) diff --git a/app/build.gradle b/app/build.gradle index 7e2290627..8a16fe8a3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,6 +53,16 @@ android { main.java.srcDirs += 'src/main/kotlin' } + flavorDimensions "licensing" + productFlavors { + proprietary { } + foss { + // We're not using PhotoEditor here, so changing the name is fine. + applicationIdSuffix ".foss" + versionNameSuffix "-foss" + } + } + lintOptions { checkReleaseBuilds false abortOnError false @@ -92,28 +102,30 @@ dependencies { } // Apply the PESDKPlugin -apply plugin: 'ly.img.android.sdk' +if (is_proprietary) { + apply plugin: 'ly.img.android.sdk' -imglyConfig { - pesdk { - enabled true - licencePath 'pesdk_license' - } + imglyConfig { + pesdk { + enabled true + licencePath 'pesdk_license' + } - supportLibVersion "28.0.0" + supportLibVersion "28.0.0" - modules { - include 'ui:core' - include 'ui:text' - include 'ui:focus' - include 'ui:brush' - include 'ui:filter' - include 'ui:transform' - include 'ui:adjustment' + modules { + include 'ui:core' + include 'ui:text' + include 'ui:focus' + include 'ui:brush' + include 'ui:filter' + include 'ui:transform' + include 'ui:adjustment' - include 'backend:serializer' + include 'backend:serializer' - include 'assets:font-basic' - include 'assets:filter-basic' + include 'assets:font-basic' + include 'assets:filter-basic' + } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 11b2f5c91..307682ab0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -201,20 +201,18 @@ - + + + - - - diff --git a/app/src/proprietary/AndroidManifest.xml b/app/src/proprietary/AndroidManifest.xml new file mode 100644 index 000000000..3e08b8072 --- /dev/null +++ b/app/src/proprietary/AndroidManifest.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/assets/pesdk_license b/app/src/proprietary/assets/pesdk_license similarity index 100% rename from app/src/main/assets/pesdk_license rename to app/src/proprietary/assets/pesdk_license diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/NewEditActivity.kt b/app/src/proprietary/kotlin/com/simplemobiletools/gallery/pro/activities/NewEditActivity.kt similarity index 100% rename from app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/NewEditActivity.kt rename to app/src/proprietary/kotlin/com/simplemobiletools/gallery/pro/activities/NewEditActivity.kt diff --git a/build.gradle b/build.gradle index 846e1e568..a51e459b5 100644 --- a/build.gradle +++ b/build.gradle @@ -2,17 +2,22 @@ buildscript { ext.kotlin_version = '1.3.61' + ext.is_proprietary = gradle.startParameter.taskNames.any { task -> task.contains("Proprietary") } repositories { google() jcenter() - maven { url 'https://artifactory.img.ly/artifactory/imgly' } + if (is_proprietary) { + maven { url 'https://artifactory.img.ly/artifactory/imgly' } + } } dependencies { classpath 'com.android.tools.build:gradle:3.5.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'ly.img.android.pesdk:plugin:7.0.10' + if (is_proprietary) { + classpath 'ly.img.android.pesdk:plugin:7.0.10' + } // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 3426f869c75779f42704fef21ee23e1e1775159f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20F=C4=B1r=C4=B1nc=C4=B1?= Date: Fri, 28 Feb 2020 17:06:19 +0300 Subject: [PATCH 03/46] Update strings.xml --- app/src/main/res/values-tr/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9783072b6..0c7e3b224 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -31,7 +31,7 @@ Çekilen tarih değerini düzelt Düzeltiliyor… Tarihler başarıyla düzeltildi - No Date Taken values have been found + Çekilen Tarih bulunamadı Yeniden boyutlandırılmış sürümü paylaş Merhaba,\n\neski ücretsiz uygulamadan yükseltmiş gibisiniz. Artık uygulama ayarlarının en üst kısmında \'Pro\'ya Yükselt\' düğmesi olan eski sürümü kaldırabilirsiniz.\n\nYalnızca Geri Dönüşüm Kutusu öğelerinin silinmesi, sık kullanılanların işaretlerinin kaldırılması ve uygulama ayarlarınızı sıfırlamanız gerekir.\n\nTeşekkürler! Tüm görünür klasörler arasında dosya aramaya geç @@ -294,7 +294,7 @@ Bir albümün her zaman en üstte görünmesini nasıl sağlayabilirim? İstediğiniz albüme uzunca basabilir ve eylem menüsündeki Sabitle simgesini seçebilirsiniz. Birden çok klasörü de sabitleyebilirsiniz, sabitlenmiş öğeler varsayılan sıralama yöntemine göre sıralanır. Videoları nasıl hızlıca ileri sarabilirim? - 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. + 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. Neden albüm resimlerini içeren klasörler görünüyor? From 3575221e0674c3f0991e73cfc9cf95b83d2b3c33 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 19:37:47 +0100 Subject: [PATCH 04/46] updating Photo Editor to 7.1.9 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a51e459b5..84a9b3b9f 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ buildscript { classpath 'com.android.tools.build:gradle:3.5.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" if (is_proprietary) { - classpath 'ly.img.android.pesdk:plugin:7.0.10' + classpath 'ly.img.android.pesdk:plugin:7.1.9' } // NOTE: Do not place your application dependencies here; they belong From b7ab5526c31a11fed010c9999b7c140cc8f2c190 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 19:44:34 +0100 Subject: [PATCH 05/46] updating commons to 5.22.15 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 8a16fe8a3..14eeb001d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -79,7 +79,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.22.10' + implementation 'com.simplemobiletools:commons:5.22.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' From a5aa16c01eaad60f977319a02c341133c5210eee Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 19:57:45 +0100 Subject: [PATCH 06/46] append the generated .apk file with the current version code --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 14eeb001d..02216f837 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,7 +20,7 @@ android { versionCode 294 versionName "6.12.5" multiDexEnabled true - setProperty("archivesBaseName", "gallery") + setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true } From dbaca7aa30551b21d26169b885007ad3e1e0a5b0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 19:58:54 +0100 Subject: [PATCH 07/46] make sure the proprietary classes show up in android studio too --- app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle b/app/build.gradle index 02216f837..a38c0b114 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,6 +51,7 @@ android { sourceSets { main.java.srcDirs += 'src/main/kotlin' + main.java.srcDirs += 'src/proprietary/kotlin' } flavorDimensions "licensing" From 3f95a8f6caea8f728fa1b5d5da5863de5a7280e7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 20:05:06 +0100 Subject: [PATCH 08/46] mention video fast forwarding with double clicks at the Whats New window --- .../com/simplemobiletools/gallery/pro/activities/MainActivity.kt | 1 + app/src/main/res/values/donottranslate.xml | 1 + 2 files changed, 2 insertions(+) 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 997c8413d..6fcefb89a 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 @@ -1315,6 +1315,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { add(Release(225, R.string.release_225)) add(Release(258, R.string.release_258)) add(Release(277, R.string.release_277)) + add(Release(295, R.string.release_295)) checkWhatsNew(this, BuildConfig.VERSION_CODE) } } diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 720719ad5..124e67897 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -6,6 +6,7 @@ com.simplemobiletools.gallery.pro + Allow fast forwarding videos by double clicking on screen sides Fully replaced the photo editor with a powerful third party library (for resizing images use Menu -> Resize from the fullscreen view, until it gets added in the editor) Allow customizing the bottom navigation bar color\n From af682a38e24d465abced6fea7259f9b0cab3fdae Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 20:14:48 +0100 Subject: [PATCH 09/46] update version to 6.13.0 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a38c0b114..42aaed25d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 294 - versionName "6.12.5" + versionCode 295 + versionName "6.13.0" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From dbdf5b5acd3cc5a2bd2dc5c1703f21bc1ebcccc2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 20:14:54 +0100 Subject: [PATCH 10/46] updating changelog --- CHANGELOG.md | 8 ++++++++ fastlane/metadata/android/en-US/changelogs/295.txt | 4 ++++ 2 files changed, 12 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/295.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d8d3bfed..453d7753d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========== +Version 6.13.0 *(2020-02-28)* +---------------------------- + + * Allow fast forwarding videos by double clicking on screen sides + * Fixed an issue with the editor producing low quality outputs in some cases + * Improve some error messages, make them clearer + * Many translation and stability improvements + Version 6.12.5 *(2020-02-12)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/295.txt b/fastlane/metadata/android/en-US/changelogs/295.txt new file mode 100644 index 000000000..ddb8f1e40 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/295.txt @@ -0,0 +1,4 @@ + * Allow fast forwarding videos by double clicking on screen sides + * Fixed an issue with the editor producing low quality outputs in some cases + * Improve some error messages, make them clearer + * Many translation and stability improvements From 4c2c330cbc9ff055d675c6772fdc2fdb5e9c75f5 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 22:53:08 +0100 Subject: [PATCH 11/46] check null exoplayer at skipping --- .../gallery/pro/activities/VideoPlayerActivity.kt | 4 ++++ .../simplemobiletools/gallery/pro/fragments/VideoFragment.kt | 4 ++++ 2 files changed, 8 insertions(+) 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 a432ca076..282b7d165 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 @@ -503,6 +503,10 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen } private fun doSkip(forward: Boolean) { + if (mExoPlayer == null) { + return + } + val curr = mExoPlayer!!.currentPosition val newProgress = if (forward) curr + FAST_FORWARD_VIDEO_MS else curr - FAST_FORWARD_VIDEO_MS val roundProgress = Math.round(newProgress / 1000f) 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 3944ceabb..e2f3c6ecb 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 @@ -546,6 +546,10 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } private fun doSkip(forward: Boolean) { + if (mExoPlayer == null) { + return + } + val curr = mExoPlayer!!.currentPosition val newProgress = if (forward) curr + FAST_FORWARD_VIDEO_MS else curr - FAST_FORWARD_VIDEO_MS val roundProgress = Math.round(newProgress / 1000f) From be8f6762c54425188f56887df352f575b9a78f9d Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 22:55:40 +0100 Subject: [PATCH 12/46] removing a redundant function --- .../gallery/pro/activities/VideoPlayerActivity.kt | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) 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 282b7d165..ef1a6d537 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 @@ -159,8 +159,8 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen fullscreenToggled(isFullscreen) } - video_curr_time.setOnClickListener { skip(false) } - video_duration.setOnClickListener { skip(true) } + video_curr_time.setOnClickListener { doSkip(false) } + video_duration.setOnClickListener { doSkip(true) } video_toggle_play_pause.setOnClickListener { togglePlayPause() } video_surface_frame.setOnClickListener { toggleFullscreen() } video_surface_frame.controller.settings.swallowDoubleTaps = true @@ -496,12 +496,6 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen }) } - private fun skip(forward: Boolean) { - if (mExoPlayer != null) { - doSkip(forward) - } - } - private fun doSkip(forward: Boolean) { if (mExoPlayer == null) { return From 142f44070a85392988b0f645a939a19b8ea8b49a Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 23:03:06 +0100 Subject: [PATCH 13/46] update version to 6.13.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 42aaed25d..33bdb0a34 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 295 - versionName "6.13.0" + versionCode 296 + versionName "6.13.1" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From 70b5c6a97c8790dcc6ae3e624a34399a4af14e3f Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 23:03:12 +0100 Subject: [PATCH 14/46] updating changelog --- CHANGELOG.md | 5 +++++ fastlane/metadata/android/en-US/changelogs/296.txt | 1 + 2 files changed, 6 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/296.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 453d7753d..5dfafac85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========== +Version 6.13.1 *(2020-02-28)* +---------------------------- + + * Adding a quick crashfix + Version 6.13.0 *(2020-02-28)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/296.txt b/fastlane/metadata/android/en-US/changelogs/296.txt new file mode 100644 index 000000000..58df5b3c1 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/296.txt @@ -0,0 +1 @@ + * Adding a quick crashfix From bf487c25396289310534682133d8acbde80c36f8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Feb 2020 23:04:20 +0100 Subject: [PATCH 15/46] adding the previous changelog in fastlanes changelog to list real fixes --- fastlane/metadata/android/en-US/changelogs/296.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fastlane/metadata/android/en-US/changelogs/296.txt b/fastlane/metadata/android/en-US/changelogs/296.txt index 58df5b3c1..ddb8f1e40 100644 --- a/fastlane/metadata/android/en-US/changelogs/296.txt +++ b/fastlane/metadata/android/en-US/changelogs/296.txt @@ -1 +1,4 @@ - * Adding a quick crashfix + * Allow fast forwarding videos by double clicking on screen sides + * Fixed an issue with the editor producing low quality outputs in some cases + * Improve some error messages, make them clearer + * Many translation and stability improvements From 86d26f69fc4f405b28fa16b8e6d5de9edcd24830 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 29 Feb 2020 21:59:26 +0100 Subject: [PATCH 16/46] do not include the proprietary files in the foss flavour --- app/build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 33bdb0a34..1421fb0c3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,7 +51,9 @@ android { sourceSets { main.java.srcDirs += 'src/main/kotlin' - main.java.srcDirs += 'src/proprietary/kotlin' + if (is_proprietary) { + main.java.srcDirs += 'src/proprietary/kotlin' + } } flavorDimensions "licensing" From e5114656e57fd7313be497f5ae7d6b4f1527ba2f Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 29 Feb 2020 23:07:29 +0100 Subject: [PATCH 17/46] do not change the version name at the FOSS app flavor --- app/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 1421fb0c3..3949a5f91 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,6 @@ android { foss { // We're not using PhotoEditor here, so changing the name is fine. applicationIdSuffix ".foss" - versionNameSuffix "-foss" } } From 226374599de4f994d1d5b70931a7f21a6eb9f124 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 29 Feb 2020 23:11:24 +0100 Subject: [PATCH 18/46] lets not change the appID at foss build either --- app/build.gradle | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3949a5f91..9436b0c12 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -59,10 +59,7 @@ android { flavorDimensions "licensing" productFlavors { proprietary { } - foss { - // We're not using PhotoEditor here, so changing the name is fine. - applicationIdSuffix ".foss" - } + foss { } } lintOptions { From ada0661d893406a570e2be18930fe7f4932d24c2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 10:19:31 +0100 Subject: [PATCH 19/46] fix video gestures when Gesture Down To Close is disabled --- .../gallery/pro/fragments/VideoFragment.kt | 21 ++++++++----------- .../pro/fragments/ViewPagerFragment.kt | 2 +- 2 files changed, 10 insertions(+), 13 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 e2f3c6ecb..3d663ec8b 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 @@ -140,21 +140,18 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } }) - if (mConfig.allowDownGesture) { - video_preview.setOnTouchListener { view, event -> + video_preview.setOnTouchListener { view, event -> + handleEvent(event) + false + } + + video_surface_frame.setOnTouchListener { view, event -> + if (video_surface_frame.controller.state.zoom == 1f) { handleEvent(event) - false - } - - video_surface_frame.setOnTouchListener { view, event -> - if (video_surface_frame.controller.state.zoom == 1f) { - handleEvent(event) - } - - gestureDetector.onTouchEvent(event) - false } + gestureDetector.onTouchEvent(event) + false } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt index 7473326dd..ef017dbad 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt @@ -140,7 +140,7 @@ abstract class ViewPagerFragment : Fragment() { val diffY = mTouchDownY - event.y val downGestureDuration = System.currentTimeMillis() - mTouchDownTime - if (!mIgnoreCloseDown && Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold && downGestureDuration < MAX_CLOSE_DOWN_GESTURE_DURATION) { + if (!mIgnoreCloseDown && Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold && downGestureDuration < MAX_CLOSE_DOWN_GESTURE_DURATION && context?.config?.allowDownGesture == true) { activity?.supportFinishAfterTransition() } mIgnoreCloseDown = false From a16bbfbcf9b1f2e17049988789f9889f4a22507a Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 10:42:08 +0100 Subject: [PATCH 20/46] fix #1765, properly handle videos at slideshows --- .../gallery/pro/activities/PhotoVideoActivity.kt | 2 ++ .../gallery/pro/activities/ViewPagerActivity.kt | 2 ++ .../gallery/pro/fragments/VideoFragment.kt | 12 ++++++++---- .../gallery/pro/fragments/ViewPagerFragment.kt | 2 ++ 4 files changed, 14 insertions(+), 4 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 9ea20f4a9..96dbc0fde 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 @@ -359,4 +359,6 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList override fun goToNextItem() {} override fun launchViewVideoIntent(path: String) {} + + override fun isSlideShowActive() = false } 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 089d3da5d..cea66cd8e 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 @@ -1185,6 +1185,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View return mIsSlideshowActive } + override fun isSlideShowActive() = mIsSlideshowActive + override fun goToPrevItem() { view_pager.setCurrentItem(view_pager.currentItem - 1, false) checkOrientation() 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 3d663ec8b..4debc2c65 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 @@ -347,7 +347,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S mExoPlayer = ExoPlayerFactory.newSimpleInstance(context) mExoPlayer!!.seekParameters = SeekParameters.CLOSEST_SYNC - if (mConfig.loopVideos) { + if (mConfig.loopVideos && listener?.isSlideShowActive() == false) { mExoPlayer?.repeatMode = Player.REPEAT_MODE_ONE } @@ -722,9 +722,13 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } mCurrTime = (mExoPlayer!!.duration / 1000).toInt() - mSeekBar.progress = mSeekBar.max - mCurrTimeView.text = mDuration.getFormattedDuration() - pauseVideo() + if (listener?.videoEnded() == false && mConfig.loopVideos) { + playVideo() + } else { + mSeekBar.progress = mSeekBar.max + mCurrTimeView.text = mDuration.getFormattedDuration() + pauseVideo() + } } private fun cleanup() { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt index ef017dbad..41a31afe3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt @@ -31,6 +31,8 @@ abstract class ViewPagerFragment : Fragment() { fun goToNextItem() fun launchViewVideoIntent(path: String) + + fun isSlideShowActive(): Boolean } fun getMediumExtendedDetails(medium: Medium): String { From 2f938ac157e954d5c6a85c942eb169eabbc0075c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Marques?= Date: Sun, 1 Mar 2020 19:44:47 +0000 Subject: [PATCH 21/46] Update strings.xml --- app/src/main/res/values-pt/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 62425c4a1..b2fd39f58 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -31,7 +31,7 @@ Corrigir data de obtenção A corrigir… Dados corrigidos com sucesso - No Date Taken values have been found + Não foram encontrados dados para a data de obtenção da fotografia Partilhar foto redimensionada Olá,\n\nparece que você utilizou a opção de atualização existente na versão antiga. Agora já pode desinstalar essa versão antiga.\n\nApenas perderá os itens existentes na reciclagem e os favoritos não assinalados mas também terá que repor as predefinições da aplicação.\n\nObrigado! Trocar para pesquisa de ficheiros em todas as pastas visíveis @@ -83,8 +83,8 @@ Caminho Caminho inválido Falha na edição da imagem - Image editing cancelled - File edited successfully + Edição de imagem cancelada + Imagem editada com sucesso Editar imagem com: Editor não encontrado Localização desconhecida @@ -242,14 +242,14 @@ Cor Cor de fundo Alinhamento - To Front + Para a frente Apagar O seu texto Pincel Cor Tamanho Espessura - para a frente + Para a frente Apagar Cor do pincel Editor @@ -261,7 +261,7 @@ Aceitar Guardar A exportar imagem… - A exportar a imagem %s. + A exportar imagem %s. Inversão horizontal Inversão vertical Desfazer From 9c31b8d01e3db2ea6d2d84e4e5ce6d4039809dd0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 22:38:57 +0100 Subject: [PATCH 22/46] adding a null check at checking invalid folders --- .../simplemobiletools/gallery/pro/activities/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 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 6fcefb89a..c5d929a84 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 @@ -1155,7 +1155,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?.isMediaFile() == true || (File(it!!).isDirectory && it.startsWith("img_", true)) + it != null && (it.isMediaFile() || (File(it).isDirectory && it.startsWith("img_", true))) } ?: false if (!hasMediaFile) { From 387eccbaddff1040af20e9b38aad158f1647288c Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 23:05:04 +0100 Subject: [PATCH 23/46] do not refresh media at playing fullscreen videos, should fix some reseting --- .../gallery/pro/activities/ViewPagerActivity.kt | 2 +- .../simplemobiletools/gallery/pro/fragments/VideoFragment.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 cea66cd8e..77dffb031 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 @@ -1104,7 +1104,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View private fun gotMedia(thumbnailItems: ArrayList) { val media = thumbnailItems.asSequence().filter { it is Medium && !mIgnoredPaths.contains(it.path) }.map { it as Medium }.toMutableList() as ArrayList - if (isDirEmpty(media) || media.hashCode() == mPrevHashcode) { + if (isDirEmpty(media) || media.hashCode() == mPrevHashcode || (getCurrentFragment() as? VideoFragment)?.mIsPlaying == true) { return } 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 4debc2c65..76da0d990 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 @@ -44,7 +44,6 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private var mWasFragmentInit = false private var mIsPanorama = false private var mIsFragmentVisible = false - private var mIsPlaying = false private var mIsDragged = false private var mWasVideoStarted = false private var mWasPlayerInited = false @@ -55,6 +54,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private var mDuration = 0 private var mPositionWhenInit = 0 private var mPositionAtPause = 0L + var mIsPlaying = false private var mExoPlayer: SimpleExoPlayer? = null private var mVideoSize = Point(1, 1) From 6c7aeeec21da91dcd95ec4bb04d75b4bc68c1552 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 23:08:59 +0100 Subject: [PATCH 24/46] update commons to 5.22.16 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9436b0c12..92f439d0e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.22.15' + implementation 'com.simplemobiletools:commons:5.22.16' 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 7a8ac0e2f0cfff5ea442dcbf02b482d57089a075 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 23:17:33 +0100 Subject: [PATCH 25/46] update version to 6.13.2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 92f439d0e..66511ca5a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 296 - versionName "6.13.1" + versionCode 297 + versionName "6.13.2" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From 413ced9b87c9f756d2c5281b99e21c575bc5bad2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 23:17:39 +0100 Subject: [PATCH 26/46] updating changelog --- CHANGELOG.md | 7 +++++++ fastlane/metadata/android/en-US/changelogs/297.txt | 3 +++ 2 files changed, 10 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/297.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dfafac85..87bb2a51d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========== +Version 6.13.2 *(2020-03-01)* +---------------------------- + + * Properly handle videos at slideshows + * Fixed some gestures during video playback + * Fixed a glitch with videos randomly restarting in some cases + Version 6.13.1 *(2020-02-28)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/297.txt b/fastlane/metadata/android/en-US/changelogs/297.txt new file mode 100644 index 000000000..9d1bd6c05 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/297.txt @@ -0,0 +1,3 @@ + * Properly handle videos at slideshows + * Fixed some gestures during video playback + * Fixed a glitch with videos randomly restarting in some cases From f7735df137e037962a696e62e6ddd509ffbaa61c Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 23:31:46 +0100 Subject: [PATCH 27/46] show the No Date Takens found error message only in some cases --- .../com/simplemobiletools/gallery/pro/extensions/Activity.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 312235ba9..a51b60e58 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 @@ -454,7 +454,10 @@ fun Activity.fixDateTaken(paths: ArrayList, showToasts: Boolean, hasResc } if (!didUpdateFile) { - toast(R.string.no_date_takens_found) + if (showToasts) { + toast(R.string.no_date_takens_found) + } + runOnUiThread { callback?.invoke() } From 83784f224888d08798387d336099d8c0b007bbf7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 23:38:31 +0100 Subject: [PATCH 28/46] update version to 6.13.3 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 66511ca5a..999e7c21c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 297 - versionName "6.13.2" + versionCode 298 + versionName "6.13.3" multiDexEnabled true setProperty("archivesBaseName", "gallery-$versionCode") vectorDrawables.useSupportLibrary = true From f8cb6b57c848868889923c3653c688b3915e890c Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 1 Mar 2020 23:38:39 +0100 Subject: [PATCH 29/46] updating changelog --- CHANGELOG.md | 5 +++++ fastlane/metadata/android/en-US/changelogs/298.txt | 4 ++++ 2 files changed, 9 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/298.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 87bb2a51d..769e4fa8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========== +Version 6.13.3 *(2020-03-01)* +---------------------------- + + * Avoid showing the "No Date Takens found" error in some cases + Version 6.13.2 *(2020-03-01)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/298.txt b/fastlane/metadata/android/en-US/changelogs/298.txt new file mode 100644 index 000000000..1438c598c --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/298.txt @@ -0,0 +1,4 @@ + * Properly handle videos at slideshows + * Fixed some gestures during video playback + * Fixed a glitch with videos randomly restarting in some cases + * Avoid showing the "No Date Takens found" error in some cases From bff7e1c2b7262ad5ead44519d1315995ffc86e2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Mon, 2 Mar 2020 11:17:24 +0100 Subject: [PATCH 30/46] Update strings.xml --- app/src/main/res/values-ca/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 8bf6ad6fa..de7449e58 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -31,7 +31,7 @@ Fixar la data de presa Fixant… Data fixada correctament - No Date Taken values have been found + No s\’han trobat valors presos per data Comparteix una versió redimensionada Hola,\n\nsembla que heu actualitzat des de l\'antiga aplicació gratuïta. Ara podeu desinstal·lar la versió antiga, que té un botó "Actualitza a Pro" a la part superior de la configuració de l’aplicació.\nNomés s’eliminaran els elements de la paperera, els elements preferits sense marcar i també caldrà restablirla configuració de la vostra aplicació.\n\nGràcies! Canvia a la cerca de fitxers a totes les carpetes visibles @@ -83,7 +83,7 @@ Ruta Ruta de imatge no vàlida Ha fallat la edició de la imatge - Image editing cancelled + S'ha cancel·lat l\'edició de la imatge Fitxer editar satisfactoriament Editar imatge utilitzant: No s’ha trobat cap editor d’imatges From 3468b5bac21cc6d51a269d561bd99324f5a6f3f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Mon, 2 Mar 2020 11:23:11 +0100 Subject: [PATCH 31/46] Update strings.xml --- app/src/main/res/values-es/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 084436b72..95ab0d150 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -31,7 +31,7 @@ Fijar fecha de toma Fijando… Fecha fijada correctamente - No Date Taken values have been found + No se han encontrado valores de fechas tomadas Comparte una versión redimensionada Oye,\n\nParece que actualizaste de la aplicación gratuita vieja. Ahora puedes desinstalar la versión vieja, que tiene un botón \'Actualizar a Pro\' en la aprte superior de los ajustes de la app.\n\nSolo tendrás los elementos de la Papelera de Reciclaje eliminados, favoritos desmarcados y también tendrás que reiniciar los ajustes de la app.\n\n¡Gracias! Cambiar a la búsqueda de archivos en todas las carpetas visibles @@ -83,7 +83,7 @@ Ruta Ruta de imagen no válida Falló la edición de imagen - Image editing cancelled + Edición de imagen cancelada Fichero editado satisfactoriamente Editar imagen usando: No se encontró editor de imágenes From ecd4981da4a1c809cf1d6015f00968107f1d622c Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 2 Mar 2020 11:32:51 +0100 Subject: [PATCH 32/46] adding an editorconfig file --- .editorconfig | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..b762e8045 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided this notice is +# preserved. This file is offered as-is, without any warranty. +# Names of contributors must not be used to endorse or promote products +# derived from this file without specific prior written permission. + +# EditorConfig +# http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# LF end-of-line, insert an empty new line and UTF-8 +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +indent_style = space +indent_size = 4 From f9f5de440b3ed6557045bac6d937d977ceb899f9 Mon Sep 17 00:00:00 2001 From: Tibor Kaputa Date: Mon, 2 Mar 2020 11:45:24 +0100 Subject: [PATCH 33/46] escaping an apostrophe --- 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 de7449e58..987704d3c 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -83,7 +83,7 @@ Ruta Ruta de imatge no vàlida Ha fallat la edició de la imatge - S'ha cancel·lat l\'edició de la imatge + S\'ha cancel·lat l\'edició de la imatge Fitxer editar satisfactoriament Editar imatge utilitzant: No s’ha trobat cap editor d’imatges From 1634ed47a8cbc147feb40f8d8925ad410e0358fd Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Mar 2020 16:55:24 +0100 Subject: [PATCH 34/46] do not rescan .nomedia file at hiding a folder, it can delete the file --- .../com/simplemobiletools/gallery/pro/extensions/Activity.kt | 5 +---- 1 file changed, 1 insertion(+), 4 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 a51b60e58..997773bbb 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 @@ -156,13 +156,10 @@ fun BaseSimpleActivity.addNoMedia(path: String, callback: () -> Unit) { } else { try { file.createNewFile() - applicationContext.scanFileRecursively(file) { - callback() - } } catch (e: Exception) { showErrorToast(e) - callback() } + callback() } } From 457dbf57f4e1110c903ffe6c2b98148e0f2dd1c1 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Mar 2020 17:03:01 +0100 Subject: [PATCH 35/46] set continuation indent size to 8 in Android Studio --- .editorconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.editorconfig b/.editorconfig index b762e8045..5e3c70394 100644 --- a/.editorconfig +++ b/.editorconfig @@ -17,3 +17,5 @@ insert_final_newline = true charset = utf-8 indent_style = space indent_size = 4 +continuation_indent_size = 8 + From 97436ba0044d3cad434f90618558b6ff01e55566 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 4 Mar 2020 14:44:27 +0100 Subject: [PATCH 36/46] breaking an if/else statement into multiple lines --- .../com/simplemobiletools/gallery/pro/extensions/String.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 3a8eb02ae..8d126a9db 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 @@ -32,7 +32,12 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPath return true } - val containsNoMedia = if (showHidden) false else File(this, NOMEDIA).exists() + val containsNoMedia = if (showHidden) { + false + } else { + File(this, NOMEDIA).exists() + } + return if (!showHidden && containsNoMedia) { false } else if (excludedPaths.contains(this)) { From 7d94f02f44d2c0afff018c83fdaf859e1744e625 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 5 Mar 2020 17:51:08 +0100 Subject: [PATCH 37/46] use 4 spaces at xml file contuniation indentations --- .editorconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.editorconfig b/.editorconfig index 5e3c70394..1606d61fc 100644 --- a/.editorconfig +++ b/.editorconfig @@ -19,3 +19,5 @@ indent_style = space indent_size = 4 continuation_indent_size = 8 +[*.xml] +continuation_indent_size = 4 From de48742daaa0f263f1c9fb45bb521a2cc8751e19 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 5 Mar 2020 20:02:31 +0100 Subject: [PATCH 38/46] avoid showing portrait photos on the main screen --- .../com/simplemobiletools/gallery/pro/extensions/String.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8d126a9db..ccfaa425b 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 @@ -20,7 +20,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPath if (file.name.startsWith("img_", true)) { val files = file.list() if (files != null) { - if (files.any { it.contains("portrait", true) && it.contains("burst", true) }) { + if (files.any { it.contains("burst", true) }) { return false } } From 2805a1a890d2b207d8f38b5817400330085edf48 Mon Sep 17 00:00:00 2001 From: AlbatorV Date: Thu, 5 Mar 2020 21:50:55 +0100 Subject: [PATCH 39/46] Update strings.xml --- app/src/main/res/values-fr/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9a6fdbb25..6ca99186c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -31,7 +31,7 @@ Corriger les dates de prise de vue Correction en cours… Dates corrigées - No Date Taken values have been found + Aucune date de prise de vue trouvée Partager une version redimensionnée Hé,\n\nvous avez apparemment fait une mise à niveau à partir de l\'ancienne application gratuite. Vous pouvez maintenant désinstaller l\'ancienne version avec le bouton \'Mettre à niveau vers Pro\' en haut des paramètres de l\'application.\n\nVos éléments de la corbeille seront supprimés, les éléments favoris seront non marqués et vous devrez également restaurer les paramètres de votre application.\n\nMerci ! Basculer vers la recherche de fichiers @@ -83,7 +83,7 @@ Emplacement Emplacement invalide L\'édition de l\'image a échoué - Image editing cancelled + L\'édition de l\'image a été annulé L\'image a été éditée avec succès Modifier l\'image avec: Aucun éditeur d\'image trouvé From caa41cdd0fc814f4c71131b7a73625f19fc76333 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 5 Mar 2020 22:33:48 +0100 Subject: [PATCH 40/46] update commons to 5.22.18 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 999e7c21c..67c92a516 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.22.16' + implementation 'com.simplemobiletools:commons:5.22.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' From 23b7e2fef162114b5bcab09e154100f16cbe3d6a Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 5 Mar 2020 23:17:48 +0100 Subject: [PATCH 41/46] fix #1772, add the old editor back in the foss app flavor --- app/build.gradle | 1 + .../gallery/pro/activities/EditActivity.kt | 552 ++++++++++++++++-- .../gallery/pro/adapters/FiltersAdapter.kt | 58 ++ .../gallery/pro/extensions/Activity.kt | 2 +- .../gallery/pro/helpers/Config.kt | 8 + .../gallery/pro/helpers/Constants.kt | 2 + .../pro/helpers/FilterThumbnailsManager.kt | 27 + .../gallery/pro/models/FilterItem.kt | 6 + .../res/drawable/ic_aspect_ratio_vector.xml | 9 + .../res/drawable/ic_crop_rotate_vector.xml | 9 + app/src/main/res/drawable/ic_draw_vector.xml | 9 + .../res/drawable/ic_photo_filter_vector.xml | 9 + app/src/main/res/layout/activity_edit.xml | 51 +- .../layout/bottom_editor_actions_filter.xml | 19 + .../bottom_editor_crop_rotate_actions.xml | 38 +- .../res/layout/bottom_editor_draw_actions.xml | 61 ++ .../layout/bottom_editor_primary_actions.xml | 47 ++ .../main/res/layout/editor_filter_item.xml | 29 + app/src/main/res/menu/menu_editor.xml | 5 + app/src/main/res/values/dimens.xml | 3 + 20 files changed, 897 insertions(+), 48 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/FiltersAdapter.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/FilterThumbnailsManager.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/FilterItem.kt create mode 100644 app/src/main/res/drawable/ic_aspect_ratio_vector.xml create mode 100644 app/src/main/res/drawable/ic_crop_rotate_vector.xml create mode 100644 app/src/main/res/drawable/ic_draw_vector.xml create mode 100644 app/src/main/res/drawable/ic_photo_filter_vector.xml create mode 100644 app/src/main/res/layout/bottom_editor_actions_filter.xml create mode 100644 app/src/main/res/layout/bottom_editor_draw_actions.xml create mode 100644 app/src/main/res/layout/bottom_editor_primary_actions.xml create mode 100644 app/src/main/res/layout/editor_filter_item.xml diff --git a/app/build.gradle b/app/build.gradle index 67c92a516..5c967a50a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -88,6 +88,7 @@ dependencies { implementation 'com.google.vr:sdk-panowidget:1.180.0' implementation 'com.google.vr:sdk-videowidget:1.180.0' implementation 'org.apache.sanselan:sanselan:0.97-incubator' + implementation 'info.androidhive:imagefilters:1.0.7' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.caverock:androidsvg-aar:1.3' implementation 'com.github.tibbi:gestureviews:512f929d82' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt index bdcc630f5..8d3532271 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.Bitmap.CompressFormat import android.graphics.Color +import android.graphics.Point import android.media.ExifInterface import android.net.Uri import android.os.Build @@ -14,6 +15,16 @@ import android.provider.MediaStore import android.view.Menu import android.view.MenuItem import android.widget.RelativeLayout +import androidx.recyclerview.widget.LinearLayoutManager +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.DecodeFormat +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.Target +import com.simplemobiletools.commons.dialogs.ColorPickerDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE @@ -23,29 +34,62 @@ import com.simplemobiletools.commons.helpers.isNougatPlus import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.gallery.pro.BuildConfig import com.simplemobiletools.gallery.pro.R +import com.simplemobiletools.gallery.pro.adapters.FiltersAdapter import com.simplemobiletools.gallery.pro.dialogs.OtherAspectRatioDialog +import com.simplemobiletools.gallery.pro.dialogs.ResizeDialog +import com.simplemobiletools.gallery.pro.dialogs.SaveAsDialog import com.simplemobiletools.gallery.pro.extensions.config import com.simplemobiletools.gallery.pro.extensions.fixDateTaken +import com.simplemobiletools.gallery.pro.extensions.openEditor import com.simplemobiletools.gallery.pro.helpers.* +import com.simplemobiletools.gallery.pro.models.FilterItem import com.theartofdev.edmodo.cropper.CropImageView +import com.zomato.photofilters.FilterPack +import com.zomato.photofilters.imageprocessors.Filter import kotlinx.android.synthetic.main.activity_edit.* import kotlinx.android.synthetic.main.bottom_actions_aspect_ratio.* +import kotlinx.android.synthetic.main.bottom_editor_actions_filter.* import kotlinx.android.synthetic.main.bottom_editor_crop_rotate_actions.* +import kotlinx.android.synthetic.main.bottom_editor_draw_actions.* +import kotlinx.android.synthetic.main.bottom_editor_primary_actions.* import java.io.* class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener { + companion object { + init { + System.loadLibrary("NativeImageProcessor") + } + } + private val TEMP_FOLDER_NAME = "images" private val ASPECT_X = "aspectX" private val ASPECT_Y = "aspectY" + private val CROP = "crop" + + // constants for bottom primary action groups + private val PRIMARY_ACTION_NONE = 0 + private val PRIMARY_ACTION_FILTER = 1 + private val PRIMARY_ACTION_CROP_ROTATE = 2 + private val PRIMARY_ACTION_DRAW = 3 + + private val CROP_ROTATE_NONE = 0 + private val CROP_ROTATE_ASPECT_RATIO = 1 private lateinit var uri: Uri private lateinit var saveUri: Uri private var resizeWidth = 0 private var resizeHeight = 0 + private var drawColor = 0 private var lastOtherAspectRatio: Pair? = null + private var currPrimaryAction = PRIMARY_ACTION_NONE + private var currCropRotateAction = CROP_ROTATE_ASPECT_RATIO private var currAspectRatio = ASPECT_RATIO_FREE + private var isCropIntent = false + private var isEditingWithThirdParty = false private var isSharingBitmap = false + private var wasDrawCanvasPositioned = false private var oldExif: ExifInterface? = null + private var filterInitialBitmap: Bitmap? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -65,6 +109,19 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } } + override fun onResume() { + super.onResume() + isEditingWithThirdParty = false + bottom_draw_width.setColors(config.textColor, getAdjustedPrimaryColor(), config.backgroundColor) + } + + override fun onStop() { + super.onStop() + if (isEditingWithThirdParty) { + finish() + } + } + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_editor, menu) updateMenuItemColors(menu) @@ -74,6 +131,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.save_as -> saveImage() + R.id.edit -> editWith() R.id.share -> shareImage() else -> return super.onOptionsItemSelected(item) } @@ -112,9 +170,14 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener else -> uri } - (bottom_editor_crop_rotate_actions.layoutParams as RelativeLayout.LayoutParams).addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1) - setupCropRotateActionButtons() - setupAspectRatioButtons() + isCropIntent = intent.extras?.get(CROP) == "true" + if (isCropIntent) { + bottom_editor_primary_actions.beGone() + (bottom_editor_crop_rotate_actions.layoutParams as RelativeLayout.LayoutParams).addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1) + } + + loadDefaultImageView() + setupBottomActions() if (config.lastEditorCropAspectRatio == ASPECT_RATIO_OTHER) { if (config.lastEditorCropOtherAspectRatioX == 0f) { @@ -127,26 +190,115 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener lastOtherAspectRatio = Pair(config.lastEditorCropOtherAspectRatioX, config.lastEditorCropOtherAspectRatioY) } - updateAspectRatio(config.lastEditorCropAspectRatio) crop_image_view.guidelines = CropImageView.Guidelines.ON - loadCropImageView() + bottom_aspect_ratios.beVisible() + } + + private fun loadDefaultImageView() { + default_image_view.beVisible() + crop_image_view.beGone() + editor_draw_canvas.beGone() + + val options = RequestOptions() + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + + Glide.with(this) + .asBitmap() + .load(uri) + .apply(options) + .listener(object : RequestListener { + override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean) = false + + override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { + val currentFilter = getFiltersAdapter()?.getCurrentFilter() + if (filterInitialBitmap == null) { + loadCropImageView() + bottomCropRotateClicked() + } + + if (filterInitialBitmap != null && currentFilter != null && currentFilter.filter.name != getString(R.string.none)) { + default_image_view.onGlobalLayout { + applyFilter(currentFilter) + } + } else { + filterInitialBitmap = bitmap + } + + if (isCropIntent) { + bottom_primary_filter.beGone() + bottom_primary_draw.beGone() + } + + return false + } + }).into(default_image_view) } private fun loadCropImageView() { + default_image_view.beGone() + editor_draw_canvas.beGone() crop_image_view.apply { + beVisible() setOnCropImageCompleteListener(this@EditActivity) setImageUriAsync(uri) guidelines = CropImageView.Guidelines.ON - if (shouldCropSquare()) { - updateAspectRatio(ASPECT_RATIO_ONE_ONE) + if (isCropIntent && shouldCropSquare()) { + currAspectRatio = ASPECT_RATIO_ONE_ONE setFixedAspectRatio(true) - bottom_aspect_ratios.beGone() + bottom_aspect_ratio.beGone() } } } + private fun loadDrawCanvas() { + default_image_view.beGone() + crop_image_view.beGone() + editor_draw_canvas.beVisible() + + if (!wasDrawCanvasPositioned) { + wasDrawCanvasPositioned = true + editor_draw_canvas.onGlobalLayout { + ensureBackgroundThread { + fillCanvasBackground() + } + } + } + } + + private fun fillCanvasBackground() { + val size = Point() + windowManager.defaultDisplay.getSize(size) + val options = RequestOptions() + .format(DecodeFormat.PREFER_ARGB_8888) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .fitCenter() + + try { + val builder = Glide.with(applicationContext) + .asBitmap() + .load(uri) + .apply(options) + .into(editor_draw_canvas.width, editor_draw_canvas.height) + + val bitmap = builder.get() + runOnUiThread { + editor_draw_canvas.apply { + updateBackgroundBitmap(bitmap) + layoutParams.width = bitmap.width + layoutParams.height = bitmap.height + y = (height - bitmap.height) / 2f + requestLayout() + } + } + } catch (e: Exception) { + showErrorToast(e) + } + } + @TargetApi(Build.VERSION_CODES.N) private fun saveImage() { var inputStream: InputStream? = null @@ -160,14 +312,66 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener inputStream?.close() } - crop_image_view.getCroppedImageAsync() + if (crop_image_view.isVisible()) { + crop_image_view.getCroppedImageAsync() + } else if (editor_draw_canvas.isVisible()) { + val bitmap = editor_draw_canvas.getBitmap() + if (saveUri.scheme == "file") { + SaveAsDialog(this, saveUri.path!!, true) { + saveBitmapToFile(bitmap, it, true) + } + } else if (saveUri.scheme == "content") { + val filePathGetter = getNewFilePath() + SaveAsDialog(this, filePathGetter.first, filePathGetter.second) { + saveBitmapToFile(bitmap, it, true) + } + } + } else { + val currentFilter = getFiltersAdapter()?.getCurrentFilter() ?: return + val filePathGetter = getNewFilePath() + SaveAsDialog(this, filePathGetter.first, filePathGetter.second) { + toast(R.string.saving) + + // clean up everything to free as much memory as possible + default_image_view.setImageResource(0) + crop_image_view.setImageBitmap(null) + bottom_actions_filter_list.adapter = null + bottom_actions_filter_list.beGone() + + ensureBackgroundThread { + try { + val originalBitmap = Glide.with(applicationContext).asBitmap().load(uri).submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get() + currentFilter.filter.processFilter(originalBitmap) + saveBitmapToFile(originalBitmap, it, false) + } catch (e: OutOfMemoryError) { + toast(R.string.out_of_memory_error) + } + } + } + } } private fun shareImage() { ensureBackgroundThread { - isSharingBitmap = true - runOnUiThread { - crop_image_view.getCroppedImageAsync() + when { + default_image_view.isVisible() -> { + val currentFilter = getFiltersAdapter()?.getCurrentFilter() + if (currentFilter == null) { + toast(R.string.unknown_error_occurred) + return@ensureBackgroundThread + } + + val originalBitmap = Glide.with(applicationContext).asBitmap().load(uri).submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get() + currentFilter.filter.processFilter(originalBitmap) + shareBitmap(originalBitmap) + } + crop_image_view.isVisible() -> { + isSharingBitmap = true + runOnUiThread { + crop_image_view.getCroppedImageAsync() + } + } + editor_draw_canvas.isVisible() -> shareBitmap(editor_draw_canvas.getBitmap()) } } } @@ -212,11 +416,66 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } } + private fun getFiltersAdapter() = bottom_actions_filter_list.adapter as? FiltersAdapter + + private fun setupBottomActions() { + setupPrimaryActionButtons() + setupCropRotateActionButtons() + setupAspectRatioButtons() + setupDrawButtons() + } + + private fun setupPrimaryActionButtons() { + bottom_primary_filter.setOnClickListener { + bottomFilterClicked() + } + + bottom_primary_crop_rotate.setOnClickListener { + bottomCropRotateClicked() + } + + bottom_primary_draw.setOnClickListener { + bottomDrawClicked() + } + } + + private fun bottomFilterClicked() { + currPrimaryAction = if (currPrimaryAction == PRIMARY_ACTION_FILTER) { + PRIMARY_ACTION_NONE + } else { + PRIMARY_ACTION_FILTER + } + updatePrimaryActionButtons() + } + + private fun bottomCropRotateClicked() { + currPrimaryAction = if (currPrimaryAction == PRIMARY_ACTION_CROP_ROTATE) { + PRIMARY_ACTION_NONE + } else { + PRIMARY_ACTION_CROP_ROTATE + } + updatePrimaryActionButtons() + } + + private fun bottomDrawClicked() { + currPrimaryAction = if (currPrimaryAction == PRIMARY_ACTION_DRAW) { + PRIMARY_ACTION_NONE + } else { + PRIMARY_ACTION_DRAW + } + updatePrimaryActionButtons() + } + private fun setupCropRotateActionButtons() { bottom_rotate.setOnClickListener { crop_image_view.rotateImage(90) } + bottom_resize.beGoneIf(isCropIntent) + bottom_resize.setOnClickListener { + resizeImage() + } + bottom_flip_horizontally.setOnClickListener { crop_image_view.flipImageHorizontally() } @@ -224,6 +483,19 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener bottom_flip_vertically.setOnClickListener { crop_image_view.flipImageVertically() } + + bottom_aspect_ratio.setOnClickListener { + currCropRotateAction = if (currCropRotateAction == CROP_ROTATE_ASPECT_RATIO) { + crop_image_view.guidelines = CropImageView.Guidelines.OFF + bottom_aspect_ratios.beGone() + CROP_ROTATE_NONE + } else { + crop_image_view.guidelines = CropImageView.Guidelines.ON + bottom_aspect_ratios.beVisible() + CROP_ROTATE_ASPECT_RATIO + } + updateCropRotateActionButtons() + } } private fun setupAspectRatioButtons() { @@ -255,6 +527,126 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener updateAspectRatioButtons() } + private fun setupDrawButtons() { + updateDrawColor(config.lastEditorDrawColor) + bottom_draw_width.progress = config.lastEditorBrushSize + updateBrushSize(config.lastEditorBrushSize) + + bottom_draw_color_clickable.setOnClickListener { + ColorPickerDialog(this, drawColor) { wasPositivePressed, color -> + if (wasPositivePressed) { + updateDrawColor(color) + } + } + } + + bottom_draw_width.onSeekBarChangeListener { + config.lastEditorBrushSize = it + updateBrushSize(it) + } + + bottom_draw_undo.setOnClickListener { + editor_draw_canvas.undo() + } + } + + private fun updateBrushSize(percent: Int) { + editor_draw_canvas.updateBrushSize(percent) + val scale = Math.max(0.03f, percent / 100f) + bottom_draw_color.scaleX = scale + bottom_draw_color.scaleY = scale + } + + private fun updatePrimaryActionButtons() { + if (crop_image_view.isGone() && currPrimaryAction == PRIMARY_ACTION_CROP_ROTATE) { + loadCropImageView() + } else if (default_image_view.isGone() && currPrimaryAction == PRIMARY_ACTION_FILTER) { + loadDefaultImageView() + } else if (editor_draw_canvas.isGone() && currPrimaryAction == PRIMARY_ACTION_DRAW) { + loadDrawCanvas() + } + + arrayOf(bottom_primary_filter, bottom_primary_crop_rotate, bottom_primary_draw).forEach { + it.applyColorFilter(Color.WHITE) + } + + val currentPrimaryActionButton = when (currPrimaryAction) { + PRIMARY_ACTION_FILTER -> bottom_primary_filter + PRIMARY_ACTION_CROP_ROTATE -> bottom_primary_crop_rotate + PRIMARY_ACTION_DRAW -> bottom_primary_draw + else -> null + } + + currentPrimaryActionButton?.applyColorFilter(getAdjustedPrimaryColor()) + bottom_editor_filter_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_FILTER) + bottom_editor_crop_rotate_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_CROP_ROTATE) + bottom_editor_draw_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_DRAW) + + if (currPrimaryAction == PRIMARY_ACTION_FILTER && bottom_actions_filter_list.adapter == null) { + ensureBackgroundThread { + val thumbnailSize = resources.getDimension(R.dimen.bottom_filters_thumbnail_size).toInt() + + val bitmap = try { + Glide.with(this) + .asBitmap() + .load(uri).listener(object : RequestListener { + override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { + showErrorToast(e.toString()) + return false + } + + override fun onResourceReady(resource: Bitmap?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean) = false + }) + .submit(thumbnailSize, thumbnailSize) + .get() + } catch (e: GlideException) { + showErrorToast(e) + finish() + return@ensureBackgroundThread + } + + runOnUiThread { + val filterThumbnailsManager = FilterThumbnailsManager() + filterThumbnailsManager.clearThumbs() + + val noFilter = Filter(getString(R.string.none)) + filterThumbnailsManager.addThumb(FilterItem(bitmap, noFilter)) + + FilterPack.getFilterPack(this).forEach { + val filterItem = FilterItem(bitmap, it) + filterThumbnailsManager.addThumb(filterItem) + } + + val filterItems = filterThumbnailsManager.processThumbs() + val adapter = FiltersAdapter(applicationContext, filterItems) { + val layoutManager = bottom_actions_filter_list.layoutManager as LinearLayoutManager + applyFilter(filterItems[it]) + + if (it == layoutManager.findLastCompletelyVisibleItemPosition() || it == layoutManager.findLastVisibleItemPosition()) { + bottom_actions_filter_list.smoothScrollBy(thumbnailSize, 0) + } else if (it == layoutManager.findFirstCompletelyVisibleItemPosition() || it == layoutManager.findFirstVisibleItemPosition()) { + bottom_actions_filter_list.smoothScrollBy(-thumbnailSize, 0) + } + } + + bottom_actions_filter_list.adapter = adapter + adapter.notifyDataSetChanged() + } + } + } + + if (currPrimaryAction != PRIMARY_ACTION_CROP_ROTATE) { + bottom_aspect_ratios.beGone() + currCropRotateAction = CROP_ROTATE_NONE + } + updateCropRotateActionButtons() + } + + private fun applyFilter(filterItem: FilterItem) { + val newBitmap = Bitmap.createBitmap(filterInitialBitmap!!) + default_image_view.setImageBitmap(filterItem.filter.processFilter(newBitmap)) + } + private fun updateAspectRatio(aspectRatio: Int) { currAspectRatio = aspectRatio config.lastEditorCropAspectRatio = aspectRatio @@ -292,6 +684,40 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener currentAspectRatioButton.setTextColor(getAdjustedPrimaryColor()) } + private fun updateCropRotateActionButtons() { + arrayOf(bottom_aspect_ratio).forEach { + it.applyColorFilter(Color.WHITE) + } + + val primaryActionView = when (currCropRotateAction) { + CROP_ROTATE_ASPECT_RATIO -> bottom_aspect_ratio + else -> null + } + + primaryActionView?.applyColorFilter(getAdjustedPrimaryColor()) + } + + private fun updateDrawColor(color: Int) { + drawColor = color + bottom_draw_color.applyColorFilter(color) + config.lastEditorDrawColor = color + editor_draw_canvas.updateColor(color) + } + + private fun resizeImage() { + val point = getAreaSize() + if (point == null) { + toast(R.string.unknown_error_occurred) + return + } + + ResizeDialog(this, point) { + resizeWidth = it.x + resizeHeight = it.y + crop_image_view.getCroppedImageAsync() + } + } + private fun shouldCropSquare(): Boolean { val extras = intent.extras return if (extras != null && extras.containsKey(ASPECT_X) && extras.containsKey(ASPECT_Y)) { @@ -301,6 +727,16 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } } + private fun getAreaSize(): Point? { + val rect = crop_image_view.cropRect ?: return null + val rotation = crop_image_view.rotatedDegrees + return if (rotation == 0 || rotation == 180) { + Point(rect.width(), rect.height()) + } else { + Point(rect.height(), rect.width()) + } + } + override fun onCropImageComplete(view: CropImageView, result: CropImageView.CropResult) { if (result.error == null) { val bitmap = result.bitmap @@ -310,35 +746,72 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener return } - if (saveUri.scheme == "file") { - saveBitmapToFile(bitmap, saveUri.path!!) - } else { - var inputStream: InputStream? = null - var outputStream: OutputStream? = null - try { - val stream = ByteArrayOutputStream() - bitmap.compress(CompressFormat.JPEG, 100, stream) - inputStream = ByteArrayInputStream(stream.toByteArray()) - outputStream = contentResolver.openOutputStream(saveUri) - inputStream.copyTo(outputStream!!) - } finally { - inputStream?.close() - outputStream?.close() - } + if (isCropIntent) { + if (saveUri.scheme == "file") { + saveBitmapToFile(bitmap, saveUri.path!!, true) + } else { + var inputStream: InputStream? = null + var outputStream: OutputStream? = null + try { + val stream = ByteArrayOutputStream() + bitmap.compress(CompressFormat.JPEG, 100, stream) + inputStream = ByteArrayInputStream(stream.toByteArray()) + outputStream = contentResolver.openOutputStream(saveUri) + inputStream.copyTo(outputStream!!) + } finally { + inputStream?.close() + outputStream?.close() + } - Intent().apply { - data = saveUri - addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - setResult(RESULT_OK, this) + Intent().apply { + data = saveUri + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + setResult(RESULT_OK, this) + } + finish() } - finish() + } else if (saveUri.scheme == "file") { + SaveAsDialog(this, saveUri.path!!, true) { + saveBitmapToFile(bitmap, it, true) + } + } else if (saveUri.scheme == "content") { + val filePathGetter = getNewFilePath() + SaveAsDialog(this, filePathGetter.first, filePathGetter.second) { + saveBitmapToFile(bitmap, it, true) + } + } else { + toast(R.string.unknown_file_location) } } else { toast("${getString(R.string.image_editing_failed)}: ${result.error.message}") } } - private fun saveBitmapToFile(bitmap: Bitmap, path: String) { + private fun getNewFilePath(): Pair { + var newPath = applicationContext.getRealPathFromURI(saveUri) ?: "" + if (newPath.startsWith("/mnt/")) { + newPath = "" + } + + var shouldAppendFilename = true + if (newPath.isEmpty()) { + val filename = applicationContext.getFilenameFromContentUri(saveUri) ?: "" + if (filename.isNotEmpty()) { + val path = if (intent.extras?.containsKey(REAL_FILE_PATH) == true) intent.getStringExtra(REAL_FILE_PATH).getParentPath() else internalStoragePath + newPath = "$path/$filename" + shouldAppendFilename = false + } + } + + if (newPath.isEmpty()) { + newPath = "$internalStoragePath/${getCurrentFormattedDateTime()}.${saveUri.toString().getFilenameExtension()}" + shouldAppendFilename = false + } + + return Pair(newPath, shouldAppendFilename) + } + + private fun saveBitmapToFile(bitmap: Bitmap, path: String, showSavingToast: Boolean) { if (!packageName.contains("slootelibomelpmis".reversed(), true)) { if (baseConfig.appRunCount > 100) { val label = "sknahT .moc.slootelibomelpmis.www morf eno lanigiro eht daolnwod ytefas nwo ruoy roF .ppa eht fo noisrev ekaf a gnisu era uoY".reversed() @@ -357,7 +830,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener val fileDirItem = FileDirItem(path, path.getFilenameFromPath()) getFileOutputStream(fileDirItem, true) { if (it != null) { - saveBitmap(file, bitmap, it) + saveBitmap(file, bitmap, it, showSavingToast) } else { toast(R.string.image_editing_failed) } @@ -371,8 +844,10 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } @TargetApi(Build.VERSION_CODES.N) - private fun saveBitmap(file: File, bitmap: Bitmap, out: OutputStream) { - toast(R.string.saving) + private fun saveBitmap(file: File, bitmap: Bitmap, out: OutputStream, showSavingToast: Boolean) { + if (showSavingToast) { + toast(R.string.saving) + } if (resizeWidth > 0 && resizeHeight > 0) { val resized = Bitmap.createScaledBitmap(bitmap, resizeWidth, resizeHeight, false) @@ -394,6 +869,11 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener out.close() } + private fun editWith() { + openEditor(uri.toString(), true) + isEditingWithThirdParty = true + } + private fun scanFinalPath(path: String) { val paths = arrayListOf(path) rescanPaths(paths) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/FiltersAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/FiltersAdapter.kt new file mode 100644 index 000000000..b614787b8 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/FiltersAdapter.kt @@ -0,0 +1,58 @@ +package com.simplemobiletools.gallery.pro.adapters + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.simplemobiletools.gallery.pro.R +import com.simplemobiletools.gallery.pro.models.FilterItem +import kotlinx.android.synthetic.main.editor_filter_item.view.* +import java.util.* + +class FiltersAdapter(val context: Context, val filterItems: ArrayList, val itemClick: (Int) -> Unit) : RecyclerView.Adapter() { + + private var currentSelection = filterItems.first() + private var strokeBackground = context.resources.getDrawable(R.drawable.stroke_background) + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bindView(filterItems[position]) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.editor_filter_item, parent, false) + return ViewHolder(view) + } + + override fun getItemCount() = filterItems.size + + fun getCurrentFilter() = currentSelection + + private fun setCurrentFilter(position: Int) { + val filterItem = filterItems.getOrNull(position) ?: return + if (currentSelection != filterItem) { + currentSelection = filterItem + notifyDataSetChanged() + itemClick.invoke(position) + } + } + + inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + fun bindView(filterItem: FilterItem): View { + itemView.apply { + editor_filter_item_label.text = filterItem.filter.name + editor_filter_item_thumbnail.setImageBitmap(filterItem.bitmap) + editor_filter_item_thumbnail.background = if (getCurrentFilter() == filterItem) { + strokeBackground + } else { + null + } + + setOnClickListener { + setCurrentFilter(adapterPosition) + } + } + return itemView + } + } +} 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 997773bbb..c7703735e 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 @@ -80,7 +80,7 @@ fun Activity.launchCamera() { fun SimpleActivity.launchAbout() { val licenses = LICENSE_GLIDE or LICENSE_CROPPER or LICENSE_RTL or LICENSE_SUBSAMPLING or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GIF_DRAWABLE or - LICENSE_PICASSO or LICENSE_EXOPLAYER or LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_GESTURE_VIEWS + 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), 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 6769ec72d..68ff6268b 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 @@ -475,6 +475,14 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(ALLOW_ROTATING_WITH_GESTURES, true) set(allowRotatingWithGestures) = prefs.edit().putBoolean(ALLOW_ROTATING_WITH_GESTURES, allowRotatingWithGestures).apply() + var lastEditorDrawColor: Int + get() = prefs.getInt(LAST_EDITOR_DRAW_COLOR, primaryColor) + set(lastEditorDrawColor) = prefs.edit().putInt(LAST_EDITOR_DRAW_COLOR, lastEditorDrawColor).apply() + + var lastEditorBrushSize: Int + get() = prefs.getInt(LAST_EDITOR_BRUSH_SIZE, 50) + set(lastEditorBrushSize) = prefs.edit().putInt(LAST_EDITOR_BRUSH_SIZE, lastEditorBrushSize).apply() + var showNotch: Boolean get() = prefs.getBoolean(SHOW_NOTCH, true) set(showNotch) = prefs.edit().putBoolean(SHOW_NOTCH, showNotch).apply() 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 5604bba2a..248cf6393 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 @@ -73,6 +73,8 @@ const val GROUP_DIRECT_SUBFOLDERS = "group_direct_subfolders" const val SHOW_WIDGET_FOLDER_NAME = "show_widget_folder_name" const val ALLOW_ONE_TO_ONE_ZOOM = "allow_one_to_one_zoom" const val ALLOW_ROTATING_WITH_GESTURES = "allow_rotating_with_gestures" +const val LAST_EDITOR_DRAW_COLOR = "last_editor_draw_color" +const val LAST_EDITOR_BRUSH_SIZE = "last_editor_brush_size" const val SHOW_NOTCH = "show_notch" const val FILE_LOADING_PRIORITY = "file_loading_priority" const val SPAM_FOLDERS_CHECKED = "spam_folders_checked" diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/FilterThumbnailsManager.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/FilterThumbnailsManager.kt new file mode 100644 index 000000000..ae043ddde --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/FilterThumbnailsManager.kt @@ -0,0 +1,27 @@ +package com.simplemobiletools.gallery.pro.helpers + +import android.graphics.Bitmap +import com.simplemobiletools.gallery.pro.models.FilterItem +import java.util.* + +class FilterThumbnailsManager { + private var filterThumbnails = ArrayList(10) + private var processedThumbnails = ArrayList(10) + + fun addThumb(filterItem: FilterItem) { + filterThumbnails.add(filterItem) + } + + fun processThumbs(): ArrayList { + for (filterItem in filterThumbnails) { + filterItem.bitmap = filterItem.filter.processFilter(Bitmap.createBitmap(filterItem.bitmap)) + processedThumbnails.add(filterItem) + } + return processedThumbnails + } + + fun clearThumbs() { + filterThumbnails = ArrayList() + processedThumbnails = ArrayList() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/FilterItem.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/FilterItem.kt new file mode 100644 index 000000000..ce826e57e --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/FilterItem.kt @@ -0,0 +1,6 @@ +package com.simplemobiletools.gallery.pro.models + +import android.graphics.Bitmap +import com.zomato.photofilters.imageprocessors.Filter + +data class FilterItem(var bitmap: Bitmap, val filter: Filter) diff --git a/app/src/main/res/drawable/ic_aspect_ratio_vector.xml b/app/src/main/res/drawable/ic_aspect_ratio_vector.xml new file mode 100644 index 000000000..d0ebe2814 --- /dev/null +++ b/app/src/main/res/drawable/ic_aspect_ratio_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_crop_rotate_vector.xml b/app/src/main/res/drawable/ic_crop_rotate_vector.xml new file mode 100644 index 000000000..681d300cd --- /dev/null +++ b/app/src/main/res/drawable/ic_crop_rotate_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_draw_vector.xml b/app/src/main/res/drawable/ic_draw_vector.xml new file mode 100644 index 000000000..1e296d845 --- /dev/null +++ b/app/src/main/res/drawable/ic_draw_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_photo_filter_vector.xml b/app/src/main/res/drawable/ic_photo_filter_vector.xml new file mode 100644 index 000000000..127f154be --- /dev/null +++ b/app/src/main/res/drawable/ic_photo_filter_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml index a4335621e..3dffbf1bf 100644 --- a/app/src/main/res/layout/activity_edit.xml +++ b/app/src/main/res/layout/activity_edit.xml @@ -1,38 +1,77 @@ - + + + app:cropInitialCropWindowPaddingRatio="0"/> + + + android:background="@drawable/gradient_background"/> + + + android:layout_above="@+id/bottom_editor_crop_rotate_actions" + android:visibility="gone"/> + + + android:layout_above="@+id/bottom_editor_primary_actions" + android:visibility="gone"/> + + diff --git a/app/src/main/res/layout/bottom_editor_actions_filter.xml b/app/src/main/res/layout/bottom_editor_actions_filter.xml new file mode 100644 index 000000000..734942343 --- /dev/null +++ b/app/src/main/res/layout/bottom_editor_actions_filter.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/app/src/main/res/layout/bottom_editor_crop_rotate_actions.xml b/app/src/main/res/layout/bottom_editor_crop_rotate_actions.xml index 37a93cbcb..93dcbb4e6 100644 --- a/app/src/main/res/layout/bottom_editor_crop_rotate_actions.xml +++ b/app/src/main/res/layout/bottom_editor_crop_rotate_actions.xml @@ -16,10 +16,38 @@ android:padding="@dimen/normal_margin" android:src="@drawable/ic_rotate_right_vector" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/bottom_flip_horizontally" + app:layout_constraintEnd_toStartOf="@+id/bottom_resize" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent"/> + + + + + app:layout_constraintStart_toEndOf="@+id/bottom_aspect_ratio" + app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toTopOf="parent"/> diff --git a/app/src/main/res/layout/bottom_editor_draw_actions.xml b/app/src/main/res/layout/bottom_editor_draw_actions.xml new file mode 100644 index 000000000..07fe2fb2c --- /dev/null +++ b/app/src/main/res/layout/bottom_editor_draw_actions.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/bottom_editor_primary_actions.xml b/app/src/main/res/layout/bottom_editor_primary_actions.xml new file mode 100644 index 000000000..ed600ed0e --- /dev/null +++ b/app/src/main/res/layout/bottom_editor_primary_actions.xml @@ -0,0 +1,47 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/editor_filter_item.xml b/app/src/main/res/layout/editor_filter_item.xml new file mode 100644 index 000000000..dd3913336 --- /dev/null +++ b/app/src/main/res/layout/editor_filter_item.xml @@ -0,0 +1,29 @@ + + + + + + + + diff --git a/app/src/main/res/menu/menu_editor.xml b/app/src/main/res/menu/menu_editor.xml index 534116c96..16a5f7806 100644 --- a/app/src/main/res/menu/menu_editor.xml +++ b/app/src/main/res/menu/menu_editor.xml @@ -6,6 +6,11 @@ android:icon="@drawable/ic_check_vector" android:title="@string/save_as" app:showAsAction="ifRoom"/> + 128dp 164dp 48dp + 76dp + 90dp + 98dp 180dp 48dp 86dp From f86c8423c8e0648ec7360732535a39dac02215b4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 6 Mar 2020 12:16:31 +0100 Subject: [PATCH 42/46] adding the standalone apps website at the app long description --- app/src/main/res/values-az/strings.xml | 3 +++ app/src/main/res/values-ca/strings.xml | 3 +++ app/src/main/res/values-cs/strings.xml | 3 +++ app/src/main/res/values-da/strings.xml | 3 +++ app/src/main/res/values-de/strings.xml | 3 +++ app/src/main/res/values-el/strings.xml | 3 +++ app/src/main/res/values-es/strings.xml | 3 +++ app/src/main/res/values-fi/strings.xml | 3 +++ app/src/main/res/values-fr/strings.xml | 3 +++ app/src/main/res/values-gl/strings.xml | 3 +++ app/src/main/res/values-hr/strings.xml | 3 +++ app/src/main/res/values-id/strings.xml | 3 +++ app/src/main/res/values-in/strings.xml | 3 +++ app/src/main/res/values-it/strings.xml | 3 +++ app/src/main/res/values-ko-rKR/strings.xml | 3 +++ app/src/main/res/values-lt/strings.xml | 3 +++ app/src/main/res/values-nb/strings.xml | 3 +++ app/src/main/res/values-nl/strings.xml | 3 +++ app/src/main/res/values-pl/strings.xml | 3 +++ app/src/main/res/values-pt/strings.xml | 3 +++ app/src/main/res/values-ru/strings.xml | 3 +++ app/src/main/res/values-sk/strings.xml | 3 +++ app/src/main/res/values-sl/strings.xml | 3 +++ app/src/main/res/values-sr/strings.xml | 3 +++ app/src/main/res/values-sv/strings.xml | 3 +++ app/src/main/res/values-tr/strings.xml | 3 +++ app/src/main/res/values-uk/strings.xml | 3 +++ app/src/main/res/values-zh-rCN/strings.xml | 3 +++ app/src/main/res/values-zh-rHK/strings.xml | 3 +++ app/src/main/res/values-zh-rTW/strings.xml | 3 +++ 30 files changed, 90 insertions(+) diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index c41c8e11a..09a2a7bdb 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 987704d3c..41d4e67f8 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -369,6 +369,9 @@ Consulteu el conjunt complet d’eines senzilles aquí: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4522db299..647f27e33 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -369,6 +369,9 @@ Prohlédněte si celou sadu Jednoduchých aplikací na: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 9801bf0cc..c969594f1 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -369,6 +369,9 @@ Se hele suiten af Simple Tools her: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index be0e13dd7..2bf6dfda0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -368,6 +368,9 @@ Schau dir die vollständige Serie der Schlichten Apps hier an: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 8fe8e0fdc..17fa81a9d 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -370,6 +370,9 @@ Δείτε την πλήρη σειρά των Simple Tools εδώ: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 95ab0d150..5084c938b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -369,6 +369,9 @@ Mira la suite completa de Simple Tools aquí: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 540401bb5..ee4727560 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6ca99186c..d17748eff 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -367,6 +367,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index ecaa292a8..fa5ae19d5 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index dbae448db..f27f92a1b 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index f36355c4d..314d1c2aa 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -369,6 +369,9 @@ Lihat semua aplikasi Simple Tools di sini: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index b1d27dc6d..a7d39d9ad 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -369,6 +369,9 @@ Lihat semua aplikasi Simple Tools di sini: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 28bf9af0c..bf92f199c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -369,6 +369,9 @@ Controlla le altre applicazioni qui: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index fd9ef80bd..866bded0e 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 4e9c76223..2384a7e76 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 9a3ff44f8..305493c05 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 565f86a2f..cb41c176c 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -369,6 +369,9 @@ Kijk ook eens naar de hele collectie apps van Simple Tools: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 0abecad8b..7bab7b237 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -367,6 +367,9 @@ Sprawdź cały zestaw naszych aplikacji: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Odwiedź nasz profil na Facebooku... https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index b2fd39f58..674a4617d 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -369,6 +369,9 @@ Consulte todas as aplicações Simple Tools aqui: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 5104d6cf2..75e11be30 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -369,6 +369,9 @@ Ознакомьтесь с полным набором инструментов серии Simple здесь: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 4260e7ae3..48acd5540 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -369,6 +369,9 @@ Pozrite si celú sadu aplikácií na: https://www.simplemobiletools.com + Vlastná stránka Jednoduchej Galérie Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 1fca876e6..05d0d4ef8 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 733440c7e..a300177ac 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -369,6 +369,9 @@ Погледајте цео пакет Simple Tools овде: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Фејсбук: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 0e5105e6d..11ba26fbb 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -369,6 +369,9 @@ Check out the full suite of Simple Tools here: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 0c7e3b224..51b91eace 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -369,6 +369,9 @@ Tüm Basit Araçlar paketini buradan inceleyin: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index cc4b8bddc..857801d58 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -369,6 +369,9 @@ Перегляньте повний набір додатків Simple Tools тут: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 44295142b..edc71fd10 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -367,6 +367,9 @@ 查看简约系列的所有应用: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index e06824395..665112cfb 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -369,6 +369,9 @@ 於此查看簡易工具系列全套: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 4ad029b49..a4d7239bd 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -369,6 +369,9 @@ 於此查看簡易工具系列全套: https://www.simplemobiletools.com + Standalone website of Simple Gallery Pro: + https://www.simplemobiletools.com/gallery + Facebook: https://www.facebook.com/simplemobiletools From a1cf3f04e6c636885b29730226a79db1049f7317 Mon Sep 17 00:00:00 2001 From: spkprs Date: Fri, 6 Mar 2020 14:52:59 +0300 Subject: [PATCH 43/46] Update strings.xml --- app/src/main/res/values-el/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 17fa81a9d..b90b37cfd 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -367,10 +367,10 @@ ΠΡΟΣΤΑΣΙΑ ΚΑΙ ΑΠΟΚΡΥΨΗ ΑΡΧΕΙΩΝ ΦΩΤΟ ΚΑΙ ΒΙΝΤΕΟ Χρησιμοποιώντας κωδικό, μοτίβο ή τον σαρωτή δακτυλικών αποτυπωμάτων της συσκευής σας, μπορείτε να προστατεύσετε και να αποκρύψετε φωτογραφίες, βίντεο ή ολόκληρα άλμπουμ. Μπορείτε να προστατεύσετε την ίδια την εφαρμογή ή να κλειδώσετε συγκεκριμένες λειτουργίες της. Για παράδειγμα, δεν μπορείτε να διαγράψετε ένα αρχείο χωρίς χρήση των δακτυλικών αποτυπωμάτων, συμβάλλοντας στην προστασία των αρχείων σας από τυχαία διαγραφή. - Δείτε την πλήρη σειρά των Simple Tools εδώ: + Δείτε την πλήρη σειρά των Απλών Εργαλείων εδώ: https://www.simplemobiletools.com - Standalone website of Simple Gallery Pro: + Αποκλειστική ιστοσελίδα της Απλή Συλλογή Pro: https://www.simplemobiletools.com/gallery Facebook: From 1f836dc96f82060a279481658ddad61ce8748661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Fri, 6 Mar 2020 13:10:27 +0100 Subject: [PATCH 44/46] 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 41d4e67f8..76bc342c6 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -369,7 +369,7 @@ Consulteu el conjunt complet d’eines senzilles aquí: https://www.simplemobiletools.com - Standalone website of Simple Gallery Pro: + Lloc web de Simple Gallery Pro: https://www.simplemobiletools.com/gallery Facebook: From bcbea4c345d0674b178e6f7cf2b330493ec97c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Fri, 6 Mar 2020 13:11:09 +0100 Subject: [PATCH 45/46] 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 5084c938b..e71a156ae 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -369,7 +369,7 @@ Mira la suite completa de Simple Tools aquí: https://www.simplemobiletools.com - Standalone website of Simple Gallery Pro: + Sitio web de Simple Gallery Pro: https://www.simplemobiletools.com/gallery Facebook: From 9ed99188d4268dc08978dea07d42b1bbcfc35bea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20F=C4=B1r=C4=B1nc=C4=B1?= Date: Fri, 6 Mar 2020 19:47:20 +0300 Subject: [PATCH 46/46] Update strings.xml --- app/src/main/res/values-tr/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 51b91eace..2aff9f791 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -122,8 +122,8 @@ Slayt gösterisini tekrarla Animasyon Hiçbiri - Fade - Slide + Karart + Kaydır Slayt gösterisi sona erdi Slayt gösterisi için medya bulunamadı @@ -369,7 +369,7 @@ Tüm Basit Araçlar paketini buradan inceleyin: https://www.simplemobiletools.com - Standalone website of Simple Gallery Pro: + Basit Galeri Pro'nun bağımsız web sitesi: https://www.simplemobiletools.com/gallery Facebook: