From 9e04f8a22bbf56169049396c6f63dce13a32d294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Tue, 9 Jul 2019 21:49:56 +0200 Subject: [PATCH 01/98] 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 bf9787e1d..23d4c570f 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -33,7 +33,7 @@ Data fixada correctament 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! - Switch to file search across all visible folders + Canvia a la cerca de fitxers a totes les carpetes visibles Filtre d’arxius From e9755a24d204e4b66f36af5fc42c83b684ab04fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Tue, 9 Jul 2019 21:51:51 +0200 Subject: [PATCH 02/98] 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 5497765f9..5ff43ba32 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -33,7 +33,7 @@ Fecha fijada correctamente Comparte una versión redimensionada Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks! - Switch to file search across all visible folders + Cambiar a la búsqueda de archivos en todas las carpetas visibles Filtro de medios From dfcecb31bf0634fc61c6e7acc112671147d06f15 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 9 Jul 2019 21:54:53 +0200 Subject: [PATCH 03/98] reactive the previous way of searching folders --- app/src/main/AndroidManifest.xml | 8 ++++ .../gallery/pro/activities/MainActivity.kt | 47 ++++++++++++++++++- app/src/main/res/menu/menu_main.xml | 3 +- 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 25f4250ff..a95a3ba3b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,6 +36,14 @@ android:name=".activities.MainActivity" android:resizeableActivity="true"> + + + + + + 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 fb3de0bde..5fff99950 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 @@ -1,7 +1,9 @@ package com.simplemobiletools.gallery.pro.activities import android.app.Activity +import android.app.SearchManager import android.content.ClipData +import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle @@ -12,6 +14,8 @@ import android.view.MenuItem import android.view.ViewGroup import android.widget.FrameLayout import android.widget.Toast +import androidx.appcompat.widget.SearchView +import androidx.core.view.MenuItemCompat import androidx.recyclerview.widget.RecyclerView import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog @@ -61,6 +65,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { private var mIsPasswordProtectionPending = false private var mWasProtectionHandled = false private var mShouldStopFetching = false + private var mIsSearchOpen = false private var mLatestMediaId = 0L private var mLatestMediaDateId = 0L private var mCurrentPathPrefix = "" // used at "Group direct subfolders" for navigation @@ -68,6 +73,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { private var mLastMediaHandler = Handler() private var mTempShowHiddenHandler = Handler() private var mZoomListener: MyRecyclerView.MyZoomListener? = null + private var mSearchMenuItem: MenuItem? = null private var mDirs = ArrayList() private var mStoredAnimateGifs = true @@ -218,6 +224,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { override fun onStop() { super.onStop() + mSearchMenuItem?.collapseActionView() + if (config.temporarilyShowHidden || config.tempSkipDeleteConfirmation) { mTempShowHiddenHandler.postDelayed({ config.temporarilyShowHidden = false @@ -268,6 +276,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { findItem(R.id.reduce_column_count).isVisible = config.viewTypeFolders == VIEW_TYPE_GRID && config.dirColumnCnt > 1 findItem(R.id.hide_the_recycle_bin).isVisible = useBin && config.showRecycleBinAtFolders findItem(R.id.show_the_recycle_bin).isVisible = useBin && !config.showRecycleBinAtFolders + setupSearch(this) } } @@ -279,7 +288,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.search -> launchSearchActivity() R.id.sort -> showSortingDialog() R.id.filter -> showFilterMediaDialog() R.id.open_camera -> launchCamera() @@ -323,6 +331,43 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } } + private fun setupSearch(menu: Menu) { + val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager + mSearchMenuItem = menu.findItem(R.id.search) + (mSearchMenuItem?.actionView as? SearchView)?.apply { + setSearchableInfo(searchManager.getSearchableInfo(componentName)) + isSubmitButtonEnabled = false + setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String) = false + + override fun onQueryTextChange(newText: String): Boolean { + if (mIsSearchOpen) { + setupAdapter(mDirs, newText) + } + return true + } + }) + } + + MenuItemCompat.setOnActionExpandListener(mSearchMenuItem, object : MenuItemCompat.OnActionExpandListener { + override fun onMenuItemActionExpand(item: MenuItem?): Boolean { + mIsSearchOpen = true + directories_refresh_layout.isEnabled = false + return true + } + + // this triggers on device rotation too, avoid doing anything + override fun onMenuItemActionCollapse(item: MenuItem?): Boolean { + if (mIsSearchOpen) { + mIsSearchOpen = false + directories_refresh_layout.isEnabled = config.enablePullToRefresh + setupAdapter(mDirs, "") + } + return true + } + }) + } + private fun startNewPhotoFetcher() { if (isNougatPlus()) { val photoFetcher = NewPhotoFetcher() diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 0d9b32e12..a7a56c606 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -5,7 +5,8 @@ android:id="@+id/search" android:icon="@drawable/ic_search" android:title="@string/search" - app:showAsAction="always"/> + app:actionViewClass="androidx.appcompat.widget.SearchView" + app:showAsAction="collapseActionView|always"/> Date: Tue, 9 Jul 2019 22:05:39 +0200 Subject: [PATCH 04/98] show a button at folder searching for switching to file searching --- .../gallery/pro/activities/MainActivity.kt | 8 ++++++++ app/src/main/res/layout/activity_main.xml | 13 +++++++++++++ 2 files changed, 21 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 5fff99950..ade0db791 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 @@ -151,6 +151,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { updateWidgets() registerFileUpdateListener() + + directories_switch_searching.setOnClickListener { + launchSearchActivity() + } } override fun onStart() { @@ -198,6 +202,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { invalidateOptionsMenu() directories_empty_text_label.setTextColor(config.textColor) directories_empty_text.setTextColor(getAdjustedPrimaryColor()) + directories_switch_searching.setTextColor(getAdjustedPrimaryColor()) + directories_switch_searching.underlineText() if (mIsPasswordProtectionPending && !mWasProtectionHandled) { handleAppPasswordProtection { @@ -351,6 +357,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { MenuItemCompat.setOnActionExpandListener(mSearchMenuItem, object : MenuItemCompat.OnActionExpandListener { override fun onMenuItemActionExpand(item: MenuItem?): Boolean { + directories_switch_searching.beVisible() mIsSearchOpen = true directories_refresh_layout.isEnabled = false return true @@ -359,6 +366,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { // this triggers on device rotation too, avoid doing anything override fun onMenuItemActionCollapse(item: MenuItem?): Boolean { if (mIsSearchOpen) { + directories_switch_searching.beGone() mIsSearchOpen = false directories_refresh_layout.isEnabled = config.enablePullToRefresh setupAdapter(mDirs, "") diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index bbf53b09e..6b728133f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,10 +11,21 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + @@ -47,6 +59,7 @@ android:id="@+id/directories_vertical_fastscroller" android:layout_width="wrap_content" android:layout_height="match_parent" + android:layout_below="@+id/directories_switch_searching" android:layout_alignParentEnd="true" android:paddingStart="@dimen/normal_margin" android:visibility="gone"> From 7f0d5f9300c5656694a366211cc401729b415a7a Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 9 Jul 2019 22:25:18 +0200 Subject: [PATCH 05/98] show a placeholder at using Search whenever appropriate --- .../gallery/pro/activities/MainActivity.kt | 13 +++++++++---- app/src/main/res/layout/activity_main.xml | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index ade0db791..7eb21535f 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 @@ -1018,7 +1018,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { directories_empty_text_label.beVisibleIf(dirs.isEmpty() && mLoadedInitialPhotos) directories_empty_text.beVisibleIf(dirs.isEmpty() && mLoadedInitialPhotos) - if (dirs.isEmpty() && config.filterMedia == TYPE_DEFAULT_FILTER) { + if (mIsSearchOpen) { + directories_empty_text_label.text = getString(R.string.no_items_found) + directories_empty_text.beGone() + } else if (dirs.isEmpty() && config.filterMedia == TYPE_DEFAULT_FILTER) { directories_empty_text_label.text = getString(R.string.no_media_add_included) directories_empty_text.text = getString(R.string.add_folder) @@ -1070,10 +1073,12 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } measureRecyclerViewContent(dirsToShow) } else { - if (textToSearch.isNotEmpty()) { - dirsToShow = dirsToShow.filter { it.name.contains(textToSearch, true) }.sortedBy { !it.name.startsWith(textToSearch, true) }.toMutableList() as ArrayList - } runOnUiThread { + if (textToSearch.isNotEmpty()) { + dirsToShow = dirsToShow.filter { it.name.contains(textToSearch, true) }.sortedBy { !it.name.startsWith(textToSearch, true) }.toMutableList() as ArrayList + } + checkPlaceholderVisibility(dirsToShow) + (directories_grid.adapter as? DirectoryAdapter)?.updateDirs(dirsToShow) measureRecyclerViewContent(dirsToShow) } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 6b728133f..1d2d25731 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -15,7 +15,7 @@ android:id="@+id/directories_switch_searching" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/selectableItemBackgroundBorderless" + android:background="?attr/selectableItemBackground" android:gravity="center" android:padding="@dimen/activity_margin" android:text="@string/switch_to_file_search" From 924b72d6ff0ca7c5f3879bf09eeecb27d21ab807 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 9 Jul 2019 22:39:51 +0200 Subject: [PATCH 06/98] add a menu button for toggling filename visibility at search activity --- .../gallery/pro/activities/SearchActivity.kt | 13 +++++++++++++ app/src/main/res/menu/menu_search.xml | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt index 33901c1d4..e87755245 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt @@ -54,6 +54,14 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener { return true } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.toggle_filename -> toggleFilenameVisibility() + else -> return super.onOptionsItemSelected(item) + } + return true + } + private fun setupSearch(menu: Menu) { val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager mSearchMenuItem = menu.findItem(R.id.search) @@ -135,6 +143,11 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener { private fun getMediaAdapter() = media_grid.adapter as? MediaAdapter + private fun toggleFilenameVisibility() { + config.displayFileNames = !config.displayFileNames + getMediaAdapter()?.updateDisplayFilenames(config.displayFileNames) + } + private fun itemClicked(path: String) { val isVideo = path.isVideoFast() if (isVideo) { diff --git a/app/src/main/res/menu/menu_search.xml b/app/src/main/res/menu/menu_search.xml index ac2a96bcb..80fe3f2f4 100644 --- a/app/src/main/res/menu/menu_search.xml +++ b/app/src/main/res/menu/menu_search.xml @@ -7,4 +7,9 @@ android:title="@string/search" app:actionViewClass="androidx.appcompat.widget.SearchView" app:showAsAction="collapseActionView|always"/> + From 2749525183f53c45091469edd83039d3446c4045 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 9 Jul 2019 23:13:21 +0200 Subject: [PATCH 07/98] Dutch --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index b6c57fe11..639c7e3d6 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -33,7 +33,7 @@ Datums zijn gecorrigeerd Verkleinde versie delen Het lijkt erop dat dit een upgrade is vanaf de oude gratis versie. Deze oude versie, met de knop \"Upgraden naar Pro\" bovenaan de instellingen, kan nu gedeïnstalleerd worden.\n\nDe items in de prullenbak zullen dan wel worden verwijderd, favorieten en instellingen zullen ook opnieuw moeten worden geconfigureerd. - Switch to file search across all visible folders + Zoeken in alle zichtbare mappen Media filteren From e0a4be9c47012d71bc42b53a60ca37a10d12c4e1 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 10 Jul 2019 10:00:49 +0200 Subject: [PATCH 08/98] fixing a typo at a string --- app/src/main/res/values-az/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 1ac6d0f62..491abfbca 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -160,7 +160,7 @@ System setting Device rotation Aspect ratio - Black background and at fullscreen media + Black background at fullscreen media Scroll thumbnails horizontally Automatically hide system UI at fullscreen media Delete empty folders after deleting their content diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8cc54d748..2c2730859 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -160,7 +160,7 @@ System setting Device rotation Aspect ratio - Black background and at fullscreen media + Black background at fullscreen media Scroll thumbnails horizontally Automatically hide system UI at fullscreen media Delete empty folders after deleting their content From e02ae0d0ce93db4bd9d9e673a3b022b9ed6df65e Mon Sep 17 00:00:00 2001 From: fricyo <30796677+fricyo@users.noreply.github.com> Date: Sun, 14 Jul 2019 21:55:13 +0800 Subject: [PATCH 09/98] Update Translation --- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index ec7809e5e..57f9e0fa9 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -33,7 +33,7 @@ 日期修復成功 分享調整大小的版本 嘿\n\n你似乎從舊版免費應用程式升級了。現在你能解除安裝舊版了,在應用程式設定的頂端有個\'升級至專業版\'按鈕。\n\n將只有回收桶項目會被刪除,我的最愛項目會被解除標記,以及也會重置你的應用程式設定。\n\n感謝! - Switch to file search across all visible folders + 檔案搜尋目標切換成全部的可見資料夾 篩選媒體檔案 From cf23433e0e7297403fa444588ada3e03234dd080 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 15 Jul 2019 00:16:57 +0200 Subject: [PATCH 10/98] updating commons to 5.15.1 --- app/build.gradle | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9b4abdd3b..130ad6100 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.14.18' + implementation 'com.simplemobiletools:commons:5.15.1' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/build.gradle b/build.gradle index e69b8b26f..cfaef4aaf 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.4.1' + classpath 'com.android.tools.build:gradle:3.4.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong From 51723566ab3d3bad97780f39cfc276034494f193 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 15 Jul 2019 00:24:31 +0200 Subject: [PATCH 11/98] update version to 6.8.3 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 130ad6100..3218d7d6f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 256 - versionName "6.8.2" + versionCode 257 + versionName "6.8.3" multiDexEnabled true setProperty("archivesBaseName", "gallery") } From 00cf552e14068a93003a362eaf67982b315f89f8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 15 Jul 2019 00:24:47 +0200 Subject: [PATCH 12/98] updating changelog --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 522324963..7ffc6bd9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ Changelog ========== +Version 6.8.3 *(2019-07-14)* +---------------------------- + + * Added support for HEIC/HEIF files + * Reverted back to the previous way of searching folders, with a button for searching all files instead + * Added some dark theme improvements + * Show some location related values at the Properties window, or at the Extended details + * Misc other stability, performance and translation improvements + Version 6.8.2 *(2019-07-02)* ---------------------------- From 128de2665b38f8551f5ca76d9bc81cbcd66c91d0 Mon Sep 17 00:00:00 2001 From: sawka6630 Date: Tue, 16 Jul 2019 20:27:00 +0300 Subject: [PATCH 13/98] Update Ukrainian translation --- app/src/main/res/values-uk/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 83bed8198..fb562ffb0 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -33,7 +33,7 @@ Дати успішно виправлені Поділитися зображенням іншого розміру Агов,\n\nздається, ви оновились зі старого безкоштовного додатка. Тепер ви можете видалити стару версію, у якій є кнопка \"Перейти на Pro\" вгорі налаштувань додатка.\n\nВи втратите лише елементи з Кошика, позначки улюблених елементів, а також потрібно буде скинути ваші налаштування додатка.\n\nДякую! - Switch to file search across all visible folders + Перейти до пошуку файла в усіх видимих теках Фільтр мультимедійних файлів From 3c9c974b71c84432df5d87328ebd07e50b45d80a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20F=C4=B1r=C4=B1nc=C4=B1?= Date: Wed, 17 Jul 2019 23:00:26 +0300 Subject: [PATCH 14/98] 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 3a67952c4..a9833c98b 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -32,8 +32,8 @@ Düzeltiliyor… Tarihler başarıyla düzeltildi Yeniden boyutlandırılmış sürümü paylaş - 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 + 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ç Medyayı filtrele @@ -239,7 +239,7 @@ Basit Galeri Pro, özelleştirilebilir bir çevrimdışı galeridir. Fotoğraflarınızı düzenleyin ve organize edin, geri dönüşüm kutusuyla silinen dosyaları kurtarın, dosyaları koruyun ve gizleyin ve RAW, SVG ve çok daha fazlası dahil olmak üzere çok çeşitli fotoğraf ve video formatlarını görüntüleyin. - Uygulamaya hiçbir reklam ve gereksiz izinler içermez. Uygulama internet erişimi gerektirmediğinden gizliliğiniz de korunur. + Uygulama hiçbir reklam ve gereksiz izinler içermez. Uygulama internet erişimi gerektirmediğinden gizliliğiniz de korunur. ------------------------------------------------- BASİT GALERİ PRO – ÖZELLİKLER From 7bba51959318135591b4b3a589ca8c3f55b5a0fa Mon Sep 17 00:00:00 2001 From: 10cents Date: Sat, 20 Jul 2019 14:43:38 +0000 Subject: [PATCH 15/98] switch_to_file_search --- app/src/main/res/values-da/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 2682c13f4..8f5cab707 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -33,7 +33,7 @@ Datoer fikset med succes Del en skaleret version Hej\n\nDet ser ud til at du har opgraderet fra den gamle, gratis app. Du kan afinstallere den gamle version, som har en \"Opgrader til Pro\"-knap i toppen af appens indstillinger.\n\nDu vil blot få papirkurvens elementer slettet, favoritter vil blive umarkeret og du vil også skulle genopsætte din apps indstillinger.\n\nTak! - Switch to file search across all visible folders + Skift til filsøgning på tværs af synlige mapper Filtrer medier From 351218c8ae3bbca509b7b48bf442cce258600ded Mon Sep 17 00:00:00 2001 From: siswonugroho <33504481+siswonugroho@users.noreply.github.com> Date: Sun, 21 Jul 2019 14:29:10 +0700 Subject: [PATCH 16/98] Update indonesian strings.xml Translate some untranslated words. --- app/src/main/res/values-id/strings.xml | 120 ++++++++++++------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 04851828f..ca635c575 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -32,8 +32,8 @@ Memperbaiki… Tanggal berhasil diperbaiki Bagikan versi yang diubah ukurannya - Hai,\n\nsepertinya anda memperbarui dari aplikasi gratis versi lama. Anda sekarang bisa mencopot versi yang lama, yang ada tombol \'Tingkatkan ke Pro\' di bagian atas pengaturan aplikasi.\n\nHanya item Keranjang sampah yang akan dihapus, item favorit menjadi tak bertanda dan anda juga harus menyetel ulang pengaturan aplikasi.\n\nThanks! - Switch to file search across all visible folders + Hai,\n\nsepertinya anda memperbarui dari aplikasi gratis versi lama. Anda sekarang bisa mencopot versi yang lama, yang ada tombol \'Tingkatkan ke Pro\' di bagian atas pengaturan aplikasi.\n\nHanya item Keranjang sampah yang akan dihapus, item favorit menjadi tak bertanda dan anda juga harus menyetel ulang pengaturan aplikasi.\n\nTerima kasih! + Cari file di semua folder yang terlihat Filter media @@ -42,7 +42,7 @@ GIF Gambar RAW SVG - Tidak ada berkas media ditemukan dari filter ini. + Tidak ada file media ditemukan dari filter ini. Ubah filter @@ -75,14 +75,14 @@ Harap masukkan resolusi dengan benar - Penyunting + Editor Simpan Rotasi Jalur Jalur gambar tidak valid - Gagal menyunting gambar - Sunting dengan: - Tidak ada aplikasi penyunting gambar + Gagal mengedit gambar + Edit dengan: + Tidak ada aplikasi pengedit gambar Lokasi berkas tidak diketahui Tidak bisa mengganti berkas sumber Putar ke kiri @@ -116,10 +116,10 @@ Urutan acak Mundur Slideshow tanpa henti - Animation - None - Fade - Slide + Animasi + Tidak ada + Memudar + Bergeser Slideshow berakhir Tidak ditemukan media untuk slideshow @@ -134,14 +134,14 @@ Jangan kelompokkan berkas Folder Terakhir diubah - Last modified (daily) - Last modified (monthly) + Terakhir diubah (harian) + Terakhir diubah (bulanan) Tanggal diambil - Date taken (daily) - Date taken (monthly) + Tanggal diambil (harian) + Tanggal diambil (bulanan) Jenis berkas Ekstensi - Harap dicatat bahwa mengelompokkan dan mengurutkan adalah 2 ruas yang berbeda + Harap diingat bahwa mengelompokkan dan mengurutkan adalah 2 menu yang berbeda Folder yang ditampilkan pada widget: @@ -162,27 +162,27 @@ Aspek rasio Background dan status bar hitam saat layar penuh Gulir thumbnail secara horizontal - Otomatis sembunyikan sistem UI saat layar penuh + Otomatis sembunyikan status bar saat layar penuh Hapus folder kosong setelah menghapus isinya - Izinkan mengontrol kecerahan foto dengan gerakan vertikal - Izinkan mengontrol kecerahan dan volume video dengan gerakan vertikal + Kontrol kecerahan foto dengan gerakan vertikal + Kontrol kecerahan dan volume video dengan gerakan vertikal Tampilkan jumlah folder media di tampilan utama Tampilkan detail tambahan saat layar penuh Atur detail tambahan - Izinkan zoom satu jari di layar penuh - Izinkan mengganti media dengan mengklik sisi layar - Izinkan zoom gambar lebih dalam + Zoom satu jari di layar penuh + Ganti media dengan mengklik sisi layar + Zoom gambar lebih dalam Sembunyikan detail tambahan ketika status bar disembunyikan Tampilkan beberapa tombol tindakan dibawah layar Tampilkan Sampah di layar folder Zoom gambar mendalam Tampilkan gambar dalam kualitas tertinggi Tampilkan Sampah sebagai item terakhir di layar utama - Izinkan keluar dari layar penuh dengan menggeser kebawah - Izinkan pembesaran 1:1 dengan dua kali ketuk + Keluar dari layar penuh dengan menggeser kebawah + Zoom 1:1 (persegi) dengan dua kali ketuk Selalu buka video pada layar terpisah dengan gestur horizontal baru Tampilkan notch jika tersedia - Izinkan memutar gambar dengan gestur + Rotasi gambar dengan gestur Prioritas pemuatan berkas Kecepatan Kompromi @@ -208,7 +208,7 @@ Bagaimana agar sebuah album selalu muncul paling atas di daftar? Anda bisa menekan lama album tersebut dan pilih ikon Pin di menu tindakan, itu akan menaruhnya di atas daftar. Anda juga bisa menyematkan beberapa folder, item yang di-pin akan diurutkan berdasarkan metode urutan default. Bagaimana cara mempercepat laju video? - You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. + Anda dapat menggeser secara horizontal dalam pemutar video, atau klik antara kedua teks durasi dekat bar laju durasi. Itu akan memajukan atau mengundurkan durasi video. Apa perbedaan antara menyembunyikan dan mengecualikan folder? Mengecualikan tidak akan menampilkan folder di Simple Gallery, sedangkan Sembunyikan bekerja sesuai aturan sistem dan akan menyembunyikan folder juga dari aplikasi galeri yang lain. Cara kerjanya dengan membuat berkas \".nomedia\" kosong pada folder yang diinginkan, yang bisa anda hapus juga dengan aplikasi pengelola berkas. Mengapa folder dengan gambar album musik atau stiker muncul? @@ -233,54 +233,54 @@ - Simple Gallery Pro: Pengelola & Penyunting Foto + Simple Gallery Pro: Pengelola & Pengedit Foto - Galeri luring tanpa iklan. Kelola, sunting, pulihkan dan lindungi foto & video + Galeri offline tanpa iklan. Kelola, sunting, pulihkan dan lindungi foto & video - Simple Gallery Pro adalah aplikasi galeri luring yang sangat mudah diubahsuai. Mengelola & menyunting foto anda, memulihkan berkas yang terhapus dari keranjang sampah, melindungi & menyembunyikan berkas, dan menampilkan banyak format foto & video, diantaranya RAW, SVG dan masih banyak lainnya. + Simple Gallery Pro adalah aplikasi galeri offline yang sangat mudah disesuaikan. Mengelola & menyunting foto anda, memulihkan berkas yang terhapus dari keranjang sampah, melindungi & menyembunyikan berkas, dan menampilkan banyak format foto & video, diantaranya RAW, SVG dan masih banyak lainnya. Aplikasi sama sekali tidak berisi iklan dan tidak membutuhkan perizinan yang tidak perlu. Dan karena aplikasi juga tidak membutuhkan akses internet, privasi anda terlindungi. ------------------------------------------------- - SIMPLE GALLERY PRO – FEATURES + SIMPLE GALLERY PRO – FITUR ------------------------------------------------- - • Offline gallery with no ads or popups - • Simple gallery photo editor – crop, rotate, resize, draw, filters & more - • No internet access needed, giving you more privacy and security - • No unnecessary permissions required - • Quickly search images, videos & files - • Open & view many different photo and video types (RAW, SVG, panoramic etc) - • A variety of intuitive gestures to easily edit & organize files - • Lots of ways to filter, group & sort files - • Customize the appearance of Simple Gallery Pro - • Available in 32 languages - • Mark files as favorites for quick access - • Protect your photos & videos with a pattern, pin or fingerprint - • Use pin, pattern & fingerprint to protect the app launch or specific functions too - • Recover deleted photos & videos from the recycle bin - • Toggle visibility of files to hide photos & videos - • Create a customizable slideshow of your files - • View detailed information of your files (resolution, EXIF values etc) - • Simple Gallery Pro is open source - … and much much more! + • Galeri offline tanpa iklan + • Editor foto bawaan – crop, rotasi, ubah ukuran, gambar, filter, dan lainnya + • Tidak perlu akses internet, sehingga privasi dan keamanan terjaga + • Tidak ada perizinan yang tidak perlu + • Dengan cepat mencari gambar, video & file + • Buka & lihat berbagai jenis foto dan video (RAW, SVG, panorama dll) + • Beragam gestur intuitif untuk mengedit & mengatur file dengan mudah + • Berbagai cara untuk memfilter, kelompokkan & urutkan file + • Sesuaikan penampilan Simple Gallery Pro + • Tersedia dalam 32 bahasa + • Favoritkan file untuk akses cepat + • Lindungi foto & video dengan pola, pin atau sidik jari + • Gunakan juga pin, pola & sidik jari untuk mengunci aplikasi atau fungsi tertentu + • Pulihkan foto & video yang terhapus dari Keranjang Sampah + • Ubah keterlihatan file untuk menyembunyikan foto & video + • Buat slideshow file yang bisa disesuaikan + • Lihat info mendetail file Anda (resolusi, EXIF, dll) + • Simple Gallery Pro bersifat open source + … dan lebih banyak lagi! - PHOTO GALLERY EDITOR - Simple Gallery Pro makes it easy to edit your pictures on the fly. Crop, flip, rotate and resize your pictures. If you’re feeling a little more creative you can add filters and draw on your pictures! + EDITOR GALERI FOTO + Simple Gallery Pro memudahkan dalam mengedit gambar dengan cepat. Crop, balik, rotasi dan ubah ukuran gambar. Jika Anda merasa agak kreatif, Anda bisa menambahkan filter atau menggambari foto Anda! - SUPPORT FOR MANY FILE TYPES - Unlike some other gallery viewers & photo organizers, Simple Gallery Pro supports a huge range of different file types including JPEG, PNG, MP4, MKV, RAW, SVG, Panoramic photos, Panoramic videos and many more. + MENDUKUNG BANYAK JENIS FILE + Tidak seperti galeri lainnya, Simple Gallery Pro mendukung beragam jenis file termasuk JPEG, PNG, MP4, MKV, RAW, SVG, foto dan video panorama dan banyak lagi. - HIGHLY CUSTOMIZABLE GALLERY MANAGER - From the UI to the function buttons on the bottom toolbar, Simple Gallery Pro is highly customizable and works the way you want it to. No other gallery manager has this kind of flexibility! Thanks to being open source, we’re also available in 32 languages! + BANYAK KUSTOMISASI + Mulai dari UI hingga tombol di toolbar bawah, Simple Gallery Pro bisa dikustomisasi sesuai kebutuhan Anda. Tidak ada aplikasi galeri yang sefleksibel ini! Berkat sifatnya yang open source, kami juga tersedia dalam 32 bahasa! - RECOVER DELETED PHOTOS & VIDEOS - Accidentally deleted a precious photo or video? Don’t worry! Simple Gallery Pro features a handy recycle bin where you can recover deleted photos & videos easily. + PULIHKAN FOTO & VIDEO YANG TERHAPUS + Foto dan video tidak sengaja terhapus? Tenang! Simple Gallery Pro punya fitur Keranjang Sampah dimana Anda bisa memulihkannya dengan mudah. - PROTECT & HIDE PHOTOS, VIDEOS & FILES - Using pin, pattern or your device’s fingerprint scanner you can protect and hide photos, videos & entire albums. You can protect the app itself or place locks on specific functions of the app. For example, you can’t delete a file without a fingerprint scan, helping to protect your files from accidental deletion. + LINDUNGI & SEMBUNYIKAN FOTO, VIDEO & FILE + Gunakan pin, pola atau sensor sidik jari untuk menyembunyikan foto, video & seluruh album. Anda juga bisa mengunci aplikasi ini atau beberapa fungsi tertentu. Contoh, file tidak bisa dihapus sebelum memindai sidik jari, sehingga mencegah file Anda terhapus secara tidak sengaja. - Check out the full suite of Simple Tools here: + Lihat aplikasi Simple Tools lainnya disini: https://www.simplemobiletools.com Facebook: From 004224acc943c0b3cf890b2912c6f9ca9e9dfac7 Mon Sep 17 00:00:00 2001 From: en2sv Date: Sun, 21 Jul 2019 20:24:36 +0200 Subject: [PATCH 17/98] Update Swedish translation --- app/src/main/res/values-sv/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 146bcc54d..7c12d8a8d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -33,7 +33,7 @@ Datumen har korrigerats Dela en version med ändrad storlek 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 + Växla till filsökning i alla synliga mappar Filtrera media @@ -64,7 +64,7 @@ Hantera inkluderade mappar Lägg till mapp Om du har vissa mappar som innehåller media men som inte känns igen av appen, kan du lägga till dem manuellt här. - No media files have been found. You can solve it by adding the folders containing media files manually. + Inga mediefiler hittades. Du kan lägga till de mappar som innehåller mediefiler manuellt. Ändra storlek @@ -160,7 +160,7 @@ Systeminställning Enhetens rotation Bildförhållande - Svart bakgrund och statusfält när media visas i helskärmsläge + Svart bakgrund när media visas i helskärmsläge Rulla horisontellt genom miniatyrer Dölj systemanvändargränssnittet automatiskt när media visas i helskärmsläge Ta bort tomma mappar när deras innehåll tas bort @@ -178,9 +178,9 @@ Djupt zoombara bilder Visa bilder i högsta möjliga kvalitet Visa Papperskorgen som det sista objektet i huvudvyn - Allow closing the fullscreen view with a down gesture - Allow 1:1 zooming in with two double taps - Always open videos on a separate screen with new horizontal gestures + Tillåt avslutning av helskärmsläget med en nedåtgest + Tillåt 1:1-zoomning med två dubbeltryck + Öppna alltid videor i en separat vy med nya horisontella gester Show a notch if available Allow rotating images with gestures File loading priority From cde70c40f67309baeb6737f2e3ab7e801adc407f Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 22 Jul 2019 11:47:59 +0200 Subject: [PATCH 18/98] ignore saved video positions at export/import --- .../gallery/pro/activities/SettingsActivity.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt index c1e278770..2e9cc0a84 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt @@ -615,9 +615,6 @@ class SettingsActivity : SimpleActivity() { put(FILE_LOADING_PRIORITY, config.fileLoadingPriority) put(AUTOPLAY_VIDEOS, config.autoplayVideos) put(REMEMBER_LAST_VIDEO_POSITION, config.rememberLastVideoPosition) - config.getAllLastVideoPositions().forEach { - put(it.key, it.value.toString()) - } put(LOOP_VIDEOS, config.loopVideos) put(OPEN_VIDEOS_ON_SEPARATE_SCREEN, config.openVideosOnSeparateScreen) put(ALLOW_VIDEO_GESTURES, config.allowVideoGestures) @@ -800,10 +797,6 @@ class SettingsActivity : SimpleActivity() { LAST_CONFLICT_RESOLUTION -> config.lastConflictResolution = value.toInt() LAST_CONFLICT_APPLY_TO_ALL -> config.lastConflictApplyToAll = value.toBoolean() } - - if (key.startsWith(LAST_VIDEO_POSITION_PREFIX)) { - config.saveLastVideoPosition(key, value as Int) - } } toast(if (configValues.size > 0) R.string.settings_imported_successfully else R.string.no_entries_for_importing) From 5df1605fedfbdec06d0488789936a8ff5b4b629d Mon Sep 17 00:00:00 2001 From: spkprs Date: Mon, 22 Jul 2019 14:11:35 +0300 Subject: [PATCH 19/98] Update strings.xml --- app/src/main/res/values-el/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index edb16f124..3681fbaed 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -33,7 +33,7 @@ Η Ημερ. διορθώθηκε με επιτυχία Διαμοιρασμός έκδοσης με αλλαγμένο μέγεθος Γειά σας,\n\nΦαίνεται πως αναβαθμίσατε από την παλιά δωρεάν εφαρμογή. Τώρα θα πρέπει να απεγκαταστήσετε την παλιά έκδοση, απο το πλήκτρο \"Αναβάθμιση σε Pro\" στο επάνω των ρυθμίσεων της εφαρμογής.\n\nΘα πρέπει να διαγράψετε μόνο τα αντικείμενα του Κάδου, πρέπει να επαναφέρετε τα αγαπημένα στοιχεία που δεν έχουν επισημανθεί καθώς και τις ρυθμίσεις της εφαρμογής σας.\n\nΣας ευχαριστώ! - Switch to file search across all visible folders + Εναλλαγή αναζήτησης αρχείων σε όλους τους ορατούς φακέλους Φιλτράρισμα πολυμέσων From e18676d30cf982766c435c769306a11b970434a4 Mon Sep 17 00:00:00 2001 From: AlbatorV Date: Mon, 22 Jul 2019 21:27:47 +0200 Subject: [PATCH 20/98] Update strings.xml --- app/src/main/res/values-fr/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6303baf9c..d994dbf9a 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -33,7 +33,7 @@ Dates corrigées Partager une version redimensionnée 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 + Basculer vers la recherche de fichiers Filtrer les médias @@ -117,9 +117,9 @@ Défilement inverse Diaporama en boucle Animation - None - Fade - Slide + Aucune + Fondu + Glissement Diaporama terminé Aucun média trouvé pour le diaporama From fd0014cbe6c887b328459311ba340616e54b4bc7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 24 Jul 2019 14:35:11 +0200 Subject: [PATCH 21/98] make use of some new .nomedia checking extensions --- app/build.gradle | 2 +- .../gallery/pro/activities/MediaActivity.kt | 2 +- .../gallery/pro/adapters/DirectoryAdapter.kt | 6 +++--- .../gallery/pro/extensions/Activity.kt | 1 - .../gallery/pro/extensions/Context.kt | 4 ++-- .../gallery/pro/extensions/File.kt | 20 ------------------- .../gallery/pro/extensions/String.kt | 3 ++- .../gallery/pro/helpers/Constants.kt | 1 - 8 files changed, 9 insertions(+), 30 deletions(-) delete mode 100644 app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/File.kt diff --git a/app/build.gradle b/app/build.gradle index 3218d7d6f..ba123d85c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.1' + implementation 'com.simplemobiletools:commons:5.15.9' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index f79e0a1f5..16de5f6fb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -207,7 +207,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_media, menu) - val isFolderHidden = File(mPath).containsNoMedia() + val isFolderHidden = mPath.containsNoMedia() menu.apply { findItem(R.id.group).isVisible = !config.scrollHorizontally diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index cb1e7dba7..8acaf4412 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -145,8 +145,8 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList) { - menu.findItem(R.id.cab_hide).isVisible = selectedPaths.any { !File(it).doesThisOrParentHaveNoMedia() } - menu.findItem(R.id.cab_unhide).isVisible = selectedPaths.any { File(it).doesThisOrParentHaveNoMedia() } + menu.findItem(R.id.cab_hide).isVisible = selectedPaths.any { !it.doesThisOrParentHaveNoMedia() } + menu.findItem(R.id.cab_unhide).isVisible = selectedPaths.any { it.doesThisOrParentHaveNoMedia() } } private fun checkPinBtnVisibility(menu: Menu, selectedPaths: ArrayList) { @@ -308,7 +308,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList() val includedFolders = activity.config.includedFolders val newDirs = dirs.filterIndexed { index, directory -> - val removeDir = File(directory.path).doesThisOrParentHaveNoMedia() && !includedFolders.contains(directory.path) + val removeDir = directory.path.doesThisOrParentHaveNoMedia() && !includedFolders.contains(directory.path) if (removeDir) { affectedPositions.add(index) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt index 07615227b..446821787 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 @@ -30,7 +30,6 @@ import com.simplemobiletools.gallery.pro.BuildConfig import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.activities.SimpleActivity import com.simplemobiletools.gallery.pro.dialogs.PickDirectoryDialog -import com.simplemobiletools.gallery.pro.helpers.NOMEDIA import com.simplemobiletools.gallery.pro.helpers.RECYCLE_BIN import com.simplemobiletools.gallery.pro.interfaces.MediumDao import com.squareup.picasso.Picasso diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index a27f32b1e..577cd653e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -424,7 +424,7 @@ fun Context.storeDirectoryItems(items: ArrayList, directoryDao: Direc fun Context.checkAppendingHidden(path: String, hidden: String, includedFolders: MutableSet): String { val dirName = getFolderNameFromPath(path) - return if (File(path).doesThisOrParentHaveNoMedia() && !path.isThisOrParentIncluded(includedFolders)) { + return if (path.doesThisOrParentHaveNoMedia() && !path.isThisOrParentIncluded(includedFolders)) { "$dirName $hidden" } else { dirName @@ -587,7 +587,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: val hiddenString = resources.getString(R.string.hidden) filteredDirectories.forEach { - it.name = if (File(it.path).doesThisOrParentHaveNoMedia() && !it.path.isThisOrParentIncluded(includedPaths)) { + it.name = if (it.path.doesThisOrParentHaveNoMedia() && !it.path.isThisOrParentIncluded(includedPaths)) { "${it.name.removeSuffix(hiddenString).trim()} $hiddenString" } else { it.name diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/File.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/File.kt deleted file mode 100644 index 90b02aac1..000000000 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/File.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.simplemobiletools.gallery.pro.extensions - -import com.simplemobiletools.gallery.pro.helpers.NOMEDIA -import java.io.File - -fun File.containsNoMedia() = isDirectory && File(this, NOMEDIA).exists() - -fun File.doesThisOrParentHaveNoMedia(): Boolean { - var curFile = this - while (true) { - if (curFile.containsNoMedia()) { - return true - } - curFile = curFile.parentFile ?: break - if (curFile.absolutePath == "/") { - break - } - } - return false -} 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 17710e0e7..ac921defd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt @@ -1,7 +1,8 @@ package com.simplemobiletools.gallery.pro.extensions import android.media.MediaMetadataRetriever -import com.simplemobiletools.gallery.pro.helpers.NOMEDIA +import com.simplemobiletools.commons.extensions.doesThisOrParentHaveNoMedia +import com.simplemobiletools.commons.helpers.NOMEDIA import java.io.File import java.io.IOException 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 4b33ffecc..c7957b0bb 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 @@ -97,7 +97,6 @@ const val SLIDESHOW_ANIMATION_NONE = 0 const val SLIDESHOW_ANIMATION_SLIDE = 1 const val SLIDESHOW_ANIMATION_FADE = 2 -const val NOMEDIA = ".nomedia" const val FAVORITES = "favorites" const val RECYCLE_BIN = "recycle_bin" const val SHOW_FAVORITES = "show_favorites" From 547f27cddfdf4cfafd9a196f35eb635673af9ec3 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 28 Jul 2019 17:24:18 +0200 Subject: [PATCH 22/98] fix #1522, fixing some constraintlayout view rules --- app/src/main/res/layout/bottom_actions.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/bottom_actions.xml b/app/src/main/res/layout/bottom_actions.xml index c96734881..73fe72dbd 100644 --- a/app/src/main/res/layout/bottom_actions.xml +++ b/app/src/main/res/layout/bottom_actions.xml @@ -157,7 +157,7 @@ android:padding="@dimen/medium_margin" android:src="@drawable/ic_rename_new" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="@+id/bottom_set_as" + app:layout_constraintEnd_toStartOf="@+id/bottom_set_as" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/bottom_toggle_file_visibility" app:layout_constraintTop_toTopOf="parent" @@ -171,7 +171,7 @@ android:padding="@dimen/medium_margin" android:src="@drawable/ic_set_as" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="@+id/bottom_copy" + app:layout_constraintEnd_toStartOf="@+id/bottom_copy" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/bottom_rename" app:layout_constraintTop_toTopOf="parent" @@ -185,7 +185,7 @@ android:padding="@dimen/medium_margin" android:src="@drawable/ic_copy" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="@+id/bottom_move" + app:layout_constraintEnd_toStartOf="@+id/bottom_move" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/bottom_set_as" app:layout_constraintTop_toTopOf="parent" From fa62914cb0ae3a5f94cbf0052507435fb0eebe79 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 28 Jul 2019 17:58:59 +0200 Subject: [PATCH 23/98] fix #1511, adding some ImageView content descriptions --- app/src/main/res/layout/activity_medium.xml | 1 + .../main/res/layout/activity_panorama_photo.xml | 3 ++- app/src/main/res/layout/activity_video_player.xml | 3 ++- app/src/main/res/layout/bottom_actions.xml | 14 ++++++++++++++ .../layout/bottom_editor_crop_rotate_actions.xml | 5 +++++ .../main/res/layout/bottom_editor_draw_actions.xml | 3 +++ .../res/layout/bottom_editor_primary_actions.xml | 1 + .../res/layout/bottom_set_wallpaper_actions.xml | 1 + app/src/main/res/layout/directory_item_grid.xml | 7 ++++++- app/src/main/res/layout/directory_item_list.xml | 4 ++++ app/src/main/res/layout/editor_filter_item.xml | 1 + app/src/main/res/layout/fragment_holder.xml | 1 + app/src/main/res/layout/pager_photo_item.xml | 1 + app/src/main/res/layout/photo_video_item_grid.xml | 1 + app/src/main/res/layout/photo_video_item_list.xml | 1 + 15 files changed, 44 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/activity_medium.xml b/app/src/main/res/layout/activity_medium.xml index 8de070d68..4d88429f9 100644 --- a/app/src/main/res/layout/activity_medium.xml +++ b/app/src/main/res/layout/activity_medium.xml @@ -18,6 +18,7 @@ android:id="@+id/top_shadow" android:layout_width="match_parent" android:layout_height="@dimen/default_status_action_height" + android:contentDescription="@null" android:background="@drawable/gradient_background_flipped"/> diff --git a/app/src/main/res/layout/activity_panorama_photo.xml b/app/src/main/res/layout/activity_panorama_photo.xml index 0a4cd3f99..7b589f5d3 100644 --- a/app/src/main/res/layout/activity_panorama_photo.xml +++ b/app/src/main/res/layout/activity_panorama_photo.xml @@ -17,7 +17,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" - android:background="@drawable/gradient_background"/> + android:background="@drawable/gradient_background" + android:contentDescription="@null"/> + android:background="@drawable/gradient_background_flipped" + android:contentDescription="@null"/> @@ -36,6 +37,7 @@ android:layout_height="@dimen/bottom_editor_color_picker_size" android:layout_marginEnd="@dimen/small_margin" android:clickable="false" + android:contentDescription="@null" android:padding="@dimen/small_margin" android:src="@drawable/circle_background" app:layout_constraintBottom_toBottomOf="parent" @@ -49,6 +51,7 @@ android:layout_marginEnd="@dimen/normal_margin" android:background="?attr/selectableItemBackgroundBorderless" android:clickable="false" + android:contentDescription="@string/undo" android:padding="@dimen/medium_margin" android:src="@drawable/ic_undo" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/bottom_editor_primary_actions.xml b/app/src/main/res/layout/bottom_editor_primary_actions.xml index 20d8035fd..fd7210674 100644 --- a/app/src/main/res/layout/bottom_editor_primary_actions.xml +++ b/app/src/main/res/layout/bottom_editor_primary_actions.xml @@ -12,6 +12,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="?attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/filter" android:padding="@dimen/normal_margin" android:src="@drawable/ic_photo_filter" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/bottom_set_wallpaper_actions.xml b/app/src/main/res/layout/bottom_set_wallpaper_actions.xml index 707c72ca7..ddef09436 100644 --- a/app/src/main/res/layout/bottom_set_wallpaper_actions.xml +++ b/app/src/main/res/layout/bottom_set_wallpaper_actions.xml @@ -26,6 +26,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="?attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/rotate" android:padding="@dimen/normal_margin" android:src="@drawable/ic_rotate_right" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/directory_item_grid.xml b/app/src/main/res/layout/directory_item_grid.xml index 75c2c8ba1..5a24ac9e9 100644 --- a/app/src/main/res/layout/directory_item_grid.xml +++ b/app/src/main/res/layout/directory_item_grid.xml @@ -23,6 +23,7 @@ android:layout_alignBottom="@+id/dir_thumbnail" android:layout_centerInParent="true" android:background="@color/default_background_color" + android:contentDescription="@string/lock_folder" android:padding="@dimen/lock_padding" android:src="@drawable/ic_lock_huge" android:visibility="gone"/> @@ -36,6 +37,7 @@ android:layout_alignParentEnd="true" android:layout_margin="@dimen/small_margin" android:background="@drawable/circle_background" + android:contentDescription="@null" android:padding="@dimen/tiny_margin" android:src="@drawable/ic_check" android:visibility="gone"/> @@ -48,6 +50,7 @@ android:layout_alignParentTop="true" android:layout_margin="@dimen/small_margin" android:background="@drawable/circle_black_background" + android:contentDescription="@string/pin" android:padding="@dimen/small_margin" android:src="@drawable/ic_pin" android:visibility="gone"/> @@ -59,7 +62,8 @@ android:layout_alignStart="@+id/dir_bottom_holder" android:layout_alignEnd="@+id/dir_bottom_holder" android:layout_alignParentBottom="true" - android:background="@drawable/gradient_background"/> + android:background="@drawable/gradient_background" + android:contentDescription="@null"/> @@ -36,6 +37,7 @@ android:layout_alignParentEnd="true" android:layout_margin="@dimen/small_margin" android:background="@drawable/circle_background" + android:contentDescription="@null" android:padding="@dimen/tiny_margin" android:src="@drawable/ic_check" android:visibility="gone"/> @@ -91,6 +93,7 @@ android:id="@+id/dir_location" android:layout_width="@dimen/sd_card_icon_size" android:layout_height="@dimen/sd_card_icon_size" + android:contentDescription="@null" android:paddingBottom="@dimen/small_margin" android:src="@drawable/ic_sd_card" android:visibility="gone"/> @@ -99,6 +102,7 @@ android:id="@+id/dir_pin" android:layout_width="@dimen/sd_card_icon_size" android:layout_height="@dimen/sd_card_icon_size" + android:contentDescription="@string/pin" android:paddingBottom="@dimen/small_margin" android:src="@drawable/ic_pin" android:visibility="gone"/> diff --git a/app/src/main/res/layout/editor_filter_item.xml b/app/src/main/res/layout/editor_filter_item.xml index 31f6bb51d..dd3913336 100644 --- a/app/src/main/res/layout/editor_filter_item.xml +++ b/app/src/main/res/layout/editor_filter_item.xml @@ -12,6 +12,7 @@ android:layout_height="@dimen/bottom_filters_thumbnail_size" android:layout_above="@+id/editor_filter_item_label" android:background="@drawable/stroke_background" + android:contentDescription="@null" android:padding="1dp"/> diff --git a/app/src/main/res/layout/pager_photo_item.xml b/app/src/main/res/layout/pager_photo_item.xml index 2336176cb..0ed59f42b 100644 --- a/app/src/main/res/layout/pager_photo_item.xml +++ b/app/src/main/res/layout/pager_photo_item.xml @@ -38,6 +38,7 @@ android:layout_height="@dimen/play_outline_size_big" android:layout_centerInParent="true" android:padding="20dp" + android:contentDescription="@null" android:src="@drawable/ic_panorama_outline" android:visibility="gone"/> diff --git a/app/src/main/res/layout/photo_video_item_grid.xml b/app/src/main/res/layout/photo_video_item_grid.xml index abeeb8618..b873ffe5e 100644 --- a/app/src/main/res/layout/photo_video_item_grid.xml +++ b/app/src/main/res/layout/photo_video_item_grid.xml @@ -51,6 +51,7 @@ android:layout_alignParentEnd="true" android:layout_margin="@dimen/small_margin" android:background="@drawable/circle_background" + android:contentDescription="@null" android:padding="@dimen/tiny_margin" android:src="@drawable/ic_check" android:visibility="gone"/> diff --git a/app/src/main/res/layout/photo_video_item_list.xml b/app/src/main/res/layout/photo_video_item_list.xml index 3acf413c3..24ae7dd88 100644 --- a/app/src/main/res/layout/photo_video_item_list.xml +++ b/app/src/main/res/layout/photo_video_item_list.xml @@ -21,6 +21,7 @@ android:layout_height="@dimen/selection_check_size" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" + android:contentDescription="@null" android:layout_margin="@dimen/small_margin" android:background="@drawable/circle_background" android:padding="@dimen/tiny_margin" From b1b173081a9752e4b28c878c93dd2bba4b0fd4f0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 28 Jul 2019 19:17:01 +0200 Subject: [PATCH 24/98] adding some extra check to avoid deleting new nonempty 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 7eb21535f..15eda77a8 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 @@ -389,7 +389,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { if (config.tempFolderPath.isNotEmpty()) { val newFolder = File(config.tempFolderPath) if (newFolder.exists() && newFolder.isDirectory) { - if (newFolder.list()?.isEmpty() == true) { + if (newFolder.list()?.isEmpty() == true && newFolder.getProperSize(true) == 0L && newFolder.getFileCount(true) == 0) { toast(String.format(getString(R.string.deleting_folder), config.tempFolderPath), Toast.LENGTH_LONG) tryDeleteFileDirItem(newFolder.toFileDirItem(), true, true) } From 9c7c995251ec1c19a7746d8ad7dbeab1a409ae23 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 28 Jul 2019 19:30:17 +0200 Subject: [PATCH 25/98] moving whole new photo fetcher handling on a background thread --- .../gallery/pro/jobs/NewPhotoFetcher.kt | 77 +++++++++---------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt index e00e2eb4f..26095afdf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt @@ -56,46 +56,45 @@ class NewPhotoFetcher : JobService() { override fun onStartJob(params: JobParameters): Boolean { mRunningParams = params - - val affectedFolderPaths = HashSet() - if (params.triggeredContentAuthorities != null && params.triggeredContentUris != null) { - val ids = arrayListOf() - for (uri in params.triggeredContentUris!!) { - val path = uri.pathSegments - if (path != null && (path.size == PHOTO_PATH_SEGMENTS.size + 1 || path.size == VIDEO_PATH_SEGMENTS.size + 1)) { - ids.add(path[path.size - 1]) - } - } - - if (ids.isNotEmpty()) { - val selection = StringBuilder() - for (id in ids) { - if (selection.isNotEmpty()) { - selection.append(" OR ") - } - selection.append("${MediaStore.Images.ImageColumns._ID} = '$id'") - } - - var cursor: Cursor? = null - try { - val projection = arrayOf(MediaStore.Images.ImageColumns.DATA) - val uris = arrayListOf(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Video.Media.EXTERNAL_CONTENT_URI) - uris.forEach { - cursor = contentResolver.query(it, projection, selection.toString(), null, null) - while (cursor!!.moveToNext()) { - val path = cursor!!.getStringValue(MediaStore.Images.ImageColumns.DATA) - affectedFolderPaths.add(path.getParentPath()) - addPathToDB(path) - } - } - } catch (ignored: Exception) { - } finally { - cursor?.close() - } - } - } - ensureBackgroundThread { + val affectedFolderPaths = HashSet() + if (params.triggeredContentAuthorities != null && params.triggeredContentUris != null) { + val ids = arrayListOf() + for (uri in params.triggeredContentUris!!) { + val path = uri.pathSegments + if (path != null && (path.size == PHOTO_PATH_SEGMENTS.size + 1 || path.size == VIDEO_PATH_SEGMENTS.size + 1)) { + ids.add(path[path.size - 1]) + } + } + + if (ids.isNotEmpty()) { + val selection = StringBuilder() + for (id in ids) { + if (selection.isNotEmpty()) { + selection.append(" OR ") + } + selection.append("${MediaStore.Images.ImageColumns._ID} = '$id'") + } + + var cursor: Cursor? = null + try { + val projection = arrayOf(MediaStore.Images.ImageColumns.DATA) + val uris = arrayListOf(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Video.Media.EXTERNAL_CONTENT_URI) + uris.forEach { + cursor = contentResolver.query(it, projection, selection.toString(), null, null) + while (cursor!!.moveToNext()) { + val path = cursor!!.getStringValue(MediaStore.Images.ImageColumns.DATA) + affectedFolderPaths.add(path.getParentPath()) + addPathToDB(path) + } + } + } catch (ignored: Exception) { + } finally { + cursor?.close() + } + } + } + affectedFolderPaths.forEach { updateDirectoryPath(it) } From af96e7731347ba2963b4902b3d31f09c729b8c8c Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 28 Jul 2019 19:50:15 +0200 Subject: [PATCH 26/98] catching some exceptions at adding media in db --- .../gallery/pro/extensions/Context.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 577cd653e..20d078c80 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -401,15 +401,18 @@ fun Context.rescanFolderMediaSync(path: String) { val newMedia = it val mediumDao = galleryDB.MediumDao() val media = newMedia.filter { it is Medium } as ArrayList - mediumDao.insertAll(media) + try { + mediumDao.insertAll(media) - cached.forEach { - if (!newMedia.contains(it)) { - val mediumPath = (it as? Medium)?.path - if (mediumPath != null) { - deleteDBPath(mediumDao, mediumPath) + cached.forEach { + if (!newMedia.contains(it)) { + val mediumPath = (it as? Medium)?.path + if (mediumPath != null) { + deleteDBPath(mediumDao, mediumPath) + } } } + } catch (ignored: Exception) { } } }.execute() From f19ddf1a0ddd2cb724fd52be57b93039ffea4696 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 28 Jul 2019 20:40:57 +0200 Subject: [PATCH 27/98] add the sideloading check in more activities --- app/build.gradle | 2 +- .../gallery/pro/activities/PhotoVideoActivity.kt | 4 +--- .../gallery/pro/activities/SetWallpaperActivity.kt | 5 +++++ .../gallery/pro/activities/SplashActivity.kt | 2 -- app/src/main/res/values/donottranslate.xml | 1 + 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ba123d85c..452901f2a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.9' + implementation 'com.simplemobiletools:commons:5.15.11' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt index 80e922610..a1ebf1968 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 @@ -14,7 +14,6 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.IS_FROM_GALLERY import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE import com.simplemobiletools.commons.helpers.REAL_FILE_PATH -import com.simplemobiletools.commons.helpers.SIDELOADING_TRUE import com.simplemobiletools.gallery.pro.BuildConfig import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.extensions.* @@ -41,8 +40,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList super.onCreate(savedInstanceState) setContentView(R.layout.fragment_holder) - if (config.appSideloadingStatus == SIDELOADING_TRUE) { - showSideloadingDialog() + if (checkAppSideloading()) { return } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt index 2ceafc06b..a1f83c574 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt @@ -10,6 +10,7 @@ import android.os.Bundle import android.view.Menu import android.view.MenuItem import com.simplemobiletools.commons.dialogs.RadioGroupDialog +import com.simplemobiletools.commons.extensions.checkAppSideloading import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.helpers.isNougatPlus @@ -31,6 +32,10 @@ class SetWallpaperActivity : SimpleActivity(), CropImageView.OnCropImageComplete super.onCreate(savedInstanceState) setContentView(R.layout.activity_set_wallpaper) + if (checkAppSideloading()) { + return + } + if (intent.data == null) { val pickIntent = Intent(applicationContext, MainActivity::class.java) pickIntent.action = Intent.ACTION_PICK diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SplashActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SplashActivity.kt index 97dfbb648..20c9c9387 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SplashActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SplashActivity.kt @@ -4,8 +4,6 @@ import android.content.Intent import com.simplemobiletools.commons.activities.BaseSplashActivity class SplashActivity : BaseSplashActivity() { - override fun getAppPackageName() = packageName - override fun initActivity() { startActivity(Intent(this, MainActivity::class.java)) finish() diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 2d9b27b32..940ee7ee2 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -1,5 +1,6 @@ + com.simplemobiletools.gallery.pro From 028dd1e03b0fcc784d3aa3a065132214300b1a67 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 28 Jul 2019 20:47:50 +0200 Subject: [PATCH 28/98] apply the new sideloading check at the editor too --- .../gallery/pro/activities/EditActivity.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 f65b800fe..9d4889219 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 @@ -26,7 +26,10 @@ import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.Target import com.simplemobiletools.commons.dialogs.ColorPickerDialog import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.* +import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE +import com.simplemobiletools.commons.helpers.REAL_FILE_PATH +import com.simplemobiletools.commons.helpers.ensureBackgroundThread +import com.simplemobiletools.commons.helpers.isNougatPlus import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.gallery.pro.BuildConfig import com.simplemobiletools.gallery.pro.R @@ -90,8 +93,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener super.onCreate(savedInstanceState) setContentView(R.layout.activity_edit) - if (config.appSideloadingStatus == SIDELOADING_TRUE) { - showSideloadingDialog() + if (checkAppSideloading()) { return } From 73fef1a7377ae97e96ca4e0a2f1cd4b587dd408c Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 29 Jul 2019 12:51:43 +0200 Subject: [PATCH 29/98] fix #1005, share items in the order they were selected --- app/build.gradle | 2 +- .../simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt | 2 +- .../com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 452901f2a..63a976f4b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.11' + implementation 'com.simplemobiletools:commons:5.15.14' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index 8acaf4412..b66f91b6d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -595,7 +595,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList + private fun getSelectedItems() = selectedKeys.mapNotNull { getItemWithKey(it) } as ArrayList private fun getSelectedPaths() = getSelectedItems().map { it.path } as ArrayList diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt index c1023ff2c..cffd022e7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt @@ -394,7 +394,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList + private fun getSelectedItems() = selectedKeys.mapNotNull { getItemWithKey(it) } as ArrayList private fun getSelectedPaths() = getSelectedItems().map { it.path } as ArrayList From 29f8f449b9d7f607282599dca00612e428ff4a6c Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 29 Jul 2019 13:13:53 +0200 Subject: [PATCH 30/98] fix #1520, avoid showing some invalid folders as files --- .../com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index 67bc52291..8893d32d4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -230,7 +230,7 @@ class MediaFetcher(val context: Context) { continue } - if (checkFileExistence && !file.exists()) { + if (checkFileExistence && (!file.exists() || !file.isFile)) { continue } From bc3683deb98acfd9415d187a0f580b91cc218982 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 29 Jul 2019 17:46:13 +0200 Subject: [PATCH 31/98] adding some crashfixes --- .../gallery/pro/activities/ViewPagerActivity.kt | 2 +- .../com/simplemobiletools/gallery/pro/extensions/Context.kt | 2 +- .../simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt | 6 +++++- 3 files changed, 7 insertions(+), 3 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 db5f4d639..a4783ced3 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 @@ -693,7 +693,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View return false } - private fun getCurrentFragment() = (view_pager.adapter as MyPagerAdapter).getCurrentFragment(view_pager.currentItem) + private fun getCurrentFragment() = (view_pager.adapter as? MyPagerAdapter)?.getCurrentFragment(view_pager.currentItem) private fun showProperties() { if (getCurrentMedium() != null) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 20d078c80..a19e36606 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -623,7 +623,7 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag try { val currMedia = mediumDao.getMediaFromPath(it) media.addAll(currMedia) - } catch (ignored: IllegalStateException) { + } catch (ignored: Exception) { } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt index 26095afdf..e2c755ae0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt @@ -44,7 +44,11 @@ class NewPhotoFetcher : JobService() { addTriggerContentUri(JobInfo.TriggerContentUri(photoUri, JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS)) addTriggerContentUri(JobInfo.TriggerContentUri(videoUri, JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS)) addTriggerContentUri(JobInfo.TriggerContentUri(MEDIA_URI, 0)) - context.getSystemService(JobScheduler::class.java).schedule(build()) + + try { + context.getSystemService(JobScheduler::class.java).schedule(build()) + } catch (ignored: Exception) { + } } } From dd8e03a9d67bbe4f877da6d6725bbc2e2887c4a6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 29 Jul 2019 19:35:03 +0200 Subject: [PATCH 32/98] update commons to 5.15.15 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 63a976f4b..4e78f3f64 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.14' + implementation 'com.simplemobiletools:commons:5.15.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 28ec4ef02d4d259afeb80ea961ec8f19713d15c7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 29 Jul 2019 19:35:21 +0200 Subject: [PATCH 33/98] show navbar customization and share order at Whats New --- .../simplemobiletools/gallery/pro/activities/MainActivity.kt | 1 + app/src/main/res/values/donottranslate.xml | 4 ++++ 2 files changed, 5 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 15eda77a8..943634d3d 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 @@ -1273,6 +1273,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { add(Release(220, R.string.release_220)) add(Release(221, R.string.release_221)) add(Release(225, R.string.release_225)) + add(Release(258, R.string.release_258)) checkWhatsNew(this, BuildConfig.VERSION_CODE) } } diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 940ee7ee2..cbe4b4773 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -3,6 +3,10 @@ com.simplemobiletools.gallery.pro + + Allow customizing the bottom navigation bar color\n + Share files in the order they were selected + Implemented export/importing for app settings and other preferences, like sorting\n Allow hiding Notch on fullscreen view on Android 9+\n From a0617612fdada8c4dd66130328d6dca6df8bf35c Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 29 Jul 2019 19:39:01 +0200 Subject: [PATCH 34/98] update version to 6.8.4 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4e78f3f64..d6eba255f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 257 - versionName "6.8.3" + versionCode 258 + versionName "6.8.4" multiDexEnabled true setProperty("archivesBaseName", "gallery") } From 4f2a8f19e10064eb2d54999259f2cfc6d5b912ac Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 29 Jul 2019 19:39:07 +0200 Subject: [PATCH 35/98] updating changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ffc6bd9f..28f705b8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========== +Version 6.8.4 *(2019-07-29)* +---------------------------- + + * Share files in the order they were selected + * Allow customizing the bottom navigation bar color + * Fixed some UI glitches related to fullscreen view bottom buttons + * Many other stability and UX improvements + Version 6.8.3 *(2019-07-14)* ---------------------------- From 8a63261c957d32422d28468578ea9548d8c546f0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 30 Jul 2019 22:55:57 +0200 Subject: [PATCH 36/98] updating the app description and feature graphic, mostly for f-droid --- app/src/main/res/values/strings.xml | 3 +++ .../android/en-US/full_description.txt | 3 +++ .../android/en-US/images/featureGraphic.png | Bin 46158 -> 301824 bytes fastlane/metadata/android/en-US/title.txt | 2 +- 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2c2730859..7ee43e0db 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -283,6 +283,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/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index 42cdbb052..00705b240 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -44,6 +44,9 @@ Using pin, pattern or your device’s fingerprint scanner you can protect and hi 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/fastlane/metadata/android/en-US/images/featureGraphic.png b/fastlane/metadata/android/en-US/images/featureGraphic.png index 37f2f2345ad673a83c7707b0c4c94725e69d5c28..27b47a1559e4ead078b440443095adca0c661d59 100644 GIT binary patch literal 301824 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

10sNc7H8*p^Tlq)j^<9hQk} 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
    =S$wK-iOKO$O6z$ST8EQt;4LMoLW`w$hLNqtp zl%9z(TflGG;A*y4<>np*nfP`|1ta&?hnQ!S zQ*9UI9-V^)sjvEhN+JU&x}9gLtgWLB9N%LBOG}g$)8I}59M|Sk$Eot?pqd3o!5v%? zOnR1Br4)9tCzP+n3w#e?;Wog$C&@P5yPMWF6@VR69=iBe;dul8qx8dv^?>Ghn_iUR zxRsrq9qf^uu6oPR;kFH`ah7?;eMj|cft(-6I)M(acgV)t1ayJj(1@<%DTV`6f`!oUH?bRgGoOo%NrXW0`Z)vg2r0<#ZB%aM!s6vui9|h|zw> zf)751(?5(z7S9>~161777J+B|*yR>?Flhe3=kxn1!#uX20R#L|pYr8ykR+71oNpZ- z9u_*8Ci!+gW=JvvFllT<8o+DaE(oz5K=3}YvnBMm0sGxgJRk#B0oMzkL{!W9Lc`MVMvbCoDYV{8T4oNxF-Ooj5W0z=Am} zhzJcQm%ClKM9)?nq$uy&Zb+tIh(WV??Q262XfXrPOGB!o?vR|xU}ly(gECOZocRL% zS)@{&Mohleo#I2k%i~|yBR3b-_LEjRbU1PQHzr50cEB zMKL6xeu1E@7FSo+MDp20?kG)FEq8x*A-DCDpTnL7`} z*8$YTvalIu{bW}1(GPK%C7xCq^qoHju&@=bYN-DlfPGc5WEQo=KiXXf|FFFTO@S*$H%y_HWaQ}RQ8TSrx5Gb23|?rm{Gi5 zJo}~~p{W=QN|_3QKAFa6f>2s>7~#I%#!u5`8T1wuXcaTtm7X0&#W+?5wvZW0)ztXT ztD@3QrW=qhf)vbR$gR^0mMCO?aflcdE3U?R+G!}NIVc}T)J{5BP3_%E@8!2##KW|o zHQ|DEQDJIyw_p2e#p{W~7@`WJ^CbkBz0CEyIpoLMHa?90)1s=?SFN6SHOU-YTT5Dd zS~q3f&tZ==6uuY%8WcerXs56`j=Y|60z{3tP8Kd-Hf>G#n$ElR7j<3}x=?uEqwEt< zMZ8kAufP!M)Y)tQCy*Jl)G}X>Bd!RRsOZ9NlI0rb!Gne#&85bVqNZBgYk4=-X=QsH zeC$2}^>R?^;ZwTgF`b4SSeXix9NuiJQ_`#5IG%W~qJB>p>_SSFOdbZp?ndhyIo{q$ z!jmBrM{PagXBC3w9DM(CEBl$MtS&B^1IhwtQO3+Dc$gyjNXVsJg(?1YFj59%j_zn} z{)W0x&Kn_J5174}J}NjEa6`W$iJK2C6Nql79s*#1KytD_w+}@P1`q#xNY`E?_|nA8UGc-h}4N{lET0!!DNpmX&U_D$!gN8 zPJtM&aAt)mjqg+V#Op(Dk+Z@6N*8VKKLw&FtNxgXr0mYd47wXq;X(>;3D^0$&xsF{ zj}IPI?c7(Y%sdw1dOA0otD3yJl%wnIot=!xw9AV{nw#57bE2|mpBX(Zn5c7JZ}3b; zcF5-{qUD@mGF~Iu-@`ODm}lT2rK4gVRwv(oo4&D_UrBaT!wc-AXOPmD7ElV*NR*$< z)u^Xzsu#6Wp@=HmMs3FE$fa$h@ln~q;#>4#Pj{Jcgjh2D1c|hul zJ#nCyi(IOgEw{LvLynyeXH7$2%O^i6@pyM>yY(RrdNibvM}EfHcKB;HPs8$U8%C0I z$AU(lmO3h&tp?%JKR)U)<&`4rh6%`jnJ8X6L6-|N9D~g`-F_#P`wio+@e@VP!p#u8 z>`}WgGRSXqNR;CCca^*Fjne^}z%gMq9cyiNL-Ho~EGS{@)3AWF*OKZ&`w9%-3gVeR zw7=tHCeR8|Nt$iXe5BQ87_iuUzmJ`crI_1u!KwijeTq4aik>`$~&J4 zg;1Qe%ll3&6iO#(oZu`@hT#8z8027>ITg6VM`fYm!8?#0v>XC~hZ`8wtH%PpBPWK5 zf>r-F8Isc|j*AICrZ=jS3F|<^O<;FE=|*JD2WLY5e5bj!tg?7NgyQgUfuK65ElBs| zf}DrnF&o9L-jCm^OJYO)z9Il3ONfZBSBrhQ;$1SY5k|-$_Ma?FPTrLvG0ES6jUj-P z*~|>0gkDr&eQZ2r!#!f?b<+FO>6gwJ$YbnvF-F{Si76>ey73&l2DpWcofAawRf%v(-OkWngn6F@i={huE&59rkS8Q?S$~to^y|&~9>E*$eeL>G zZLY)2ZT)(2Hw(wNZyW0WTPa&<$U@T@=1e&7-hNAPXNR=?jYOHSNbLh0w)3^S%w~mL z^>6maeh!-P8{p#4a+Fo;TP_s?S?$N#lxVk`mYx&o^Y2-K7w!E;1x}K`SJqR{Qe!2T z!*Bk*@vAhK==1!#-omusa${arIkCwFJhY!Y|F#n?_eN^eNc^+4VcnPi3hz3J(kuEe zeARekQebaLn*Xp=`Y?CAuk_Tn=_J3jzyARzeu&_Ssw-kK`|##Z#S@6-uP{929U}Vt z?y1+t?F!oZ_A&T;ppaAB7FMtFfobF9@i;m^Nv0c<;CF|i;p@*RtTR5$?Ve0e8#wQ_ zC*ft4*T^f>*bJ?7cE(YAdS#t{W0L-Fe=)Vs_$%f=D6Jhi`3F&fL}pz@RU93}P-a{o z9@Jn0r=r`T6#K;mIr|5NeCxcj?`Ow_g{U}w75T~NT@qxsWEzFv~oCslAx#hrZfVF>V# zqPZ&-C~MK{Ef*+*ral;qP%wj!fU(ino9lNa4G+KCG)VSc`2x(!+`YLmW7JrOdN0FXO)GBBQbs?xT4<9A9UbpA?_H zZ!f&qJ2@HHRm8k z-5or;TlwKbp6}Iv5nA~(z4S%=QwtHbv9pHSiK6sI+i(V0kE&)vyC%>I7)p`;L#9k`r~|Th@uZq=nY4PH|mG#foirQKDqVx8ge~*hEC?e1^>~0 z<9Z^9zNN_jz9=D519)RrN`4$M42)m-NYjjr2^Z!di$GbKeSme0 zP7>hbzFR~yKmsrrQWn$iQSuaoONK!ZobR7xF*PO^wl*CbU9`8&(aR*}NF=_S%Hj7g ztphLRApROQd1#quV^V!p1kOGlxB{jYgv3UYGzzAyBq~UGPcCY2%O*xc%ln2vo=z&8 z$w7d?ZR>@QLu9px=^*kE>A^T+6bZ6lfU%=d?^vgPjQzZQ!LX4rkBGevnY2D{4T){C z(}Z7FsOg`CUtj)!?H(VG{g>ZO*}NARNA9Os#%`-8utw_>Ni{CMFMRAqKs``YB+`1A z(pvxWDxvkNq_uS2_HCW0OpRpUS*J&ih|O5{>E4$M`WOHHcqQ0`caQ0ee9WBYR<~EX z%4U(L5?G`QrlqG(N!^;X*49%@;DWn&1O&+@<`r>#x#{?SS^)i(H0m|WD`0g-8y4(K zhUPHJvU3)O1@cGZ9%xPN$Z<5gEyd??6ND)b?PAM*)d&n2&swE(Dq_mXxf#YNv_H{H8w zosHmNQ^Tn~Gb4F;lc}I+HFBc&QXBJdSS5EE14}wQ1dxX4;#HdB9dNj@$ z6bP`cI~nL!b>dOGnrrzN_U(P?n+-^|U4K_68Z3vmF!up`@Z@QzTT;Q0cTh7kvU||5 z5PeydTuA0CQK4WK>om^=9HB&0SP3vof?L?jRjA2oQsDBO7*5i)( z?A<+cX(#@HpUPXWGi*rroP~S%e~ddy7}vX`q#9MfT<$&$7BQ7?<=LCNy7}+aMl->B z%KMj*BdP6|^=}mIOU_Tv(xpisF<^o)HQo6|^do~2kY_I+-E?PJta=m4qGZHa z8sDPPI|9&1i$Yf}wl0Jy9l}y{_n-`2u`y5(qI8Ttn$N z^3lKF%>@|*`^=PxPDB6%XIf61cTVKE?$hoUM^4B3v4-sYm#OYozLCtro;aAY*K|!s z3;|FZ7W~{^f^~hH*JRTMWCnP3&NAH{XU z9h)eh)EboO=?16kS?fJMK&$8mf3cqTqVB0I#v`V&6w7=g!a0`PDTJme3)jJ|GU2&x zRA;bt_EFzwgI8(vC7XZsKFQ+7falr3{lPmjAt=~9K z0(F+n1ITrn?oHv3&~>ZT*kj`7Xx~wbHa@TYJ3Dlz;~Z=_=K3mpO9qPiJy#eNrC2+& z`*Kj>Y?r2^1zK}U5scS52^Wsd9k_u!#7wbskon7m*d5mY2p|^wII^?~w;YwK?^1Rsv~*(WFte=3D=c?C;wYx~B~% zY43?zdcPwC-2k@o#{l;l;o6ik3gK+-0R8;NwY}qYehwZF893`|yQi>n9B5=f6~2 zOE@(RP|g;s;-LVG!m?1?fdm|Zt@%0ciYFp)nPcPqOeyS_K^hxJd3p@?HUb7JJJKq>?Z|^D_-W$!)q*^=s zw(PfXKI`gUz%Ao89FWbGN*mW{x1Xv<;aQzu6q2pN%9`zSut1O}%Q{$aciyopSo~f_ zYAREOeozhvZorI1ad0-W@3Xg)I(bj!Br3bKPG3=p42OV^Vfxb|tz5q%<7q?XWV3IN z(rDkzpV6HA_m}?(yKH5~A`MsaSkzVgIf613YnO88HVtGwgkY3jzf^Oy2E&bhg->CR z!jKWe?(mVBCc&~eoJ$25ro{_z)F~7v%Z+dl*${tzC=+fdIygpn8zah# zpdFIMMXJE){C#~HX#GT)ksbbJwe;WG^NGNIwX$dHTm;E^PG2^3JtevM%`J1u>b0el z`5a3kmHy$-s`)*>{%*QCVU4cQz3Y>q&*kq|AHQfh`7?nGH7-kFpZIaSatU5L?P(+X zKx=lh(9AUwpN9+?;F6M(uITN=6EZq~E!qFsJI4COMQH2$f0NtQQZD;D+Sxe@T5G zaa<0yUOw|Xb-7A=*m{7!o}&1i+Iv)tI?>RS$Nm|~ox<00_IKHeSeV2xP$XN&!o?!) zHiBgEKZiy*=j|^J&<_Ym5R3s0tC{5Wx}^lw#S}sXFhTGrQ)m@KMrzY(Ad|^_>z{K+ z7m`m`9O^K2ik^4WucZc=?hR9|b}Arl!#eyeQylD)trc-BttIV?r&kBMoOU|vqZ{GV zO8rxMZ4ep667465^q;J6jWvLubAYPpi0PML-LQVRDohSv zS0Dd2gaKEdvKk|TDul{U{P27(;BHnHZX=6}-xh)A?Oa-1qJt-C4gN#tEZi}C2=4K9hF=%IQpP~liHaEJ(A*ubNB1gBTGxOMf*#e-)}|D%E^Z zG_Y=xGm@ey%mYyw~bXcIKsy`JD0;5C0SsFmSZ}OZ6{dI8QU(KRc{kX8Y zrT);r4OhVoVZHcTW7T}y@%-X}i3JJrAzSaK!kti}8YOwy!i3Jk)n)Znxb*FAO7H9m z3vU_5jPw!BCY97q)rK8X=Q*b@|5V)hCay3@!M(G;qs^PF&}|bDx(pYRhxPTZw`U)Q zZ-Zfd0qJ`6r{=xxHJjwzzJHr0+pDf(3?rIVoqX%3Td(-k$=8>yS8waOS&2h)qU7Sd zs-mW+?R1UaF(n*rRt@^o>#j5d`y!|^QJAx$TWal7^OG#j(1w?4A7<^wKE}zTj0VG+pMuPsZ z1@kZ`1VUkk!+iO{@!|i?Xt3A#JKY;R1TLqXQTR~B+V$Z`TK@LL@PjS^axPhX^zhva zF%81Muf(6WL1l3vD?W=Ej2(Cm+KjS^dQk|361`)YJmB|IiZa^c`Q$Z;>aSYe~ zSxJdY${fmgyn9YXLV}*1h2oMc%93T{%EA7)YsCLY#KMkJSA!-h+Q-+ubNk+ASF?cJ z#S@n4?fc@C;JMqhGW*IRcA$}7@!G0^?~@t#%P!ckW* ze!#lOQeIbuD@g0%?W&rFZ{^wHX;&!~E&rO|{JOIBJJ7_c7|NUf_B&}yJ(3xy`ck@$ zbZkE9HvW94{IlK{k1LiObsf*&i+>K6KYh~Nv(=aWcX{8X)%USpmzR`7?Zs@qoGuyH zn%Z`FNXfq6X=J|b{neiZ)H!m=JA2PJ?$pVTU0?YfRs+$e)e-&-+DX}IijHv zF)qA)+Bh&HI7Wv88@UUC7;cBx*}V|{tUC}~yBd)Yppw_(AiA9;FE2;Z6hiU6r1fLf z^~^wMN5|5(7H1BdtDb(=p=xrciky}`*l`qX@YuA7=?>%>mnf#^WIrl)Qd%C}7+t>A zJwEew46cYavbUyXuHa^aLS@=~Dy76d)6#7S2e>MZk~8NRQTgGDu~Xv$vD6ek?7!SZ5h$S8yCC!~D9WHLTvSO>8$~xTI80St zT-sm7JJ4?+vT>)DIZq(iIiXX1m#(b&PX`)mCv5*Axn|O>bnNBN;U(YJ=Fx5Lysaw3 zLF#dPUk^cN2Hu3Oe@-$l;=Fea3V42cmCL*Gs6d0Jp}4^;ca;S=^`^r4mC>2C$`!I0 zm}=iFK32^J4g!8#>r~T!AS&IenN7pTU83fd#YOWVa)B#=9OQvE;&yhJKVqP`FlEfH zf7V$}u-hR!zW!^i+tVpD0N8*v*-hJ%3{-A74w5N=h0@1$SfpHBTHO2WV6<=4-7+Wi zRn&34$=xjpj02PvSqB}2$(Lm2XEbI{;8r*BL-BR{qm<}t6=2XG8naw#i8T?CblzJ9 zM`P6;5H6mQ*uVkju&q%G;h#=71g%G(uS0LP_V-OCWZPzTqy}{Eat^pbOlH{rEgG~L z7&qjbQW=eRU&sGCANZCQ`t17mqq7W7VVC*0tK*~#1nau6Vz((i(~ZtbVg@{3YOwy} z_~N9l%Jg)r`XWPJ>GZQ@qqtp$)Ia{0p4HbHKWJ&@kL5y4*z7Ob1K$~PXEmJgPJcO_ z{M^Da>vK6XA9MWceB@^D!d2zQU@IXQ`p2WeXDQ_)IvUBJX`9E4)>Xf^342hvUUerM zm-ai#?Xg~b#n;p+OLbyQ|DG1}EK)$N;#E=FSYZu2dHy1JC~{G4M_j@*bfe`Y13!mG zsC$T>TglpwRQ=uAdbOGCFg>fnGNJZ%Y+CtLbE{ZKG*P7$z$JMLyL@IHYJpg_w--S zeUa(jkKd8@F-Wqamz0W1pIN@E#Q;9KK}m?u?*NzL;_`b0VE7ov(mzmq=sDOhE*KmU zKgu=c#+|LgOiW8bGEkNJxuvwI(9E>MPJ4>67j@_TZ!T(R{0Xz`GG*3jd3GNnY&{$U-?cM9juiiA;<#Hrd!T<1fRU}s>xRiIbU@sb` zqN1`ep;pbJt5n2c_{BQe#t3DiFj*JZ;A;K|raN3DMmO}Q$*I_4c;(5@*%^B|-J7zT zo&C$>o3lsilDiFzSz~VW+z+{vqFG)`K;d!OPRaSA+UPdbS*o>Bry{LiKF4LPr>9Fy zm!qv>k}_&q(~@~z=$nqR&$%YKs#`Y8uVX9X?P;m$sF2%kUWQ#6^t4hr~4MoP?D##~qsw$Tk1<^`O=?>IZ3q=ci zRvYlx4*c8j`6-+Z%i-V}u#lpare}KjVtQd_miKd)Pu)gMRoPIPX~nOg6D!fyH#ZBw zUuDtfDxR;EtjC_=RI)jI0pWdIo5Gd$Naof0GC{dpdtf+cNOpq(E{v0n2uIcsQw`ID zTcl|Hkk6`m&1gJPOb?aK{d$;ZU!;YP8o}@w{3v%o->W82Qo?0MtbF?P=9F*O$}QE| zjxhZ_3f}*@qDkjE~;>-1IFg zgAMUAju8ElF6J|YAr+I1G{eh1jG+D0Ej@oC(b3?LbjJC{e_Niy1)AyC+kwQ|tyh%J zI>Mtq+PXk+3Ldv`ceVf_{Urd)Mg{|q5`9^QCOxijORLu{z)2FM1jO7q#!PKW$sgEY zT+TV2N&+!lj?W%0=bv;M@PrzgN=#Nal{<{sNhNmZdA5WZ&6v463Z_IT-KAH&dRd>6 z7rSX+FefVdoY%G;=c8;dMD08DuS%io`^#3KGX_Bbcky%W`F*n>fGmfYt!^oB+iF6| z2%(vj9FPOJ{Fy!FZ5*U59D>T$dk0~Q2y^!r_d>Vf;0L&{ufE!oXI%N`MWy(9TOO>% zk}-2xet%cr>rPKgMn;I_i@1}7mbzOekI`n%(#IIx{j7I8DDAhBOQi}yAlveC?0B{J z;oEyJIqnt%ijIa*k76^8A`w3fhncGlfkE?dK%C;pk^ApqXv;)%B86(u`NA1#Dew4S_cy-~h@ z%Cui+ER(UfH~VJc>&!2QUw$V$7mu!24xBFcTCaywT;6jgM3k6CA(bizYAD8SXJ<8vDe8r@74;_KN43r5D4gZ>Mx6c+QSaf;2H5@Y$Bt4$ z6}72ar8cog?bfcnSM9y`9<^0$LB%H2s@l{lDvF}^DzR7W`OEWrUeD+IFC@8hpZlEi zzAjeNOq+Hq=!f*(GuXJKs6-)Yzs{KI6uPMhXzN2>LUYa$Q$6~#YLtn|F-yJgW?c#K z?o%YMj`y$r{k!IU8;snhcXf7t!B0teQD@qU0YGlNl%qGOj^dO_q>QI}o%9qWV_E!z zV!f!6C+X!t!T0#5uk%56K409kDZ~qfRn4{j(l(`oWy5|Sd#sW3Q&0ggc%(%!i&i_W zE|0g@W?&c9bsc|}V@~Fr3=rg!g;(+>GhH#9yPR)x&jUDi3JUWf`u$u~F5a%8K7o?= ztGm;)zAZj&1{V{G^otKyYwu0K?njaFZ|%sDn+ zT-?}>7Zy+U7LGJfmbRFMoa-$ty{3wrSN?qVoL#!MT3K@pTG*1*)L45t;jvR%NJmSn zGa#URYa_U_I9C&_DKyF^!&EUM&WEp=*?fDz`N=Ayw32ZIIWTupshg|BxXt0ap{zRM zWvD>X{=209!u*AaPKLLM$kFo%Mkm`Hij|OqHCSx=$<+i@Y)MV8NbB=u0}#`pUO`5C z491KTH|zWNKQ)y>BRQZO`~0EX`N>%$uZaSKf_~D-oq$l5GC)H^8Y3Kt0br`b^pP=@ z!@$C_*D7f;L?GiokPZzR9_?-h8R*Gt3SQEqzqvl*PL#0g@>gZ5xhM??6E?128p|M! z93>DVO(e`u&YFn3tLAyUAAVd(QoZ}+L~fJIQ=!Af;HxF6hxE&k<34q%`#a&#jXd-| zV3x6jW3yO$dzK*=`r#n(E{+7_M}lLFj$W@I22Rtr`65+AK~NPrc09gff~C3qi&DXl zl`qZ=7pRveafpA6xUH3K*i1USo4#9ZU*YFK56EtXoy+xRRSk4?^9(c-#|xQPC2|ez zbcI#5*^@pqn>Wkh?`HF2*oed_e>QuByVBB1b>Ge%e76aRlqAjYeio*hBT6KsrJzYJ zKRDgSNyBY)-)SkCd^?O#lj1vRT%Z?hL~n6-2VGq);~hPM8PiiS3GQ7)DL*O;KkTy> zddKE<-$!#l_C215`lFJ#f1wsR-tOO!Jm2WUqfcnzO2$(wen-LWdWL%)WXL&gg#Sb= z8puG}j}s0k1^}8^nAuDajjgQCoiv3~ZI8$4Qn#zI8z(`Ix9gVZkhe$#Mi`iK9UlGdqtdrB&egj7h-ks5lBs_8Z_ z5dG7*>Aj?HUPnf*^%zba5oL}tnPvVOg~9qd^hH;i#Og1flYG$8Cj0H8{o3V~eN$&E zf1Vl^Do6{08u}tCB{88qyMJIztorA}(>Rr9V%uH-cvylnjUpHFkC&Fb$|p#l%&Z&> zww})B%!Ra3oB&8gGyCUX%TKri(>U=n@sa$?!VF~Md`wIMEb?i9XZ1`xDiB$;q4Mu^ zGqQ*At6r4u%d3yoD-$%C>2lwdRR1o~vavIK1uJ01->E+?{J&1qW+aB&W_slJC#a0V zJZw^ITxo1{zXTg#L1Mt=_vA^VB8#P9;s&~ZG}mN}?p%BGi;A`1@07QMp5l{s`0SxG zM;)y#EijN?jBK?XCcK$gOuTJ2ayN%U!}b4N?~gP`Hclw*{5#oDM57idOu($2hLuZ zHb09iGR|@}@ZKsDeEWvsRny#j5`|zjW)dzfcMH1u_xLdMIO`|$2=6`>3&g`ygiX}w zgJ(GvS*r|lo8Bt#n%L#P#2L*GqA682l7BG|;J_eMZT8zZpDlQppQV@bE9$AslrSma z4?`tcjXOD4ue>-MgeKkni+k&iy3xtlUE0%Y^x*-|c^i6HzVf)dP}db{?Dfp1)PCS*_<(q0nMDz5cy>3} zm&d)d{q3{B56;mJ0$^BTtwU}ZKI2zM%&&Onv-$b?x?cg$rZms{h#&qfN2btA_-hDx zAI+udRxKnLIlHbex(&bMEabwym!V-r;3WySn!?lpC%AF9wI<%-vN^SKDL#MYX zPK#qioF}eII>GiQ0g-Veg)|unh75pS+CFJJ2jjT|I@>O8?LKqhG;VZvH|J;Yp{l5@ zl6|fB&>Yt8-1x`!C;yAA0=U|zbsN)hB){Hu(b{!-qec6|o>!i%A%sL@TF~E0lAc;;_A|o)?e;c-|Jg73!%`06g9CF{u0 z9qldjP^wsmW~jx*r2Xp>dRFpGBYpsD)xjn-*w+L-jzE`i7{{Y?7yxYJX#e36aHt@C zHwWS|e}b65ZoOM~sFyotCpsDnh!tQF5hh-t`3(1hRrpQYn+5W2r1E#k!7x zR*tQl>M80{58Fe&N6Q$m;68zA$WeKj694nDP&G^-KL*GWz*)U}!P-)9cu3fAJTgiG zX4>tCRQ$E8eg^eFCR`R|lN2a@GKWG{V$W#W@!82<2`tK%UP;Q4r-Us1^-p`?l#6C zn+pdT?vn8)tnTugj}!MNUmrk`WPmOg1sV>P(HwGmpYk!mpSVF@=PBM2cgMX=y0!mK zld6yJ1@8UY(F0=TinaSO@HTQxDEfNanpbki$;+$Nd|Y$oW$ww&6!ODIZWHyy$&wG& zO+rt;&XoRRV3J*x2>giLO+PWfX=BVrBtM?v9jV#cG71=0Z(1^~E8E^u+}P(usm@VS zKMhziv1ALbZ|2?iZYxiJHpS=Uznk?^xUOEM8IwfX?864kie43tdb(pLYDTU)3@mx+ z2AqE>4YI&jiJXxhVYaW)v2^-`nRcL%{d6HvY(Z~CHaP&cBeFk-vgIi(v(IgsY_r!FCv|cn&PpLyR7{CA zLNx9lx_sk%x~+gjO^t3Xy zpT&8AK?PIL^cNXIffd!U`Wy5G8@H4h$iwlc*5_A}xsuVz))tT2uOP`Re>hpGeMyFb z7UNf;cvdws%JF${XB3%Dcbjk~u&-`9nP?K~-2Oj1+rO`hBReH%%afhBh3YMzIgWO1=9!X5s`q*a zwWhiR6x=rMh$t9T94|@TT|~AQhM(j`9+*rSV5-&_IaCR>tvetZw14uj5xqV z7}P16kx9yA-`i-20=T<_Q0m=}%RvQt-p>a}^fDZC2d~@g)kYf%W|eKfwg$3usN=J_ z_{vlS`FJ3w#uKz~^Tak5gD1ApVAl72R=K`35LEk~W(ZIcrDX7o zkta>yDV}07)Kv|cGLAa&^9U04CuA&QgR%JurPZER8D~a8zI|pJF%7uBSwNE`8TRy} z5^itHk&2JVqx&NfGT4Ci?iP;cMk#GGS@?vv3DOoBTLIqtM)=A+ zzT>oqkWk};_bBTOmDK>Hn4RmZfNGrfm=^sXn^5TCyQP}vjsv>x-AlVIf%VD)IflE+ z^=Ac1s;3Pi=vdCxK6Bk^)3nM$aF`s!$ox{pQom@x!4_L#@-sh5gJeQQ7UM;c?WTim z&X;FHL#+0qPBzM)2h*DU>+?5J2M1#lb{@#X^1whby*fJd%Wb*y*1o#)#lVE=xAbOy zc{jhSs0tea5(POLd1JxrAb;H}Wmf!hSRiWdox!*19iki)VE;aj_`40-mialB?S`La zs5BP3Ll@VhLubNUG!l#-d9y_1;CHrau}N+9zAo#j@QneveEm0)c%|I3U+YxkG;x0w zaxrQq3?1Q+ncTOV`ENhM1%d37pvCJsR6<~$aINX%jB7A#>Z9uJ@v)zfB$gQ_JNZn> z45Rsfdud#NkWYb_0EV+EEy~Bca`e0p1jG-Y3{wK4NwDAJwJ@203~2mbFd%aSHQ^@^ za=iKw)Vl41m$yJ2*3{D7-O~L!E<&0L2SWUGLLCbyiV+(>JdP~YZ=435lWFF8U8=-R zE;A`tqLdKlON5gx62}J9qRy#Var8xx=ca9D)I{&q45kfiDTjF1M_RX6Y8CBlgxj8c zePTR)4pU4?6tIFRpd5Txmi;|)xy$sp_YaBN7nc71)m?PB>3Zh)hk=dHbmpW281k8b zT=l7BA`yM)Bk|)v-_n>*=C|fqV}CvF%*M%UHs#nz8Q>RtttZQYF@GcBuR+6F=ud2S zKI3&@U>^FalMs7x9*ZSA#^!FlH~2J`dNJNdJNMgkB=O@v`uk<6g}+o9)>2a9!;anU zp6rM6m-IAhTb{6&I8+f%M~5?NlRh=?18x!bYY$vZP=(>y?u*wep_lE2wk$hd^IY2b zNh2NChuwEs@;U?1!DXkJG4f%^Fe>Ypr4aUhS5;utH`>gI$c=y-l`fjO36^(ZW$|iZQx;^h{ zzul$dwLI=$q!=HJiXN*OCS3mNQs8Dpe3jZRnnA+k0YGeq{fM`~65S`s*nb1F-&0_E z(_jG=HJKO>=f~81W6c{E)B>QrgXTpf!8zsiO!iedR?~KySkv2%T%uZb&Qu5V#`9fa zxEW*Oj`Zt2_6Hpm_M?f!Zx;OqeXDx~lFktdwxR|2TyKnbpT_zH_&8Z98(dl$GpBTz1Py!*pM(Xqn9XIV^E^%4_q| zG11W>m!Glg&oI;0$+Rgz0=`tz0@;gKZO)aCg3U=krE0MAQo(h2sU4e=AigD#Q?eQz z1FFYeiV$bl>cZv*3;J}WvGVi%J8Ka-j5xvm-f))8W=#G6E6wIHK>A~TSa*M@=w*Q6 z8XDLgw!rvAEgwOi6eej5i3qf2Q!W3p_KnF>)T*P8sE}CJ1$VC9_f`w161dIBl>Cn` zn8><>;)Cp(KukRj3DUaHWMr_jvAzPHkjiT^Ghu?VaWZByqp`6;dgQVyaxYA#Z6?U# zIRVsgRWcoKiN!??7OuT`lA4(xQod_Uj64L2y7HQk{;CyM`Je9A*&mW_Hg45d&{ho7 zcK7?4=7g22^}RgjcPz@H60qj4C2$04LY8$@xBYS3FGwiowYeU0NS%&s14&JNe-JXM z{8NsXPb%>4k6~VqjiV|^?~`1S#!q2MzOv7$W%kmY-QAaHNJ|hpCK-Hp<=!%DvsE)i z#MtjXd3bTJ=O~Jo;BD@Vm5HlwOYM=_{8H!V zez!L7zPELrR4@_!uK(xUj?d^( zTLcSR=YIzAS(wR_V0@7!n`HFUZvp(bH-H|{pQ>O2!gYRd1D|{XJbChrkMZ_5kMJj% zlVvPYAbc_~M-NwWzw@<)ZCI+VLF-EHLgu^?^)#%F#-dv?GS`ke*n|fo|AAa_dJh8L95aP2j*e#l@!3leV zeeWq_UcH2MArpm0W^|s;?@ev=fr2*rihV5C4QNBohM~UQj~ge~J7!lI+@_Qtbzgy$ zZI$>&TT~sUTxP0`pcfl`Q|S}_nmEi}I=mvjqD{GwH+07KLtA&&oEV99wWgi>k*`NF zhpC)tah?}S5tTD9at_4~VdAD^|G*JvCV zUhx=WVD|D&cSrE~O?S|x`qAA9{o_{MeQCQov1^K}ujt%6yjcu)aVYz93BR+m!=>A) zoy1oH-u8*h^Go-K2Mg+I3Uwx3XIBp}%wL-cfi0#X_Ln~%I?H3-UEQvC$L7*)>V(00 zzrZzw{}`X?mdMFc&B>c+0pnW@W-47=UCplMv%0Pagu7>yZ@dp9HV&4c9lxlL+LzQ! z1jU^Nl*f$-KO~hs3^V;PmETN}^6NfDr)sy%Bx$<*w@#sEfg57+ z=Qp1V;^<|tVp?DxZwwDFwI2}+H--fACk4i(xiY98SW3QHNgSNk1co?X_5zH?c1jvhB{5lD?Mi47fL+Rg!}lo z)=g zj^m|CaE|h-9Cqh#ah2_<)0nIdIN}KbvgXXP=v6)jd4>p1IXP)rZccfFY&m@}58g+3 z$nqR8%0N1?xq8Sx*TuzIrxE2+muEeP+DHdGFZo^TR8Oa@+&(;>sCWBbqS`}m>+aG1 z$_~sota>lvw1+^`=3C0SC7%wwi>FTf(vXczt`5GEQ2(DonC}&lI!`}^Ps}wzX>1ON z=H*yvdGY0#07PFZ-vKm)RMx@Djp|aJo@aM{Jd}y!ihXNEY~)e@Oi(9^^u42aeVlJZ zya^t!#OOOrnlH_6PCX8}X&0S1q<$K<)S6vSR-3ih?K#wUwr*y3-^YfQ!2K`we+sJF z?f%S72&7mqIX{qkFg@}O87enXyY1{mBlFO}+fa|A2e+e$#wD9C*lywlML$BiZJj>| zCt2CQA`yOr`Fx};_m|aS7wYssRb9861(HFh67#*~?5an|#Rmf|z|;h%vS^W^tnMpa z`&;b4L^cjPBw{2mc77_?xegWobsTXlLg}It=ep zO~JO%pz-~Nn!$IMax-CnO(Ze>O2V_M-DBIMPG2{-jnm$YsvNVnj_PI+N%Z4i;=t#& z;zRW`?w489z=ONHpw@hxl=L}+a*3duv)+g3`z9MWv-c9AP>k+d1Fq$VA4ZpllH!T9 z6?0xE+o#i!E!}=E)tY?2)H;4#i4vVLWGyBer~ous>FN5H2ZM%A2Db)3hGzHcQgh~w z$&*Ol|3me`UXpB|2Pl7THvA<06E)x^ijnFf*6QWHl4>|3!(JiIQz<}~s!WukRv-m^ zkMxWb`(e^>v(vcImTS@;6#jN2$lu*}L60BsZG=hM&8gXN#qj^ue;afkPhH~!NHGY3 ziOgSWW$oAmfRbS4$@dT(w44T;7@$N&0u1AsL}&j$^cP`k=;vp##9dn0tb77SVgGy& zsP-_C1449}e(mQqT&U)7XQAe5exg>X_~r*c)qh)ZSpa|2boj+V@*FF{)&L)%6~+d{ z{E236+a5o8?imKk76HH*CcBr=WkxAkZSq^F>n_VUYQUqlzBQ)|4nvmbEwry(Z3)Ym z^U+CsNA0xJ(~ggXp0>A!-fvbPu+=szu4mSVzg^GOe@j|f^Bk&%bd${GjJMyR)>%k5 z=*mtHKRD<`e7%2cxMUgsTriun;y>j2;L(B7@UDImU4Hmid}2Y%pRUAGDsk z6D>m-9n5a1Vk?4pSoph(8&m&#YUQ!{BO_4wC@Cg~SyGs}>~4M1k{g84yK;BdxRBect(4KXJ(BWsJ6eYNb%<#`v+4tT>!^hF`GAifw(hjP$T5EGn*&VQZY7ihqDSpuJ5#G3)-%{w1vENRZ>(w z5?#;}vc!HkWl;N3@$4G^q;Eupg+?9hrTv6iWkCkyB+-hmHs>KkQ}Acb&EwS1!nxAr zk2yrU&=`#nwDfrJxtF#iJtf2>fK<1YkS(%$zJ`FRAW)lT`c&N^_2M@hrM!&-JJ+VN zGNhKE9+9n75|Z$^8fMd|BswYZ+{z1L_P_NJ%e$M+o?P5<70*~BgCj-lpZ#DaRRLcz zUv~PKtQ{Wi3@RAw>~FJ$>L=qxZommf;{=?Co0b%cPlK{4lp#th#KgpE-+T|%%dh9r z{X)#tgM))osG9GWLOt)*=nyuE!gp_oQ+!aCG}ulSjI9@Er2_-HIydk?D2dKCDp9ct zhu}SgBX`gZnz9(J1gQd^NUUu9at9SCvS)n&?j(RuCP-xUspOUak?igo+P^L-nY2x+ z0^o1H}hpbWSAIB+z@kB6}7+geDX<-NBX?o7{?jiK5>3k z8qbf;($eYk(g!;*_=S32kV0bF56z}TFhF2N1BnoQ#>$#b-*Iz;CSy(=`FO!f%ymqZ z+25G7o7%v9NJG22B_%4AlpF6igdbMAxl-tvoN@hbT9LKX|Z4 zDdp2YRi~VprggKTEp4@`>6~1@d-{qmXqo~{YFNuzZ!vW2dpO&aZlEPc z^(8*ydPL2K3SUCqm&~e5js$IRRdM>I3%N{}^{uIaGZiF%e0ZIw5xfwyz)kfZUs3Sc z#|^hL_x(We;|t$GQvd`I;f>H#5os~NIBaroYHZ*HKC_@D&9TIv<8u?Bu@RQXNYTCdbQ%%@>$+w z;nRe-^2e#GH3TzZJ5k5l)xRBe3GYip=YitQ%{et}!W!~aS2v4-LOHiA<&ucqX8wC| z1&zBqXN>w(>TK@%BnMCqZvSe6hnUX#!=v(Bj10GEIIJfsK;d52lgm`EUQ; zC7MT$vUn$-4KNpeu#_l8Xd_`D_r*wbW?2QwsTDbFL{L6jI{0E4z5{k{ zQ8YkgpO=L4&|Jzx#^a6Xmlq$8KeCxr%NshkGH?g~XZf|rLg;=ZD@2da=XP!B;P#Tl zE!fIg0FJhyCaFtwhPVW4CjFV0J=%GlwT!lmKrdI0S~?5DMg+EsJ z$Yil)R`EY6s5T_B1-tC6%T6Aa*=s+yBbc@R<*vQpROOX!An`QXinD}?XkCz|~m+P0n;Wo%?wG&)#pO;5ics(aY5wR=3=?A~l8aChFJb<8V| z8@>-;I91++12k|E23A~IztR!lYO)I4>b8kN{kLouzc74zKs}W4lsMrHi5?bg!+SwT z$H#60c9e|yS&bi&c051xT*N$*pQQw>iZCGN7(hy&$nxKju-cP(uYZ@KrPGsN^M5$s z(^FHYpVcYyCRIR(!5&5oyEz?V9jvUpk5-RQmPr_c(7tt1_SqR>1av_~bO)xm;0>$6 zkp)IzSZ3-5^sSv-6D;|#s!gF)Rv+j5#G?i>z}#y06^Gt&lZS_qEfRI5g2Nw^LH;K{ zA8&MJ*xjs-EOeqvD9tJhuGlpp|VCB41dX@gU(4h&$Vey(ZH$kQ^uQPL~y+ z9T-vqt*llS)b1xyA+$xL+jeiprEeD3^Ka@3BN#U`CTCs68~;3o>r_<%!T=8N2%gHl zNz|5V82YH7uN(@%<9liV0HDMcCN{cNt_FM4Ll*W_lJs=Js1IzaU*Y(YFn-{b=InDTP9_GhJp2V~6ak!;3R%;PjX}e+ULzwX_bydK zVd9Py0{}?W>Te{|wrtvMF+z^JlFJK@mCK$+hoC=gU%s3xnJ5TE=WS|e8yg4 zW3MS#VE*|t?OAf@w?Wb~BV}QS`l=U1nC$%%<$N^0Zy3y$aE0%x7LoRq5I zQoBTXxcAhyf$6p8HsQncBg(f68M;B-)%C6GGer(>{IiLqz|ixS$EMJ|2Ntb@nA)7h^>b<1_fdZltBl=MDcv5?4>)het@&zn??AnG)Ep>e}yUxIu zZ0dhH>Be_|1xu+lF}|D?MX+VH^Ov$DLi+7E@tIrb9({&9e(xTkK)kI^DXtS50p%fR*4?lZ0^_-ybAAOYHGxaec@%f8ge%3OmD;S|F;Ve z%WA+oJyXmQ5gYb{X?g?)A0R_e>*BD7;JD1AW1Ul?5nrbER#EpsIGZ~Esj19mGk{<= zjkM73b8+UdDdEsR*YWfSRiw71MSPSOen)XL;a66o$9sKGzutZW{Pc0@Nhp-F<7k!Z>0_4@Z0Gy zM56Xy%RBq{r0CtyN;%jcOtS6xv~QejA6t6~LjmLX*M@o+UxZQy|H%AcE-nn z7MP;eeII#=yWu2WAdut}=WSwSg};F?^eUSU2-+Op|CBH{&8qquQiXV%;uqmmQ^!w2 zRYZqWl4e(>Dm9LbDy~QH?P@%6f!{`x0E!??l!MvLdilv0YOmnqu$ z?-g9pBT%g;v*^nZrwBW*K{CJ#3=ZuzT8z8bh~62FG|DI*Nn~l{O_Js4U{-ECP=xkO zvrc7`SVF%Qg%hheVh$2_M&766cFs(4SX6D`%?QyEL?5G-1ZDKi95$tdIbn|*EBDjZ zqStz%59RK0a*phiw=F)XKvvg>`@I9U-#;%tM(0V3MXa$K!~IyLmn%GKBHj(Sx!L-P zd&C6a%<0vnmR9NN&ew(P#gZhT{WVB&?l!-}h^dQd`k=dbXD1}JDoov|eW%&H{N-osTj~SnZAc6Btn&chn z%DXrU8-r;9{~X(py&pAOKPX@moX&XH-xGuV1KhsWlOd-VDMX*j)-*}rP-e9F?{bc5SCB}2 zfR=;WhM4a~38m!aA}Yi@hjQtAea2W>9*TG?U z@FDIjR*JLEjKXHa*@bh^-skEncyObkCq**od_J9m?dxU+D$2byP5S3|d|8#siK^s2 zP*P>X$;5D%j{^@Sd+F?~P@uD8USD)=_iy{_F7EHE5qJ@rujAedu&hR@oc0fTuqFxZcnNa-&}=}h=YvnwHD3LLI`90=ZS>KZv|X= zlUIR0HFNrTe@lhnwgV=8W z&^K{t+hUleN{9g-0O~0X2y>^y7I$t=Cc4NZZ<}FrRQ@+A=6iH-bfl-c!6}cKuPH6v ze@jf)b#~2d-F!Mf%FKQDz)|lKD*n_EzI0-Delv5MLVx>3csWl~+B^~CEwU+G*#J92 zG#x68N5g59y#Q6VD&FlMc@?OCYq?Cte0p1sm%=!+v~0Mzr|l@aioDsI?Q%as z!)>5DPIujC;pXV${k&NUwFHSMa}gSPR8Ewa`!(_H3xJ{{C8#KoKqd^NN1-!?{Ykn4 zSkc)DjTO7BaVQxlNi1 z{KJm_=|5|wdO=ES+3#SNS8%V)ETX?j)P)jY@JQL*F?b>HY<~Uo8IA&pZ4i@qRusJF zb!pA+N3DNve-x`QJ}dB45R5B=S7vAt`+j?@Lxbx#CPGqw@+9h5g=oxbLO8kWYHMps z?F0S&;ZujWGD`61!BSj18ymlaInuK*7 zQ7`2`oo67806>0mKmM=%5MqJ}2)zg>!^roP3XRbM;6*Ws%Eit{G-LNrY0r9R=nZ~} z{Y*XfTN4u@vd3wg4~j=HfEfCF$J_1;7po@>_c-f`ev|wFk&ra;s=}%psOX4KJM0Jv zwEd2cC;FB;i))&(5T!@AvMR`$#-BOT{biL2Os_|(el_Z$1JQSeQm1oM>ZZpXz-(j~ z@9A(dA5jEImd37{WP%db{B01lOL=FxhlQX^@l4iWlHgV*_3}4`#4RQmHc!$o-CSM$ zi_&r#?_v@4s&&~<2{~PMy+5o3N>tYH3cMF};d_!kQ>=?MY1b2up{(m^A|GUXQtOR^+dxLu)glc zTUV*JTRTS!)avn9HqR&DYEjZ{C}dX6w>iIGJreWFCMHjaQetHRhWvE-PR4C=P7+|s zHnxfpnry6*jOe4zi=>8aR{rPxkl&uxI&8xLOzKl z%_`2ct2@$lw_pBvau7;0nnTn%ToTUyTlA=<*!m0oIR$fKm8GR1KY~MBtO!EFJZND> z>zF%d?svL&dn6gsF~sJMON*g6Vc!_~{c-!`V)BQ4$q1uPE+rP-lZc{S+zB^@8bN7Lop>uXmRNVJrcP6@gqayNGQaMhk77+LSV&GR4)D^AJ_FW;?W>NWErlJxm zI_Beh>AHOP*A7n_trl$cG|J*OTQ-&oz5Zd76D9pcGdG)0uj)@(Ho_-`l{GTlN415% zFrUako0IDzu+wFgmmyPYy`~HTohC!X6G>I`{P(^R@x(ZOz4;5%8h+njg3{(aF0}lu z!9YZVDcWRC=rESpJd->4$NM0RZ$*O{n+EL2MdcW#jY<9qr^xo>OT4hv-!GbGC^wpf zbV(fXF&L!Nz;Xn??WXJq{%F^>U9L_veGlDRcFD}j@PS-+9kD`PatF0kB8sT_#~P|C zlRRe_aZb$xk!OC7pHPm4AzRvuDW8tH!uXSmc!@woEwep?l68xphmV%tZG-R#yd~1^Tze{+9)Fq=%T^OWCSSO=Gc_OgRmYPrkX7ujcYnVFS2Bi!Oc z@4T`iqOWgkwEqSe0fq-FeVXK2;jVf90XxJa1oh))o&zg(o5g$S_hg2Fg-Vf1)Y{sP zh4z+owrn<;Kgfe$q>_IVKXlLd2r(8ZC(zG7q766w%jBdRz#x5Mb@hgt$|o(q z&4SL3)0!nkjWYV0&poeeTn0#xXJ>9r9g7BLsuWp4wq7l>bN-kx5;_tX8st#v;>s}Dg}Yh!w7-&fz|itQwfaFkC=(`uk*H6SDR{bzth%F{+V`zQ9S7_ zVWoVDrnL&dAo=%y#(w~Mdbw2&|J%_(H_<}`!Du4-6+i5On@*YlAkC&F=O|D%TIdqXo83Q9W82nGbg%tW3GgmUN#^AlsmD~oBNiPBp~dU zBF2p1h=?pZMHB|lI_8^scjjm_;lCOJ`IT)nbTr=^I^6B|1PX1Mmm~@VX0(8(#RkTP zsUbJf+>+xQ-nU~dAJRyQjXJM3ky6d|f7-8?1KWw|Zsddv_;VQ#Cjt*qGOP6&06Z2ZG_th&`b&p%;-6EpP znzeqGkxpKlhdd|)DnDxtoskKtyL%}r*u$3N<5~aU^-9-OCAVpSg~cA}n>T%}&kwd0 zd^a{d)rWQ($PW}m;M7(%^`(7nF7fG8L%xS0;$wqk`L&6H3>9t&P=5ov@5Q0S-!AV1 z6{AxiuskZ_<*FTnbsyNUCZ44*IiRv`SIZ;7&u`nmW61@F*-u^;) zv~-dRvBoj-rg}QfZ4If+7+JL|t_Md%(Z@t7#OjLeVq(6wn`aq%UCRe0X#79gSNE85 z)OGu&vty0eBA8e2kt6y{4)$p$b3?B2o%0>t4^Kr-|`S)47eNFd$bh{ zu?pG3ym@5>up>#+P)H5q-{#aGN&_*hY6uP%eQ9_PnXF}q!bHjj#M!|c?P!@q6_0Jx z#E78vGex{JR85)g3i#7RXfcH*Z%^dyq#1wfH;)NEtAOxSxp$Ov*}AaVnE+62t4Is%$8VCJ~Q)R0x?8A zcu`}#f@nz*o*MYSxq&~LqXYMw)I zY$&l-pP%nR#RK>Q12uJ&;g~bMi{+iDs?ffus(_zLbr2**yUlCaOt{ z+meOf#{BJI|G{RsV(f{)0CS&ZykTeHtPx?|7=#^3wfXXHJ1M^izx;PIz%k0W^E`Hr{_dpv zVKnqgs{1jryYoAQN5aoiVk=~QvY+GQb60~CsYl_*jU&m&YdWhvp}6wD8Tau6jWHEf zXRQ7n5XBD})gBd|mX1w>+ly@h0-_y(Nc6UaOSqtpff!Z~2D1i36p7c(#KT2wONhte zVg@r1|BIcV;X5uE1Z1TOOZsMLU^Yl*v3JMfURL!%%o&dnn&{bMC&ZqTlB~EP(=tn^ z&WffL3e7CH2Ckqw!Jl$g)0Hz-8zwM7PPWC#@Ag~D<*;uaca|UcgY%+ z492 zayGJx6|BCT35<@9M9=G6{mSvg zCmC&!^NIq+f^$9|2yj5l0IHU(Qynhv;WgHnY#7XF1r#F{vpI<-^=5pT3maq9ofiJ_ zFgC#UmjTkh;4Cr{wt*IhEQfv#_7Z*ed9Km%DU+q!s*}%}!*&_lwxND43;Pl{}psLCAN8 z7~f@Hq>!)c(YL_7?#FW}{ORRYuX1`ni=MDIzA&_p{o;M4meU(&f4ZdSSuEO-vJsFd zDi_M#vYhu9xfQfST|II%1!`XWIa}!|E@-3bMc}oUb#oaJC5Ce^JHWD4F{fnC=`8(n zS-jhSvvtp%`Bi;1Gh<7pXI4sMKf#{8|IQ>1JdPi;S>M!vrGht6S8u@^zT&rW=#;7F zoxwcp20pl$NA$FgaY;+&s7>iohv~yM*eViMPx?BmYG4d%S%HOZ7mGu}t{&^*?$`YR zpr?476*NX8QzcMl3=%f~@r2urF`Nbvue@BTH z6A*@8JNZ#~YQ`36B<&?l%cL*gv^Gx(-)(3Z(J0zB)`VCKoLMpBuPOchlA8GJVrs$y z3jwzMEfPaCffjZ<iKw-e=(u43NeQh`ArbJ(EdBt~c7-oCF`N66YNQ zxV4cWwS>RI2Gw(p;9a7zR0}KE3>)qSRQhJyh}}U^MfT zO4U40)F1l|rz&DZY30I?P+@NI)|Cq{pk%5BOyFTQOp-s>iAFH7rHicrRmTd7CIxR3 za{o%|K6Cfr4Bj-Ic$~Bh3tN8+XB*`h88|g}YGcsMj@J(!W>J8iLfUFYF@Q3{?Z@RE z$7{J&k|FB7Z}f-JmFdtXNMNM0WQF&~J+Ci#tN$NS=iLr>)UNFzdPxwS=)DuY6LoZ9 zFnaG@^yoxy8Kd`JMlaEc=s_4p5WNLK^yu$Admqn!zrp;o=C{^;U)OnpRh8d=@b~%U zHhkpl+%jHPbq=T7W-={ z^E3_(L9sYZ@lpq=ScF(C`Hcv9{z+JqYF?R6?czaX^b!-TMy2PLOhCX3A8$P&#~;u+ zD(d7Q$3jEjFMcId$G2-P4y-M9KLr16Y|4jP+6GMFrfbg*R_EX)xFpJhClBu&ohi7rQu6gBp8?;;=9 zBy`zQ{Ov@~k)?-q|NjY2d`BN>P(`OJX}h+!2K4U$3>7}fVl$8{>P03+RI~%dKIJt{ z{4^5&@C|b(BB90BJW&GR(kd_OvBz}>HyR2j*iS@gm`d1-*&~QzWW`tk)0;+u?8PQn zym+4l9oa{@8oQcE0RU_i`Jx&xeGxf=J2_c)q<`+NZ@=#RODZ1vtC|{`moYlOJMOqy z$UUP_QHo-J6ChD+DqOeUK5zUo(%hQ~y=cKy07%Vn#&0Rhgw$419+}jBW{H}f=&GxA zYY5$4Uf3@P*h3D&FLI9@b3|A9JdmB};A6~&Lh3jFk;*;)Q4P zTm^17^L(5LpKwA523Thw!?+99#Y1;TlE9tvo6g9LU9YkPSv!xE-?oyDer#Pw>$0K9 zM6I%NWruWMXJ1=}PnRd#XyoAXoj@^Lxq((f`v^#IS?uNk1N4)I`e&X`*aeWGku?F;1MT{fmDNht9wFAKWHv>ZbFw z_i9>Q>ippi2od_lt)+!Yrx|$?5!0yoIi0OGqfCVyuhvMKW-Nqg!ff{_0_6FF$+H%& ziYK`IGlT-6O^+-zApigiz{gSMcTVA=Uja!=Yft}@7W>%E1Vwn(ReJca z2T)BN?z^aEZoa=af12Z@?Yr2vv2?Tzu)W#5_6bgB`O2yyn)&_6hZItiU`2U5dob&n zQ?}%<#I6Asgm)G!$fYys@|blZ@U>1>SGig7E#6Y9GhZ#M<@2fdw)@#zclUW#i}mT- zFncnlMBlP0Px-v~);hvkvk-q?0zO9f8>t-rZqk*wYR2ox?05R-M6zqr=+`N;M(K4* z2JHkB_A-nQ=aDUbWSgHsljU8x9(;Z}yCpBILI-$nP#BDwPpPF&ll9Ge8(}*GiDctW-KzBuM8;+9r$;x6gBQs)Y#UwivvL0*L+SNjl_Zw?NeJPM&wS}_0b}drsF3>O~7W4hl?TYcwSZi%>vwT_CGGn z1n&(e7#qv~cq@i74c3==&dz+^EqpfUa9<0)VU?NAD3>GRbI!>Yc$vz291ZFY^75A- zz#fU9`;CTMUsG>p(&c+Rel;~!w5}6yG1Y%R8oy=Ve?B~!*#OM|KJaMd# zqAY|#>Da$Qo1%$=ulPEkpq{goay)i}I4OCqs{f}k*sRb0U~cPNpm^(_4I%|*ZiIhNj|yicJ3PZB=M?C zHS;Ww!4|w&^XEz;hLRW>!!>knBN(4qvN5r|*4t4Kyf= z-~4WE=1hO++rlX?g@~8fsD=P%a$6N@0D!lZR8{~k~i!#pB)_Oj7ODUPye=Rb~80y5Ub8twlS(U>tQmM zAranTBl*+?Hn*t)U&$*Wm2s_ZBkY)ApHkdt3M3gIrh!|BU$?ya z7t9R}%OJ0TEshwnykJ%{tc{FhWRRyh;yf1W?A7Lo11UJ5A|&tr`E~ZGdx_LKz6k~^m)+2%io9Tqh;b$bCXa~s$_CRh0{cEysRFayfl-PtSmKr zr&qIfu9Bh88Q}~YDxV4952tvrE;-Aw7+vXfeCw??yxm(1G&^VbEfUPA$vaL4SWnK zKOXdnFlzcHj|Y$Rv`fS;CD2)1xZLbbJA14V&KsVQystj}6>32^@zq7fzo)NjfMP+D zk);m1WqKqMNDTEW_K)*C@2{*ZBb>uIohMoOv4g%Xe$ye=3(iH7tmp4*!R7q6f4 zv5S%o7!p_F-4vLtbj=$xz}YoFr9-s~FGX~O>OS*eI*x7u6&o05G!zu{rqduXAllw?&-+suY9JPAF+HS1L%x&RZBm9S4>diW6tJ2uO1y%oB5bSWJ+ARd0?iq7+be+=z*aM5#WH{ zP4@aC!z@XkW&f#CUYEKRq?p*gOu6QDk@|S`0AJqXn)%{W*mw4)boCf>r91yxfHJ@% zm`%UuOAm6g?CO)*vr9)s7Qs@SSp}x0J!xa+)oh-%EbUYj|8r%1Qdyvt30+BPzxnE5 zY5n-?q@XbK_WMrMSXVtVMdjAf{pHK=fOOr6*zL1aiI)WPAN0Rh(EKeQK3N{Q)r4bP zg@V=fw~+y@u8?h~Rl(2WY{9Ag+w3y^W+H&7gdOZbItwUinxL4ZkW*N2kk4m?5Lni=kiOZC(Ec&<+3SO2 zHUWh~oUmJ-EdsnSKg}^6TO|8K0M-6hQVn-iG}!|ADf;dcP zgsl_}OZ0L4DZGWy42imoewNISBJvXcFhGvJl{g!f>gHaIzjG6Edh@&zdhbqVuvpFt zdut?|Z%e_Lj9OhQ>F!kUEdqV@%Mcd0c3I6iM1-Z%tX=~(y)AG4(&ENKT=I;`TK3~~ zmNy5l^LvH^t^yfMRiC5HYutulX`{n8_?k-FPS5@xqGJY{E#722H{H0OXDyI=hXltz zo=NeT!O)aBRh#A4321j;6qFv)6APzUB^%S8u^;f{rRq?AA41(&6euvx#*Sm|+DJYN-|| z!g%DuT)aIOGDR5%X2_`nm^>A2vbmLjZ<}zK!bucQqq*B%Gox1XrTbIwDQ|$zR6Ez4 z@$_CW67z;m{BjyMFLM7r>Qsc&Ytq{rN*IMyqc$LUQlBEts8VYdf<-R7dr{iB6cP`X zww|u#5|$kW@nsoJ#WWUKLiBP%Y7tAFu2K1l9L_KrugEBapC^XN;0n$+-Ey$UyMwc& z{QNHadX|07+Fgt{qi6Q2dUFDr29J+@?nb#uN_~kuuO55osVp)oMaRD7#J^zmwom1_%7h0Qp5kbQ_4VRaVK7G8avM zOhe6%XcMC^oj;~zajB780?QSuHd;n3S5TpY7cHxz2Gn35ep>5;eicrF4Ju{7HN&1c zV~D)QgstNDwS4^ac8HHF&cBitYfN%+t-I;se0MxJXR!yW{7|uJ+2WEV$Bh?g7D+}9 zIS_fw&0URvC2N`|XG*3wZ#ngSUzJ7c^E^EXx8-X65hNnq9MLN+maWbzkIjw__?l&7 z$$*szlO>o*}D~%5?_-9o_Z;Quh5T}=080pa4 zsE@Qvw$xs<)FMIL9j~t4l9d>NrjfeSV&yyHHrD?OQ%1sN)+JRQ)6Ibqp$+Vn<>{1B z^6?xn+iDy1k}dfRX5KFh72()v%*t3_ASPa9VHS0Sy5L$MLmfevFkr#3bmlP(A|FeK zR<{$Qh?T1AtOHWVf;EN5X=o$~$|~|*Q+Kbs^*vu_mI%^lDa}r>DQ1wxadEC+NzIIs zpPsla9N`129pR0nXvMq}3_!Kf&&j)1K*D0m$gm^Z%J`<{9k2tQ$H!_elvH^f0Ez>^ zi~D8S1{im;h-KIWi|)(V=g_~ep6*YdHfh~YjvKaAJSmiCt;CYZE(8*4xZ2s=e8KjW zGt{i=L%y|ZH}auv6VV)jz4)U7&&SA-_n%Q2cQA_D`iRdv>P=9tri zJgG249&etfX`#*31wAxVtOf6m>JzvUo7%X@S%Gxz0Uq5{e|n$uUp*tWKCcx$yJv+> zFRq5(at#WkSvnXI2Su)(K4SJiZsgxXtemnUlVDF4@MfuEo55zg%30iCPH^*ObKSH@ zKtaYfm=}vmg)~MERpf8B5{{nkbb_TL2l3Co{nj~DTsMqC1cK#^yXAO!O3B+ZWaP5y zqxHIgPyZs?Yx<~ZO-<(t)4e(iTcfyqs@(RY;+jOI(qStlZQJ)jKUTfJS6EP2Id{Q0 z8Whz4*+f!)rqjEqOo)I9D>hOCWvv35H|AU5#-RO?$o0St5vP=tX|e#f-!ZC*oBroJ zSG8okW*SPkgKd_m9)~24OwcV?0bii!~WT3J$GLbE5AN<%_f-5VKVBt%1-kH;!jLV;*DebuNW;{IpkqSHF}USj29$x7Nd zD`wWw_r~u!z12lz1)K{5*>{mQad9Y|bcZ{BnfX^c{*UN`LxWURjV^WxF`)^jSr!h+ z4!wL0fdHj{*&c5MIdgEcbAS>i+Brr~{Jsw9Q($2vM352MluXv^D53 zmytHBv|L`c0^t!vhf6$)q|DmkngZAr3>aGxLX@N$5t`5_=Lo2?)TKx@O}*o)dv9P zaEK9$-T-=8kJJDok76c*ZzQwjNbemnRF!}^OecL`fH$8G?T4W=DkX7|vkYB1pD@zC zXaHo_sB+99di?`T4@iVS%72J$HxuRIuKTqi@-ljCifVoeeBj;zpLY^Vx<(1jTu{$= zyG{zm(gs4Ev6!;=<^|N@11!T8_=^Vp@oF!^i8CyU*j}4Br5=hG$6_%Pd<9?$%26_E zun9w^*#~oCAtdty-vpj(pC3*i{hp^nvvG}}{06(hO|hVh@m)vp!kw1dWM?GO>Z`y& ztBO+ZPuG#8;}Hu^mkzEOp#L8EB{G$Dnj7%|e|{|VN1ik)WbbqNQ@d+kA@wM~`HrIg z;1W}>ebn~mf(TN4OM13DJI=uPymv2ir}gyLJ#^nM|Z|EXc~nL86WyWpWA%kT1}urLC=pV3N-HWPxNZ5kCcM=k2M};K%$|{ajcu zsbGq23hlGV(EG@NmPvW8$r8)u4iWc<)&3i0s(ToT@xSBg>!;qvc55(xB3DAhCyH2w zZPg9{#Bu5XcKr3`bmw4`xWsR4zYIL&O?hbFX5a@F%$O} zou;0<&;9>AD=$VgPY3Aw1g_4;hx#9$Zq`LF+qBOkW>1+(+DJ{gOcRM__R zJ9AH$M=2S0hx+r;7W4-+$~3FPb{}&^LeoBqXPhI^y~rwzPTnUuItA#S_rP%B<9g^a z)urJu7$(dzUva%T7}B!H3ib98ga9F9-%AAGuvcySv%Y%TI9L|G~4{P$~Cu_%X)<>cc_-4 zhC(G3x=uh!Tqi1#|7J}haW2jDM~*Y$*Mwl^iw6t)i-QC<)e0jP?$MvWzR;Jce0IvH zL%xjGIpZh1{v_@~<;n>PS@G)s=ZyXbQkbjo!ldEZg!aMI;JJSU3yU2ctctEeX9nuw zsI95uC~K=ga~zH)E=kwj4`3lI)|7q2A?H2K&w>NNh;CB?M1#5TO8o3CFg*^H2Q`9R}#*AHz+d{Zij700xY_Wx;HgDz`fRzTw>K(-M8USbKQNa6tA5~iiwL!i+yly;o^W7k;f$^J*_`&%Q(5WHmUjv zyS?;vH#DQlr7x#JeepU~*TH3X`*w8wes*NwSDyjWhCsCDWT3=zK7RD$B|&vZ zuWyN*hge~flajUbk29Bhr3M3=?=$E-x+Xjc@bQ1+)khdVT(s@XdU__jc2?TopoK?* zcAeULtVrhdS#X0Sr7VpEe&2Mry%f@Ll^?7Xox#Z#`nc%s<0)8}*9-p6GWpx^HUG~l zQw^T*z&5jsJ!8N7ATOV`^r%8Stw!^AYb>61n@)2=sz04nU@oKd7%Js_C{axaASWzs zo}50aLCXpY1*BR|_*sD4wi`n6gnWv{rHDkv@F!p`(GsGTGF()_Z~avN-I9jPXkr}^^QeR|&;#6PXr z-%W_1(khfTg>8X*WB3SajIy1}qx6ah+gz$QmlF0*`!1&ag}bSf?jENCdzGf=cZbIs zzgWNgqMkQR~sv-V(?clqFwQ|}Q34Weq@wvz5a7`vL%8JQP*L}f~O8% zC2jE0AM>p}E|Y_jZqG_4S*L7GxjFw>*VaZ-uk5X(uQjGl1!;{AzjJJ@F zv!$rt2QuSFZ~+N~HQ;=JD*1wKBA}cjbf2C6SjiNJJ$mEe`Gepbn4<9X$r+ZBs;}=f zO~O)v06Qi@?iTb)oFhYF8Hi=UB)gWgRhc_RxcjhrfGe({r82g>%T0Son22aMMQ-7xhs>gm=zegvE+a#N-Ud=RP!IhEfe>KE{99^ z-9s;?G7QnLa#Wk!IV&giiM-p@v6=Pr*o)ca6p7@%Cx@P2X!P4P&8g4jZYmw0+-Jgf znaJ?FGZ^iCe2p$#BMeKAf32^Egg{=V%lR%BU`xRn&`V=_I|#LLJ^Z%{^UnnbHz9?gW4anRLsE*FDITxJ zjMvA}vo`|-Q7H8OlC;ic{1}l)o*&~2OLahVoq)#BwaMX9%yw4aq>ifTgd9tNE;PF0 ztAJy}YQU8f0&5w0Xwqr|e;&OOmYk`^)ck$7Ea(FFdb4=eOV(gMm8k}AVr8|Dapa7G zdiKQYR$n>@q|ANSngh3#0&Xq;onW3aM%9lnt_ZJ8b?pcAx`j&T>e+S%ZI4tI2J5O$ zk!v+WGVCWMx9SAbP)tax34o;8k`ixllSTY66+oIItO*0Ff`B%zDP*^Jhr)*vq zg+Y&VIGR9zJb*c)EQS$zCiy|4x^ylMur?6#^Z}is0FiTdfum-OY z^z_X8CO|fFZ*^tPsoG|?X3^wSsIDhayJJCtJO$a^{eh$q!-PxFURR0k+qUKLQchKz ziZ<^Mc}DOT6TkM!e`byXuxAh@da^ggk#r@aJhk~UnUB%q1I9e_I%s>0Bcl2BfQh^_ zlMC~9oMK`cDYW~;6VRU5T_O>=p5g{I;voUwDGu8M$qaZcNCYRQ1PZ%ZuEZs3H+%Nx z*MhePZ=RQAax{5DZ;Z{I(btM(48I!;&H6}Y{~BhpM4mX`pNIKLh2M;xHb2pV6q|B1 zUBWgUAiVpMac%XalM~I3dC{wZuPjV&u$ie<$11f)Io4npIh`UOVUA;U z_c3DXG4fO4!`AS)*93G;lUvKfuccRhx5ZvY;*FvXq3^xBp;8jLn*%KM42cGj(3+>LvF z&S2a}JePSKVl^1g<&)z?k&#gnbGEaPFhe7Ca&>Psm{ccw^BEx*HqQ8 zsj812Ut@kAcM+vz;BsH@s&1os$s02?yV`v-(n7&G?9(ng{|8@qbSQ2o9@VWqFl%hU zv(mdgM_*Ce#g|gIbj{9PJU8aU+i9<|2L`ph3;p3TMS1M1`Www`F-is zmWhNB<}FTN{#Q&=hd$t5_wZ?k74Ua*ekHWwEfP1Hil7wyO4%w8W-Qkp7X`_CAYYc{ zvH%rFdIe^Z$%OQbu`&fpoNzrXdbGcjp@_vjS`}w)AZI!AK4tw(M4H~Ac-laj9y>jU znLe^Rt;#@OrkLd0>t>h?5lAYD^`6dR>$J}b-)BhFfSZh{jkW?u73-t1`$7z`8d0OZ z5T~mSMsJnO;jp2W@uNlwI-vbFpm~M*&*X((PggsUF1b!bET{{ZnW~JFi}&mDSb2vj_e3ZxI>umt8COs7n?BZoPe>7uUlF6f>MUP5$Dxis2bV zSmX^4F{iCLIys!Or@a@~7PXbkYS7Z0qt}h`3^NJM@>RNLOMk13o#~TGM4hgKr)vXy z*IefJFS1>8(kC%r^<8%NU*u<2@^+l8{>@2pvmPDjV{3CP5zJS~rrW?M4gj&sL0zr{ zOnuk7%qxL;G7=9K?mWB|o-V$Rc}l#=$>xPczO2hf>yE;AzLm+`L0_m7RBfhORPFrAJ zU}d7ym_!g4fy9nhM8{>8?*s{{buCoM{S|=R?6hB(>!;BWk?9 zm2_dIK008gKxPqV3YxYrsvABs=KY`vTX0w?C#_KR=bsR0Z(C`a;+xDSTTW^>CoZQI zm(K}5-3?HWB~i{MrsJ%ZV8fD}X`izRx!;I!&pI}1;QyVU7{fZm$zG&WYmD~V>i8sQ zdly-TDmeb*)>UDtvr-j=*0?PSb=_60C=;xbBXB5(Kpdpd{tr%?tL*%7^&^?Qi8;V~ z8k@df3BU$`@qMLB(^GL`GqlwOsPi#XIwoS1<=_r-nC%3l?Z>dpw=y}%5~pI6$vXas zM@20|KF#RMA?aW?`m!R3Rbm4sA(rKjE*nLio#y$xOnDF(h1t;a%~S;vj8a=(qd>#@ zx|j=@sh~`@?yjf$nOx&vP=V#_L>|E(shyxJ$M+i;n|A?Jaa-y`!bbQ;3fG^W#LFNM zB49PaFTtc{wui2PB4Vw0hv3UU+pIG8#k>n5{a%&k7ll$GX=MSWD<|tRWsi5ji4>Xc z98I+snWvKEzeInY9l1b)4lo!BYa;J zQM+GQQA@~CDmS^Zdg$VIdFSd!bU|j{GVCNe(M;zuLNU}1+bUaKAIQq8V2}R&At>}O zW~j3u^)cp|@qQup61fQ!IKo?YtqdjZncIYk!V>^3*sm)wTO z{~WL1J+6gxi-(GiE3Haks_p-Q*B16=;aPk1pS8*SMhIsmfCA39uHe!o$7Q-o+S~fA z@sjmA%qy@x4ytU+4C3w2x7b6iCqj7g>8*!rKV3T9qcndufqhG8kwO)8!4DtpN8J~D zd|iX?#~-LwOUk8XsNw{U&^HB)c?4$h59K8CD&MJY$+^GP&?)U)qWa~3duVUeRfNO7 z8~s$Dno72GjmWp#zDfx_e+RO)osJmz`MZM(2JSaq>1=vSozz@4mYJ50Lx7SfHA+Ig z@2C&bWdy2g)pD4fEi`|ZG$NizF9PuJHn?;k9HJtRlN=*X*H?JARQtetKt26UF@#co zA#>BQ_{&V*ba3UFwN;gm*MRq9UYo?}-mt3yLD+?`6uffQL z!Nh?HRy9P^d+*i~x)+8e1Us-=JMyuI>(qkQmwr-cj?8kTm(MzhRD8BAU3H;+Nk=jt zY1?Y3nc3!XadMm+WnyYpuT*N(f&j^9Dpqqvk|`24oY0(fS7iuXSm>yVHxOkU}Y(^uZO55;Sxzn`l?d5C5(x1`R!u**l*g4IN?s2RRjzZxf(H<@(uCah-p`K6Kl#eb|T@$IggFHiHFO8mQJl$%fjRt7{)dm4;M$0{!yo=WP2Yt6%a-?%e*Mj7 zYxk>rYi)dV@k~622Mno9oqKxf3mtS<>k<2@6Uee(nG!0HD~aQ*A1c8`mVvky zKxt70g~+b>-W&%RwFOcqDN*wgDEIUVka+m%$cBRtKb2P3+``id>@ayP6Zwvif8Tz!L<{o+^(ce*r!(yxQ zplIR-ndi&ru=I0Zg$fx9OSww)_C|`9jlvVOQf5wQXbh=xyRZ8cnl1F$bs?g(u$WSx z%45I7;{kU=s4;1U^{ru${w8j5u!MS3qr+JC2xTN{S=pA6g~&krq#!q_^E*dPI7b+e zJ|g^(f!)7&@AL4Juw0Icrb%~wRA)#3`U&1dQ<^?C#XOx-%W(h=(k!Jh=^YfL%v;Fl zVq(gjzT3L!`k`xe*h!Q7;v|0vd9Mw5JiN8ab~#-=yu`$!r!!=j$Z=_22d4~{iO3sp1r<1PZc0%jzlF|CVEDZI*6I1=H#tLw6PBHiI8 zWwp1#;sqqY$glEpzi+>@8I22Lh{PUvR2WZ9sS z)S;{l9E#oW-&I1A761TAH|N?m^ILB~-Z(v03%l1+_Q6E-X{1=lPoXfLlelfb@%9Un zMMWK)=xWO)xm6#j#It?+A@Ga2FhYl706mPDXeaPU2^pf-1v|pZh)Pfa(_({I1a^wi zgh+1t$hqXAE^}=aR~8#569h%&h1|D+Z+v_@K+AeTLeyIS&Km#W=)dJD1am-&C;`xS zyZ7VXJYMp#oZKrofXl0}cPOdP{g{`xGz4K7ur|b8SOjzJ>{5$=U|*I=$n8@ILEsP9 zrwvTrt%)l9A2%VF+kphX#FtspOcFCIzWH6dul7ANSKZsTGLX`}|Gq`fMcpF&H)47! zS0tri6kSbodPe%=KL@|lxKgzUPS`D5I!7+JZ@PpeifRzGeo_qS!&U-Q>E+*4EtXDKm+lYXX?i&XFCz7T zs`UQD)So!YuU}nfK+UwhsTTz#nFy5hg$m7j9+sT`eT#~le&2*ADbr|TEk@bU+}!po z`{AKU{nG_5J+rVg)rthkX#>M1*tp~7yV4J0eRLL%_oTbXO2IFnhMtsI$iwBhRY<4R zPwG2P*?Sn~^FP|>!adFX>1p~C{8Y!!r-t3exkNiQ0$gRy)$|~Jv2o_~$E3CA>y)QO zi^}KK=d(~Y4O8f(uY05C=`~^y1=SW%{iy&s!Xj92fa`JXW!ACjzuyfIDAZ&&fI5yh zE8r|X(qvMia1yoW@oW#z-Nd07zLgUHIF(K~`0Zx7)|NeCZVpXN7R*`3k+zt3cd|D! zZBe>fg`%yaLT2>n+d%4@-H$gra>omLL=gpw+@bKux*uyjG95ZPD}`Q~T} zZBR&-Ks5nPQUz8q9TxK1HTib53F8xHyQ6wVf&s6Yo6GT^Xf@E^kaLxI(#I|&s7!f2hZm-UABX?-)C)DBQzcbw?LKyQR2uM}+X@s+g*+`W zPP%Ht8?J;c{IQ8?-9BtB2xvLPd@#I$C>y}lqK2OalW8$R3}re+MNlxINZ$97lh?v& z>)mlD zx*yG41TOp^Ljo>KcNgr9sVZPm>QN(Otq%hVQ(fza9pUF^HmZEp{B3d{Hn&+by_O^-^Q50uVcl129ii?w2#L4MnE|9R zQwKIV8Mp(s9aLGuYPTvZldsl(TJOVe);pj79Qr(*r5w2R|A=-%pD5DcB$g+_e|eq# zy*m2MXW+`LTmseB)@7Sw{=v>%Nh>gbl9%h$5Di^mYdw7XO^05jCB2R!8LIBD5 zwY*#-LPfp_)`n;CG6V#Q^(_6Om*v%(u^WnxoL>JJdSl^!v*T~Kq-5wF1ap(PEaoa1 z*5#AqBD#|+9SNSaiy0@bw^4{wgEm}MmL(+kN%5;!Ka zbmMgy>lU5zlMS3Xs=u%i5_ufg#g!>7vXlT(=Eyk}u~6^}7dIDqUxIPz;~99HTRCjW z1@(B0+60jh6BU(0;sikc|a|z@8;1`S!@>hs_k3>1+32{}9R+U1vCCswYJ_mW)_KUrcD;^hy`n z8GoWJ2_Us+#-J;L5TR9zLf0RMQX&H1gxmC#RWJ+5sc0zkYHEgZe2d=SGt{d;BD7_6 z1Br2X4Xcq(HAJN&74U;e3pJu**`I_f$SGLlfv+R#l`^}#jm69@P4ExHf!jXPu0oMD z2M5h}u;<^ocI4OYw8SyDN?#V%Rwg9T zHatMCmK^__B*zeU7t?`)k**4-O!Cp}$Prbw%T z^ef*sI+BV8iszMkE+6;=J}T*8O?yX{gfwhhek(!d+C;#}wgKMc05qC_r2;+HgWh#T zpnBG+9cw{fUxi75y%i1K8kIWBfy!=Vgr%b+pNa}Yp|`QdQHnT zM22>vUZVfK)ejpfl2gSlshOy=P|V4NuvN=ZK^^^zX9EQ^ceI&#)#JNY6RH2j-9whQy(@DG zm|a_2ssF_K<=?+et*-o+CH|t+zCj4+!-0~T zkT9kYd`dUON0Q&<*Pq4x&kW#}WUVuicDvpZT2ym;B^QE(t z2&}+VvL{E%xm7%-K5V*xxF^N=(8sx-N(YtFLoY zD(I5ISaH?vJ#NK^R+GL&5HAX$yzPd-sG#d8Bm+C%ngGo*stwVVp2LYP%l1{*D+*${ zmA;~DHH2Z5$VjiC7^ho+OFEvbfmys)8z3|pAJPHB#SBkCj#!`?s%3KW)~5zC4<<3Hprlu!QReI?6)GxR#siiS6}4Gvm!%RA;cB>AKQj0H-*qqv z0md2^>*w)iFONz!XR$xvwL_&O0AQdOapD7=2copC=;U4DI8;zuBd9Isq})%oXyP#S zAz?OUH;w+i(U5>*KaQFz0xiUbdc;Ukn58V$m0(mS(NRvR^+;FfNv0@roqW;{A z2>b*v_1mOWIsOV_ok(2{Ay%NJEK#eawkttYmFtQVd+EZ2>`$C`lg(J=XrGUKpRNE~ zf%pgB;perefL7hRWs-xycd-@^4+phYP!$kHh&R7E7%Uy|;Nu_sq4CI+rhgjL(hzdM z6BEC@Gu1&eue>xFdi&7?H{RB*>nCpAfziB^59*#jVM%gWOace z(C@osReWxnw6Nhyq^swvD`x25y<#PC>tQR7*zeBmZNSe{N@2|k3X@B>Fv8rl^#xT&b(UJbo_e+tT^0oi2vHRi_UX ztPOZNUC?aJ%FLFf-P+gGtP}Ws4;v^tUro{BHjF<{o~Bd<69~zvHGBvh=R@BGod6)sHQ;u%Scz2~aiW>&*xygf;sOPEiJ*1{^$CJC4RbA;y8D)-jJM7#$#q$tD?noV+C0gt+}K=%I{bg&sUga`e4$%;uK%QWmo~}>k?1d zzTDU-8hbzL*~}1n_s3Be;y4{hWek1?wQpJaCHupVX0xw=c(<(fn?52_(hS4MPOqvi;Tc{D(I zYx)sY*ncJDp~x~fJ%K!dJVf^@@FO2NTY3GI?9B8ufKKB*ycuf)h?OY#m7Jo&GAQKd zM&A2K0viVy8cUc*4q1USE_S>9sf&Ale!jk~Edd8wC4{4#jX9k&q6tLTMkKE~jStK~ zEiTuiBmDYJP~FzZA}flMf=p~bkCD5aCCVxhdl0B9k5`nX9f6Gz>BLMzr#--FYZ1YB zo(~Aysk_9B=NI6nM98nSaV^TlunQvjZa6SOc}nEsj#%E%84U+{GfaYvAmfr4%+-i0 zjsyo6ZLt*Ote{X~*oKrhW_vaK-f1kzcxnA1|I}ZIGnti!q)_Vi-&w-AXaU6_o%vsc zFPWotNFb=e5=MejuUFlO%y4w0&_fa51^%!ZMQ~6_M6M3WmD;`fw9jiM^+sc43UqpX z+>KLZ6Ii<-m!qvAYLPG(ER;FRV8+9>h=LYHH`-j^I+l=*Yul|MEAEgE7@J+{8A||? zCwiJ&u6T_$m{(v^{c*8yp+u8qpZv>Y;3zrlgi?a{#xK}+n(y%s>x|I}&+8q(4f{gr zJrq#N9_nUsTL{D4y7yYCO2C<(Mk&f=HP-1 z7Jkqe3sjCx7wmCzFV{Ory>jAn&mvU9R=-Gfahpy#^6&D&OR$=FOFmLJVF^O?b9Ko? zqta|c1C%z>MH9m#)U+iBv%9wh?X)cQ%(_hP6SBnYBlh59?ceQ6_qv50G~W0%n?RT+ z(*;xB>t+Nr^HI-uctEQaDZ)>Q6_hVje;zjMrMYG%zX^lFK#zZXq{ z99{*M&XT|Uq*WkU3?cuPS`@8kq5{NzZ^+IRuEHnlG}&ItG+5_j%E}9@_8HDNUSy^L zy6hQMxA{`PolM|s<(!@nl*7tqVMbGfO-fdxm7!G&0Wcy6hx@E;3li`xz*uEr1jTK( zMusow^&I8Y-(kfO=mKQp5Gqc5f+V)K?^(CMw@J|#6W5$jR76*YyDsv(B#;X?aj}PS zqM5L9v+IKOiHyZF*F5byRXP+jOPnkLeC6jFK z{yXkZm40^V(xG=-Yg9qwx6Xr;bz{qsFJbt9o~HUA#_e?hp1~g6f2@za8f~3_P-&3O zn9~f`MltN%4&EL()3?;)(e{S?a#$oF%{I&d^<@=O({6^iYh}{C6_f0Dib~2k<@koJ zW+a&p+naCe%}Gc#gzat5mb>b}_)DNy&y6=UGf>mT?0vHp>d@({y<0(E?jCx8E-|yN zVvUh*H8rPr38oahi1U*5H}CH_B@(GaHue$@uxG0JfdGq$Ko*Ayi!M#N&~LGO zyW@CJLzY8l=%v?>8yJ%sbe16Xqiyl`sp4_Kc)lRud6!f`QDs6ZS{q`-dC} zqse2H@j5t`zQ`&0G0LBcupeKKiaMSx1D}pID~$a*>zH%BUSN zO=2FvSrY_Qu1=;TUr8=0T#fPwwRpAGRQ;XaX1m!|n#(njwD*rX7^PD!2Bw_|mDkCb z_h(;i2O3cp*>tOp?l{diT>YAvQRdivd=~N{YU*5!v`FNG$J#7ChD6vB^eB&rF;rZF z2}o#|Gzg~XRBB5_{yd^!8uI~Jna-%bj%8qR@9E$_4<&4XS>&L5rjCe0mhsmz&)V*X zns9KkwO-y?z;6=yk%3L0)O&ZloAK?(NkWEmzkd@< zMp}W?o^?~@Ch|`=9m*dKQ529z}ADLtb8jG$Eus8}~XLvUESxSC}@wyD%s-7(o3z zxYc7DwnPAX1_ii^W?Zemz+2EECOuxJ8Oa(6wz(92c)j@_M5 z)XeqfiA(#bhRVK{{G|>}-a+gB5CL@EVqQ@;nf>cV>g$pLzq#I^U7lYVlt_$(glP0L z=W`KaZk0~d@4fA%rM{HFBNU3jp=%iZS!7TGwZ}a0Ox+OcIU-VYzn2KWg=u4?3Mg{c z#+cc|IzSZWXi*p=;1&R_W5x2m@Xr5g0cs@xS|)F*M9dXcHF%GBYZ5iym?ug{J3m!I zBp>+=xwq_FOEH>F5O3d!Tjc}try3pj{xW%uY>=?28?6No)SwRdo9kt#P1WPMOx`w| zRO<~r(xdC1MRt82KNeQd3dEi+W% zPU#*lbHiS(@|l_mTO(}5$Kg2m+3d(e_M-W zkFfn^W6Q{PHv6sQX|QT3t=gO^@T)qqg$`;9|6DL*FKhZ5uZNVB=c#TUSx?QOT=@K}NaxBlwhWjmjnP9fx8`eRBCp0 zT;Dzfx*+^1n>~Wc{W;%y{uGfOkohN5-(_O9?FvV}z_>r{&|E6MaQ^my>vYA@h`bzg zbk$l$)MMX=&4OhFODzF?Er4*khS2bEzf)DS=QA}v?k2yLy1T-k)g@eam%*vF-TQrg$5X>gOUAGnM~Q#c zEEc+}jd~@fWk&RC8H-KsS1VfbnIjuN*&{`uj^ZHZ{GOF619Gbjn>4!I@l84h7?Ahw zf{ctScFO|vmz9N%dy#M9UmuA`(Ae-Kk2E26KT~0N(v)h0*Phug>(=weTgi6C6Vce58WXn7^?}+`p zmQXv`DZFaK@?qhhL=c}Kg7JO%|C~PkTYG99ATA6Y^d)bK{^=2ZT3~>@bFVLf$Ii}f z$BTKXSh8rt7siXOO8n<~z3w_Del=C!Ho5tBcw|INOY=Wy-{#w~&9^K)?kqhA@4~d3 z=jov=4-Ti1b75YBwH| zKM5wl+CE}{NKek8)Ng?+LlDeCNTh&RQsrWJ!7}wr#KK@9=$Fp;8EEF zKPKY6m;oARw9*Ia+*%QwITV}+gxDn75RlWy=3|r3yAQ0BdwWBAT-g|EUu;*s$w?$3@$XpK&IWucHQ0U7a6aOxU8N z1RKg4Su`S6&S+IN!i1>}N_>+k3iG_`|Aw^*e^yfk@*V`pvJ`A`j)<{ysiITzQu_`OWnaz3GEo^nrIjB5QHlxeG&>l7>M_--pQaxFNw_6>XGkpsk3ub{Q zu0ETVw}Yuu~Qz?H+u@#zpdY1&)r<&gTt2B%td|IXAB9_=9oJhTAFO8O@7!q z_p2aN|1+xVr62+A51A}nGYdq;r*9=j9=AGYW1BU|@@MT?v(QvAej}~5GTGfvV?@R> zy|{U8->ET%rtO$D2ToRhX`UKsLDC=st`JxgRMI37LL^vlqaSEMl>v z!Gr(I*uFu+xp4r|pZ0mRICC(y&#bGURy8H@GhSsNzcYFi1SBN~J_-d8jlALT`Excc z#T=xh%3&IxXNd1(yD*5d#d!ufUm>tX9CRC$t62G zo4;>*diov}RjJNWqgUbN_nN-Zg*F>_UqCs=Y05F?uR`y^<<=S@2n3A&E~R?!9+i-v z-H~67X+?HMmYnaYy(|;AYQWLfn#%?33B?xH5u@9o2wC?tji7L@f9=8Fcr|zsjW?sP zMeAw=kZHCy%Yiic;u-@srG%95Z`J(_Q1!E}+ zg8%@>MEy97nqt;gf?b%2LorpGq7vQKjRTSB-lG2DxT*9!Fp#*?iM-Z8>oyKy2iIiH zOWHTK^G81W^ZjIRAt5wvIKIpJ;Yq+9;WS+LrW;AGy%mJCF6z_Rq>53+S)1Kl-Oi~J zX0(cB_s`NFw;M$_xomabg4|Wz-i5O>AMt9F7xvt@Pcpz+5Zo~F{pX;l@wCJYqXvW0 z9Vcfq7S?Rm%~4biS5AJaP(E)#Yyl1~UxG@q>=B!n0+%}-(Y(@w|XSziqUgbwNRa>Sb!5O%X& z36GZbM}|qSHt!2zli!=HoG}f z*?Uk8PT(SngbY*(Fx-dniuHmC`oDo^Z>?jMZp=T|8Vf$Mc7T^sj@fToyT%e(#lro1 znG|PVa!`VtsR>lXBjX@V`d$!9+j7p_Tsk9k_qI|*s!aAU>^s#3Ltss{&4r=R4(GQ- zc$cOA^urh&^ZegT8E;t5?9e%Z=qV&B;FD*%Q=8sri32)JIp%C6g)np9-as(-)Dh)y zseG{RsTLC2ItOe>UVV4Tj6>$Kmt!m%KSRr_i+Pt=RR0yfPK%{?FuX{C+C$J ztemV@vbcM4F87>$;MHOUAtf`B1V$s88moWR{$C%-Z$SA?$eGw&{uak`pzp;_J!{YJ zjQh}J+!u7!TEw?%2u3g2239Pt(J4HEc%7WYMTYZ{NN+5!`Nh7R!H<#JfJP)FBs6>P z7C11GC{;`&pEwd~pu%YfmCLV&<8yok+r#Y#zU5eGuYF$9ScZp5GJ?O1`_a-(YH$V2Z3AmBtR=tlKbp*%&OE9y3AI>1r&42L2=f2~X85oL9p)@(~rYo6j+q^@gf+!&aQ$intZkrw;2E%PPd@ z6IwLkwrAhJS&;bVOc#Ym?>3t*H7YF`t|(tGPz5=K_19Df%{F@-F%>WO+5dp!UCN)t zXbw{v&|}jnPqrbrPWQYumAD$8iL%Xm}7Xls%Pf~ zbCR9?GhLb&9A9l6`6pz*J1ov?WNVOk1p8z=|LG|dm}JxUv@nsJLuvyDO0VkXWZ)M4 z5LHl3&ynNlD!i@55ardQ-PBh1gw2dX@WaG+tZ*z}48y@&`Q88{R~7H*ho%b)lp%js z`?7?Ub+TGcbv;F&2A#B8VCjFo+p8R1aKTE@SDn_};O9D(j4KSP4=dXC#@4X>*zZOO z1dygf_+zKC3kj+6N$BmDmE~qZaVLCQnms5w2aJ7I%fH!Da=44$X4BMJVbAXMAA$8f ztY$rA{OIUN93}9PHT$9bjErZ-?E1Q24YmU`j(7zX!6oVf!iZks&~X_a)1EZu!r5g> zIX3(N9|sx?mcYb;7{aMRc{ETJp^ru&I`eNo0ZPCJzJlQ#AhU&8hx&AfCZj=H9e>KO zx2!3CL`Dk_PNt)h2(g_!rluxY|OZrSQ-d8s5m zhnl}ewe%{W!M8t!lxLVVyHsgYyVg20-8BXsDz{)AIxXJj^7{BV4N zoMf^g47bo7S*Y_+R9_-vUYc?ZXT|de{i#cQ(N+`<3r+@(`h9UWBG%%>Vbr+b#JEzP zz5khx7(D^BqhmtH*2rV0n!u45Iv@B~A#BUa{^?X%I_McSNtDW?0a4gy62D>F*^nzA zW@?%c&N{y5p1mOx(*r9^w zWjl)tD1V+^j}Ycw!*;o}!<>GT4BC-WcPP6HeN?}`(^aFaTj5}#*T~x#kIT^d2z6h~ z&2hb`vw1CEVvw(rI#a$jKl`q3#^i>IAog$S{dh%W58N@A|Lo-K{0X8W`rs^}b*KpM z>|EY{G8`!OBRSkU?%wdY!Far{qgZLgf#}*7`zQ7aE#BIA0|ezGtm=4}hg^0~^p1YI zz~TWaLkpL{b8&}(hk;pR1e;3t3!4_N%S#d*FXg+p)KOXy#L=hAi(Lvq7?GQ}dilEu zl$;5^Z(Vu6BDx-yDB4W>?r@X`wZD`pxp*-Ybd5nuR>=GAeUX$^Ya}<}F&lJ7zqsmH zxrlN7yI?NQG&p?8{%cV|Rz8gY6UMY({8`ny9`FvU4k?l+B-?dycYd zLAzyCEk!#BjO5QYf?cmv z&o=g5gGDeTbh@C3QQ&`8OeGTLJR%x2*@m&|BkN)s*!bXqENr_PJVFrST=BPm=JCj4 zsOhVHsKUU*v!Xm}yolJVPNfhsYr2-)ZIR0y#3wl#6?2AQ>7x+bLXkhbV`5?+Dl~W> zoVye@XW95-N2x>VnT7~!gw)IQpd%TDv%SJALPHhUH03~4U;$cpD8b4rC{#>3_7vVN z9`)UI3JSV89-2Go(^K}v7m>P8_T+k02uXCu=) zDPAkohbVbg1^^z=1-=)Vf_<>4Y;H!rBi*=MT2e$hqjg}snEvXolO^*m-i`h3_4U&` zUW`^XGhgR+jxVlG7K7RiNN`|13UrMtkcft|OnEPz0N5S81_dS?IC_nk}rvvcba(AL-CYNIebrR-3bUk(v&n27OFA`zUUsCqdez}` z3TE)YQa0n^!-tx2bN#Yrh?K4+GweX8S3vek|Y6 z;g#C>brRxNrXuWKoU%5yUm95Ugk@w**Vcv?E%BUd23VvhHD@$ebgt2{W+}2ubq+VB zwX|}&Wt3|4o=qz28Q3n9f-MYQqC`!s4g{zGACag% zsElQyK^HrVb5FcGb=ysw8!`Ou*ovSswzESf5a;(TpDslJk~2IwLW<&1qC#p>-@GrS zRL8`TSZM?qjCzcmBeP4jbTVMGI|ba4>`WwTqtj4M2~6z{qi(Gk&joi1lLU8ssR;Y5 z&a=V5plmw992I{sjzWFym0g_HZM|Gp!wSdSLfeF10YFMfA$l4P~9yC73|iv2EaU+Ua^Y)BX_I; zoGama361DF+U8_X&Dc>`xD^%!MeC46=sL~~i+;SQ;duZxkL0{Lxw#HuNQfyR#RnGnr={J*R??&p%sv#mcWgX*YFAX4p zfg51g$excapT-CO$i6wtexW0rKE#W$fw!Hlr`y0qamUBU59R!7ot{Dl;&oe(re5RN zp|OeaA_e&qU&uH>dv6%}>|d>(S&C>S=)F`GhL^;~bpSy3`-APR!I)llb%3yLC0a;g z-64wsrwA+{c~yp{u3nN=eO1;F59LjnfxQoh#3BSzq^ZB({5gP2cLH#*yD7Tl(yGfh z7cxN{T?+ndNeq`?_>})P(})-)hVMtwM{XFq6;~}#I4TCy<|f7Jia3&4B)-@5FPob= zT`&u}*_A)lMuG;d7ON7hbDj{}PUj-pgV5nclC#O7U@&?WS+NkkG2=!UuSh+8S_9dg z+SzD34HuI0ZKx0zxZQG%5h5fHJ0=+nJ2EhAsN4e3Ab^6tSz7-@M+W+=w{DN_Fi*QI zw*2+WGN{%iOFzOTBs?VT0$uENQjLs^5HQoVqhU+BKuNcv9sMmNey*8d8dy-kfgB1h z5`J^8IB-nK2$}_Kp0R(`uyb!+ST_z7KBZ}kH)5LMH(#< zCJu-lF=(d%0gTSg1bP$(`X5pQh-+I!Qw9`p_88uptZOAJ>hDa9l&PXHG&dRO8PEcB zKP!cK-g7#a{_$<0F<*4;atnkcre=cd3d%coG@zT6d9*Bk{T*2$_f!g65^%L?M^(4aJW6#s`aJA+xixNtKqQT&g1| zzXNlm)STz^VQj1{btOq&HJ*WQK|jkiihDiaTTw?xom2`LiSW-GU%@RfsZ34YPMfrg z2RxtbLVrK4VO1gY)Vhjxg@x`JU`!GpuSK#(l!|+Xt!jWzgCQlpc@D43hjvJ|{Ryo( zL(>@c#v=wnQ53loe7+XVrL;l+Z%YS(Av?~-uCqnzWZ&~ghEP{u<~q*-V7w1{suHVp zi>aZ4f`Z?LyFhbw&hTXF<#8>Aqgx~H88c38PCWh9wUE;PV&U;kP~hUp(~Xt=e5SL3 zdls@;2Bi-Ms^9P?Pd1Ou5++zbbYX8;0K z;zs-Jg)8Zvuv3CS=IC$sCUiC|JXvaTA35@#Za^K%$p@{oHV{ZBi$jlsRRq$Sn)|tX z9`>;W$Hdh0t8TOQC(#KN*IOxah2K$O2q2?vgrfRcR%s#~)J-6H;khyqi+hfPUa4uL zU*61iz)hLA!uhF{`8PHF;54m*W<$Yuc(a?*&=*v@0hbnf$eunQXZ#pO4ey&JxJ=0D z;1nQWcPf+e3k-H;PnMaxO0U;m?`}Jpo)h5DF9Me&ka}m%g6Ixq-Xy3o9gJVFf7FdL za?mROb&S`Pj2+L5iRxMAlr7|tOJQ*m>9?$nBfqN`RBR^mt;ritu{)yKJjIWb?@xW6 zT%VnMJ;DIZU@yyDp0Gs^&6=H6<~bDt`8>GpZkm7a+o_J`+>}mbe1`C#q30>wF~DCghp>l5C5NQ= zBHC-kGJEV^d~{iooHKzDa3ABFwTpPk*_{-#z_ruU!`Udj4&f<N8+5-pGtE+2H@*P0BmMOU!{g;jjB9Jt8<#QBN3jx&IlTy)AmYn<;X{>wb@t+c|e4w0gwW^!bLHBzQu{(K{Ui9=tSL@ zw?FV<21jIq1*zT>0UiOIVt+&3ekejU;1%Bct@S~4g=?ikt(C0{UI7d<(7orY#Y&NI z`YQ0Na&3f_I?J|&dTNdT%2Y?kC{N5Wf%H@;j+wG;Nu7|CH1++B5o+C^{fpuEW|QMG zbrbnZFgS0R2CU53mGAB-z`Mp}vp!_iyo}6S2{dvxYYIq5UbM8Iu3rD1+r2JoBv2Lc zP4T>Bj+xjYL>XgPk}$=Jwa!0Cv|V+t$p^+7{>jSTcz=f zN#Fs_k#3&sfPc(pH+~ph)p*~I#>AF~=Ye{Ze4aQ8s~>O$Y5Av95oDjGre#MEo_})I}VFzWj}mp_UN_4doqqh^H6X%y9MK| z_Y?@zdMyt?@{_IcGeCfsoH^9Ik@ZB6@2Fct1`6d$@VQ3m)EBo+6n_-!h3U8m9z*COi zItUcl5oYI`Y!hngD*li`IcwvoIU;#&a-N_wTbNp3KgX@l&f->j{B3kTSQxoZjA#vG zV$;*pDS{6yt=?J5Zg)c`N+xZ^-k9)EY$<_rzub%9b}#0dqLr1Q#%LSElb;2H1v`a} zA?r2WBm_EA?Hpy9L z8VG#*fAbTg+9~MEvZFV1AE`OR6oCS2K>%tfL||+{TTEE*f3*PB+OXNWXF%S85bF4i z#@!3G@zichB}TG$i=LTM(J6AB0rGc4D#7H_o_ zD>r78s1eD8Fe8KxOaMm*utdY@0rp2H;aO+fFTMrm)5O1mGL8Ys*qyRAy6&#z1{`Fz zH(%^6VeDK?n_IB03yx1-_n#cREvLIfanHl~TOAu{U^s~ucd4-3a?;7x=Hc!>>QDy+ z^_@+(ogEQm6a39772>5yyEjMaY>Umiw1_w3%-x-g6?Hos`5pj z>zNJHvI&GYn|$CA;o=|8%)Z+6zQNzD-Y`>+{f*+3q?neL5%ge1J{+M(Z936U@I6rM zJ$YxP&crihn+`|o#6##u+V_kxw1cQKCmkQ1J;L6yeQ)e_`&s&8rSsfTi+Gk0{U8hz;b}BhDxVz+2ddAYtj$K0*|nB4)HINNJZaD#PDOAh{R$xEV|nR zFimH;rf%afdOT~7-Bywv0Xb41RNv^2yjf^-m5opM4z%ibzZra#^Rn8d(A~!4-R?DO zkCIXHB;tWyvR$tJZs1K>yY}N-j~-v;c{Tf6BnOfu6wR|#3@p@_HiK1#m;o&T zcNK#xp+LYZ_2d*9^L*@M;E3(PrnMefi{BIBNHG|RP}t~|g-$Q6SbyqHbH@v|K=Cwn zdYhJ%Pou+!Bl&b2s5w z#k;o9JWt{p3X2Wx2o4SS=VQkEgeeNT*nYF$W9IWaoIm}wKZX7yhS-IfS+C14;ODJV z#nUq5oH=yfd`J7{!GOgE_q){E>D>oT64|;a&ite?cycsud?VXGT0~9t88}V-1=g|i zsHHP6G_$TXAeBTZRqNGU9sa1P7?MIt34Q6-4SL4U^W#4ymr<1?AaL|P04;#Bfv-yq zj{)s@LyR9@3bE=WZx+HBF|pL~x*tUN)rf)*S^(@BD2!4NOHU##?*oFo+)6zqP8YVh zwz(;)uBfWY+kti~rXEA^S))b1P<|=gGG-PdhP{uauL&5rYg{<^rjOurA?58*`}(bu z>%K8O(Vk??JggG>lEYfcorMHPoysjni92ak$$O|wQ{&{Uu9Muj6!vt2{J;2hq7Z8K zTVF(=h+D)?;;A+!5j4Wz=w5vz6|?0K;5Gz6d-D>=lheHwt=+7X3kOs6byPKbtHqnMtu@!cD@oJqWy1{Et3FZG*>>(?C0OaD z)G=q@^*?{twta$vrsdd4mT?lXbCB2Cy=`iKra#Ste&ggOH|w|7eU8oi54`1iwP%7i zT(H-XUTG2CA)Ijz-a5x9N24PqWN@sqNKWjALv^aM63`qx1>=6nla9>1N{G{dSZ;4} zT@8C*&naA-Pg8&_oAXx>x*=k@uVc_K3U7clRu}c%uMjy_w!D40(jBlMBUh}SZvNBB zl^>Ed1e+e;`WM!Ri z@_nN9X1e_OBuwv!WpP%aLCv{dA%pxA^W;!x%{Wht{9}-(j69}J`!GO?mB%;eq1jw3 z*27scOA{=D>drWT?n8My)imZ~HyR7>0dykx^QrA0VTh~%NUKEJFky8?&}9iG=qX7?$T~?aLb)u|$r5=Qli|rD-gS=SpZe60 zajV9q8FwvbWo7T93&du*fd0!AQHR8i#^K;V|o!4)ZL8{=ot)l{bBR(BZ zFpEOAhR8dX_uSfNzOF;5KP1KKObV?xKJGn^Wu-3LKgJHAjkF%_z?b&lB32vma2&gE zm-nwe`!Oep&qD^un3s1$Y`Cj85_D!DPK(N7U%8T=HhJQ4sFAk4)88CZ{q`gzz#1$~ z>Bs-S2?!$#p0f2#KJ&fzEkNGeBt^IXsafP(UQ8k_z-axpP_8gD-3 zkFnf$6Buw)6(57)3ole6m`KPOqktSR*lpme%zYM`l{*&PCFgr*P0jNbut!}Bwq}m+wi!wPpizRZd)nST-0z*l)fvPYOZ3vCL>`rDzX3*v46>RDD zd%P6I{jcGo2rG6Q9b1R@jA{(Gg=$3_MrY1(?Wa>o$Y!sJxZZ!l+@b=w`-Z&aemIol z(#b{V%}UJ8s@YA!}YaerVn|F?qIsWB(hvBSjAh!)#S=&a*qaa|BnoX_}aqseZ z@fUJl;+#sskjLoNTxw2l0a@l4T)f|rJckWCcNo7{Vt!Vej6e!tzJX$i zFygqMmnWg@B-V^)rBS0QkMc!Ca4!jpI+AyFWMOfnXsmeeOXr5M{{3IQr3@CIxmQMg zgjopwQQJI+A1u|-U;|@bE5ZaAZ(H~zh9Pw?9dLEDy%q3rDc`L zo_Zp}`ECySarw^Ey4Pird6n@gZ{pM?>+0l2*rIt9bLO^;Dg2}S^615*V~(-fzNUJP z78!$IVE{U{{2ETJgF(A{b@o}Bpl6exsR%EBkqR3M_3C2R7bq^uuVA+j-NGz<5;ub^ zE_g*5O{4?mONyK<=;`^0>Tb|k%&@7^%zFh(8Wcq~Ab* zLl5Ze$m_cYCsosz9}-~I$bdME@K< zuYF{d0TUw$iDKy*i&AJDj5892E_8?l1T0b!FV+$CDBs7xK7JYeNr_`1=RpNsqHh~Q zl%gs~8*%D`8E^7n;V(93=C#l^HeGZrZNi!5!x6A)V384-YJ@V79?F~9t!fJzfE^&s zE~2K*ZsMV&fLp|oeGLjMhyKA&#%65|a04oISF2YiTMusD6rL@GvMF5e@wCNBN=Qn~ z3cOcmw99`m>4=!Z>)5&w#qgOGQVV8p46!sYjz1!)c@n`2qx&s3*lH=lD3=gcZIw@ zm#=OXd0!9Dxgv`>M^4_g)9OE7QC+08HbsB1;`QxYdn-+VfksLJe%7%Fa1+%TFVjHT z%S71AM&D?1V~i1qt4rrmTEtOnvHI-l_$`cXN$(qZ-PeB*k z3~Z~CZFUc>#bp=aW-kzyVH5=p1ZWlwbbvXi@j_BP=C%PN62$HIxiMIt%P zkXpz%o0&1euhV#VvVO51QfY+u`?_&gIN&N8O9EP319pY1_A(~qc_jjJ`#1l;j0Yz z)B$RN{EAWmPB!VB5Q^{*?BANGSdbt-D4f zq)cl2dcOH!vrFt{Vz}LSOK-ijfKwGgJan^ibIexoLQA{OXXh-%#kh5lCEbHJ9QN3w zc{Hk|TwN*wz1U0jp~nmR{>qP|!wlK!R3J{9!JrHS12`t$#EP2ZD@Ug&A~u?mPlVdB z7jrj)-(4Q9_y2(pjy}w&7osy6MoT zP691ZsaXU{n6GRSi}Y*fyvngi%S_CQSF3VB7tk`X7BQrf*VtIq&6M(Om~CDm6Kz!n zFPr+EJYpopltIXP&q-csC|}XO3;#gUhMc3vb$JGKBn@SV@(U2t3Fl3C8;2;WDe=Mw zSGp~KzZM@-Lr*vf&fyJO4Ni~(0~Nq<))9+|S7#@qy@da>zJeE zJP1i)u;H$)ERTA@^wOsKrB{WS@87f6S@_2H7z&<2pK^>ghYd#*s*<>bgfH_4X@QW6 zUE@nusxsk3Fd#l<-Hv#M%HN zS}v(4p9%)SN9F~#ublEck$tQaxvHosXd+tWvqXGfZCqN@qbmb7h}DRYhVR9Yq?BB9!)(yy?1TB;rV@#JtbNLe zMA7>MA*snzcU_TPZGomdw+3E0%B~3Avs`d>iQv0M)QZtX+fis^niMfTrvnvwFSs_r zIkb(IGtTk{)78T64OKUUjG~8tKv)l-e?wy`9@3yOc zOQ&A??@H8ug@q_hv+dmlJHdM=t`9clRF6V4FZ})e3k2^`9q*J1Z7d(x?qS9pK2MU; z!v$;@gw6LtzXZJvkf4fm;YqXO8D8VzxtL<&GG;ATr5K+XbhPWAX`S2E8zJ;Vai0d zHvU6Y%c}D2K@BIr3e6h)Zx&ulE-wE1wav|{Rn04^B&cRrdetUyu)nWUILGSj;y26B z@8K0dUPOfT>QIF6005nCF<0r8Dru}x+*%gt*xvde)skDb#xHXJZbv!0VKZ29|kbrzwsvC ziw$(ktF?3b8u*P!Ov;uT_+82p`Dq4@3i%FZDleaH$`Z2WNfsMp*-T1rH zciKCx8+)GuYQB8O#zbgX^Sm{h!P8_rYD&_t6wjVW^IX>!Rjm@IX_tpR+V}azd{{gz zD0_8jcyp+AJza6VuW;IY)5nwLUy%7cx=gRS&eN2hV#)Vm$RA3>GE9hiVZAgzejjcj z^{6|rlz(OE(1{!oEg|SsUPh3jXeS(myHHMHj)k7@C`%K#s5biajZX^h(caXU`2@<# zyL?n#=Du^0u-kTMU}CuY%O~iKw9M>cnpTW#EsMGSbY589R6_oPmyA_xnj_>2(Rl^~ zqVmVvVt>NtUdP-gQ&8OLn`JCFh6@Iaxbn>Bg^B?{*%=G1@0fW@QJa6~-Ra_=XB6Bn z?MWsbzG002Ky ze}cJ7O61L$RE7qj_DX~5z1zK_@W&e&VpyZqO^C+D_XOSfg?T)edzMY-G1#elWpm;r zk?oxC2kb(#w_!0oGee12WgZ)mr+98xn1Eo?e7g6JBS4it<11czAJK)Q@8%o`W&f9# zU+1&?cV2ubDbma9-m`Ykvt_Gth{V*#;Z*GJN$t|#u!{bJx6)Aw20D5NEuzDW>oc-) z{2m)yzYBPDIjVjKJlCS0BVm`4N}!bt46#hDMDh;Lis6- zdb-@?Vws`+=jPj7aFfTzuwnbTzSUq#+aU%yT@FX?5*o}Q*T93r!-=QUz;HGP9s*?- zu>VX3u<_=MN}VjQDF4HO*$pw^xAEOBb*fIEQN%{?dqsA)WH~cuC)WZ8X_-vfiy%uez1U)^O8Jk1(LsjI$^2qssQ?ir>zT}sXOSp7V& z2|WcW5z`RSh<@_;4jr0%^gTEN$3&7y97eZVzxDmXX4{Lqv#k0)1oj%jvohK=Ex)^ z4K{vxifOl@^?tD3o2suTj7nif?Irg9yt{wF>;3k>hW4brLxrVj^a1=Cn9N0UrTb!8$}gW>WLmC41gm7zPH5<(S298Xz`{=>v&|FRgudUu zbFh!KVX%&=OpmSq`lSC`EwY7wJ);RCym0ghLJ-Zz2@02;3dUw;Hw3$(F{_|Ra8Glim&LX5 z2zncfj3~tZIgE;XwL2tEph}S%oWX7VUN^}G^Hy(C1x7Zsaw)?62@3oKQ&o98CGAE3 zK8a3I@m{JbZ_Il_DIzr|C5ou4BLRn7;;M_3N^bs42bp~Q&0~5R=KgkV%ZlKYJWP_E zX%A}gZ(sc6qa$LGSeq)0UTFb`XxfQ0IXk<2HS_0u_|=`(g4PD5{MT4?`$BcDnoJga z@M+^N$MXrilgYd7``KrQYKxZxg!Ikp{`RZ$X@#pahU=B~6TD%C$yOMV!KC%>H*!WV zKb7hJan#qZj#jW|77*FiF*31%P0L8>qRaz=f0*%Oo2kj%X=(cBiduI!y zG{N~|YHGait#AV^h4hGVJ3?UHwe@(b7B$k$(Qv%x2&prK+OPZzKFLgh1)Go9ElL{-m1mDt8cf=C%D$Fs=0ArCXK_ zlyBr47U?%8Osh9An= zp>MT$oE)>=?B8snnT`!)${HT<@s@OU&i~Ltlo<$wGJAVJ);CFW)T?1rVY^sGxwc$I zk5?Up%--DsHkLA!$gA?;Qw%rs+xGY#b;Lj^CTg>y>Lj9Fv_dPr1L7;Z&b@bcFsS>O z?>~0epZb_0f6Rdy*0L|n%!1Zu2GW^Lh_-KcjK?TEyz_oaIsySLKG|JZRA4Fe+LhYq%tKp*B!=Tepl(VAuT3xWHuvLTV8z~#p>9nyuh-VDa9eU7bxyfy!e-Q zzL_=iCo4abl|1L%viG%*&)?2n#?@mDhEK9#al!srJl#I7?E4l5lJf!~z}{BPp+qwa zg8ivoy_7Vs)SVJlf8?*^ymfA4iTW~)lxT+gcp@50CH0ol@!^5U#t{%e2puXK6pB2i zc<~M|P>vP;OIn&r5*!4wp)&?SnBer9inGT^&_Zj|rr4qzYn#U*Mw_rgwSdpXbM{D5 z_+e5*Q-?jgcfB!%!nw^->kF$^cJirlDvT-lg7yZ!$IFActzC7U^m=})hf-u;Q}vj0 zIJ`|n#@PYrjzb8$75Nd%Jo(k%aW&HIUfCy5C|4dq1n!OHvZmCFQuHhkOG z8gfyv7Vcv>S*E)<0%V~Mji<=xTeu^}Dt&o~h`D9PluVuHT>~pqX+tz7B zk%O6jeIvWuKL{TDymlg6##ox;Yxg3#w_L1-k98kxvl6_Q+w$+M`{5*b>-_%kt4R8u zR${|txiCd;jOAsMW_HSRf6Vn-o{y&^;-fO**HeFLV~RF-{XYAebLfAx0J9fQL&Rom z?J{a99HS$5Y@gUJmTVI&-3*+w=+uAkjb|ZpllAv+ADkcvZ9-q)77P*5lsezY9$7BH zpxFhvkOR;CcVWkd-lKvMu5d8$6rVA}=LUc3rF;bPc3(|@KqOhjZk>DTr+zkj*z%$P zH0V_o78Wu^itFsqfsp9>bQbqOFt@TpEiP&wrYVY>48*$N*CnR z##9Vh8^mfo$%6;AY2=Uz#&*A2&>6chC@<%$Q^?tiRK1r{>w_eW1vbF67kXTDpU z>?XSSB0gv{UWX_Vm_K{1I%jTfu>Y0qiSw%%2$!}Haa!Q@T$~@p*~p|dy**v^KI`;Y zGY(lMm5AQG6yjE4u)Mv+q94(2mf(yn$|a7M*%AGZPY7hu%LKIsj8nY^8`lpAXx=2` z@5!+Px8lfOzhC;d?XC9;ovNs=gh5->iT7zk@@Hd&~%jT?2;*s{Lk?!bO~gt_}CAZJx`P+Vw*W_jRFq6H9vopE!(|_yDI>L{~ z%F3#Sf7f;P@N8OVbtR#|Y;#h`(yb;#`=jK~%OB*PR?34*?oI4&WJRUWe#M@^vB2$k zz_~9k(L~Z98Sg9CvH9e1Cb0;GwrN~Z1w1H(?wwtbfq?+~or_&_a)Fuy%!&{Tf+FNd zMGAb2_tIj${hK;jH*Zz}_?~{K7U#!=o!Kw1w|JBa5y%D7)T&g0yeZO)Yir3ETTE2- zT55V4%_}D?Dk^dAND&oJr^Qu`AJRCFs16z-8yj?q4I9t2_ zrSjtH;D)rc$i_H|z$Q^58*f?v(kdkwFd3u!;9m7SLKJZAP-AC=dvI_XgK&SyoeZ6M zrh~y9gunc^iT!LtYX!5(PC5pwDeRL^PE)C{8iYkf58Z_cnGD8cZESKMe(yccQ9j}D zjKfQoL{~d~UeW@d?_zozkJ)NUzGX8--eo_Cw1)+pZ(2(1EryCykcFRbti^bog3gPB z)^v_^%ksNlO??mkg+FV39p!!caB`$#N4M%foqa$>6BOHc(H@IHS>&|KnB;ohSeLGw zvcy@!W`@nx@S|&W*c89Jeaj5qFn-zpTV^Sd3Ws$FNG8*D=9|d;Xru%HAZg#gA+uex zT}UQ2&OZYmdbywFUvk630>yt}07K(3rfO;5DGms#ph&R}D-OY2F(7f;oFHq7zr{B! z8tZL7HFE~*VuE$QybP-`eGm$=98Ku&GxwQ>A1tTt=F~T)go}B+1askyUM~#gaX5V&M#Y;@ni_2=|!<2vf4xi1u+YXI9Lof$}21C z=YIgW-s`=e1>wIwd7kVy`R@lJ75NV%53qKA*6rk>E7{q{XXO@AXgj<_1)Ou{_}wg( zR}w~ro;@I}>TC)sNA*lN{jS2V`zDDmdq>a{R{QAx#9ck!_4tV&-_z27T#`UHf00a~ z?og`qpmdT6rRSiGB26V7Nv#Fj7<0`)s_%!DCfIp&^@SEPy|-e>G>(4)$*K6fkcOCW z!ZXM*tS?%ikLetoG`Sydq`+1D@%RNB3~b1+fZcE>Z&tNyEj(D6UVnQayLAkTF^j+B9 z^V8*Tp{=XNTbEE_)!|)r@n3 z#Y~cKlh;l}<5a&qqjvoy=;(3#kG-LCtV*0VRvf2+pZIANQpl>d?NK?00$>CE&PC!D zQE~WQc6!+Bm`%fU+ZRqeyyFb~e&Sog&Yc)BVD+ANDQ{P*dhr%=Ph3UbuKToel-!=> zo*d)Pn3-|*ZGEiqy|?sVdn1-$7Dg?;w&d4pI?C9Y(%8;;U@mM)T^bc?^oqP;dKM`C zxj36!=0LUl+}Bpgeeb!mk_|Oj@<;264JElsm5ZbZGBcqU&cJX#>&N=v4ehMa%k^U) zJ|^qpGe`k~AnFCP^Feh3=v%Ms4d(}*ZVKV-v>@N`HxL{=2~rTT8HgMLISz%Dh}DW7t!#0_0yNQIk=cy0sW_CF%QS3LOWtZLbYD+#g>q zvm%pmuoPzc{qquR0WH|RyTxm7)A6;dXDUw{I_U3I#4O&Qsevi^XJ;S)&zn(crcnICg?TAUoraRa58WQ_+?NgzR) zsbbGP;D!iPV?l?%FdK@^JC0gAFcJWS0R&3{aQGCQWo1iABYTg(LO<%RS~oAq+T`r* zc=>xeFP`0aXIJrMci!G)x(RDMX*cOW6vFfxA9^rCOc@%g;Y3USbd+MT999>7H}&dT zIjoTyW1b*n-@h*A%ean((_A5j&xax)Z$NL0nvPg*NYL?F# zL_E0@OQtsnuQoBtWba8y+5Oozw)oI-LFfLqiC$IPyo-qNGrv)h4I(S(Ve!(T>qc+? z0r2;O#EVOuL{r9Il5lRA+N6Q*dk^gTG3}^>+pf#Q-TB>I|C1LA%JGE#<;EBQc5$Aq zN$;?1EEBfWQ0_e^QaFWERB8V`P*^UeRKcZJ50kW*B5(J-`6Js!Y;8K z)EaQYM{MhtmYiy4a*IRvDsI!cG{KG?NrXgoNJ( zg`&!tXTt^xYMHE=Ys)UO3&V1nBouTr11Rl5e3Zt#I*IBeW>t;K5a3tMa7{hN#sSKNAa#DSs z+H31}GQIsReywxjm|w>m8{rCX!F?Pi?F()p%aVVc(@Zp_K2l% zy?qrSw4&W=)F%h84 z^Qtc-S_(%P&77~+1W*d`Rq5B#^+|Arb3@+pVx~%eM-l4pv8^DbZ~CcS151=%l~F6v zrI0pJBZ%s6NRO+rue{RBkKIydSTr!3qoMg^Ev+*yjh z$gJuyVokn!T`DD1Wn*qC*8}+>k32nhy}y~-SC4lNi*rE!s?nWRUp()P`u3+FOFf^6 zSW~cDwyiob)T8C@*Wk+8s#rEzbD}y+mPE^CkC4sC^Ro7j;D&}Dw0n!VzW2PG&lM8) z>oyt#b}w)JkKR5XPCV}z1#GF5!Zw?qVe6tfCnw^9ZT}W85#8}o)muZfv}?Vh%1>|Z zGmm=BDZ~HXbhdN8JfArjb`>P`T0LEC^pXTo%06|9G=F-!{+Te%GyaNs)Jgb8GaBMG zl9kgza`=?w^LEBZpGY&1=)Uv8;|7sLW#WoqEczuZTL;goG<3H4?6(xP#LHc`o3p4; zX3VIl!5ddRqXJfbTs0Y)SOB#Gb2fg@agnhNt4-y+KQF0pS~4|g^KKqP;y11dvbkXH z$2vj^Pt}F_yPrVbSED0!Ya+rfa!XVHD$9>YMi3Xvpn!+ZZ3&D75;~GpMW?SjUUez^ zX(g@Z-1vl!U8HZ^k?U&%X{9?kLu(4YCql`ue(#;H5RoJj_U+*0;kIPS)aS^Ql?;4> zsAnfS|AsRC6*+ z8qU`q9F!v8TiX3eM@wsptlt)P#8epGpmLQ4h0Y&FnCL9Hd9=@X<|EuM$zWr4oP^VF z;imDGDoWLQQ=v8=5r%=l3CZGUqNA!KBJDO-5j2mjA{l8ohr$2ZTqdAHXXKhwvv`d! zI(-v33}2paaYAV=E51kkXF#^F<~g2VBh9bCQdO+Y!WkL1>IVXtHxZ)H_Vr0%FG1e{ zAm@V_{F&z5J21fNeP`3LpTpKo_YN^B2{D zZ(QE6tu;+%cn}#)6vJ#9gf7S!5cCzO0}(+c1O=sMf3_S3;sK~@r5tgKkfgR{U!*a? zi6oc{>R?TEL3_fG(d8eLQJd0W{i2z|RfDu~PRx&O6*f;*Rr4c&C+%^j(7!7uckK@T zXA{rYr=MytY52uSDJkG`gN*Z1HN5ffyE&};^wqxPqeAqkz$S!VpQEQu0$LIq9vAmw zOu~i={zCu#p(m`Zb}^z_;OCO7LQdjf3NX9m3HoR;A1uWxBDBa`68q5EGUvv_^=m&o zh~9))u1eWPSbVjkg+!X0HYYp7GS|m?uXp1KP42D3>Ej6JOVxI7XPnq=NJzgG{jwe& zDSP`D{Ja}3*3l%5PfNE&ZFd(QU0bRSM*bxdJ--~hG;bdKiW`SD*5%5xn0e9kQ?4J* z{2W}w43v26I!(3VEYq|Eo?S7xrs)$J`Jy&i?3hh}BKeu@I(ck{3dJGG>aW5SnDbT9RTaLd1Z_Ac zbly*UkPDjss}<|{KNBs`R|MUkt|%E)$2Q{S#!&1E&+magNPXC=tcbzgXO3YC&l--L z7MhrmxH!tp_A>`zNa&B#(nydY>pV}ntze%S@qk{8)1f^vKPl4>I$W*hc`^yvv)UtR zXdv>;K@)eVctC)V<8ffncVfNEoTE-?j!{}qb+2l8G( z{5%}|ClDv7mzztNFix&o7@U*i4?? zby0pZ{VeD@uRtvpM5QaaGZK1XMkD)+Dz>nam z!tWfdNC0{6Y$^NhdZmn|DiTka)Y$ih>yHls-Q7IDS0%g;iH!cuGBSAOJPk-Zs`LfM zV%dwG|6@XD`oIY4U|on5#8lff_f@2N{Ej&B5L@~Q3gdVch6OL_-Fq5>D8eqBjZZ8{Rz*WZBANDlmrG@bv0^GZb=!p zwogGC=2z$|bEvGbbObnDD!;+J%0-XaLe|#W&oe!ycdvBc#JN9Cc|x3u(A2^?Rk2K! zSzAk2=%?YfLro0$bH&P;yN_3fWz;P86CY=9UG1WZuq5OST9T`ivw*{0?~nEM_I435 z(TG{n+c*;!*EY`|kf3K@9Wz`xxx64)ctF!c*H*XL`A8hn!&E5H`^EEj8 z77u;z;z)tx_(U|+f;t7 zv*xGF>fK3^pW*2U4160Qx)^Lm{_kz$f23LOVgcdS?^1vp4QDp^^Fq|fAfBKq8-TIg zFY_h-pX6o9iR!GMZK5QmVJ}V`!r{J#BuKPecuxVifwFcnJ!49%*pmF6l(VjvQRI6m@t+Y1QQM}f5%QZ zI5?om+84xOp{1o}Cs+7fx2WNbv=Moa zU_JH|pI(~Gtk}{j!w+|ocG;96Qu|bqYCgiGV0yo*405i}1Wx++3Lr7cE8}06kErHQ z0P|-TP;v73{NOtfl|S9-eQ>mrrOdeMsV8mB_#u0~cs!<_fit?0>u>Sj zkaz_jL&k_i$@VR0Si29G-luNoJEsE_f8wONij$jpSm!8f;b0qU_x(B1$R7=jrizao zhMk_hxQ)xJDx$YpSYHvzqrw@k!sHs7xKqhH5uvZi4Z3++aBo*m1i%>_7kd)Vn^taf zMCt#Y9}&Wk%&=*z;eJzUezx6%@!PdT+fLQ6{48xk92A963Xx>6qV4b(W^ho3E&!}K zk~S77Ma2W-uATz%tE45XgPB$5&C?}ulJI`P6JW;CRgzyz@c~J0Ex$qkyUM$O0wRWx z8_P%s6%knpEcC??IF3*-lh}luEv^qa&RnBeHHtu;E;1F|=Xs9<3WDKBCS@uo8El@$iutU8jB_m z0KQ6%O;3lAWDfD5nja1IVuuk1{6)vzdkhNH1s^cupp4wQGRHtud%$%05g;qgcYgwj zp|uT&U>Sh1VOr_Tdj~Vs@yo@uoY;yb-}=iyR*kuDBtr>5SOB3twsvaf{>0VQ4yxjp z`UHqxj4{{i9%f`KapR;wEfh=DlS!=U zXMzUEmp$~SjKO<3Ev=m>8Da)3E&NawgKqz=s)fjD`PXbz*%R}N^PhLi^_i$tp`a-R zz+UB9)U)xNkm;_+n*Sxd3T;)=^(mv&l9yZQ)?w9~bCmH-1p+SQF4tF`*aGtz>yZjn zry`(|!jEG|hxB@W$6gTF`$8ZirJzB0*;B}6Y$+I9;EszL)Ge%6aYRnIaX%kgrS#H! z@X%=}5xJ*6UVLSXVv==*R#9co7>SqoHL!@0o)$o$HSpUh6%aj78X7;@0xK|<1u<)x z1Pl`pFX4KP|Q2HczwpT%I5tZrBvvuEltCTg_`vYcUR2I2?W#cg8mS*gHvY zJ_VeQJ5)8GEl51qaYevn)N1TkmaqCe{RN(G*B{`oJ`q(r7?zD}hFWq6?+LH2d2~Na z7n?6?4~#B?c>&e z3qug2QwabxXe4R*Eu3T_br57CU7dhLi8e4pRMgahbpt(YkM z89`zHB0xj6JMd6y0+t^NA7c8R6R_39@h{=z9*s@r9H~_jJNq3@4>v6y5F7*;ip?12 zN0o>XC|!CDwU9ebhw>eCG6e>H7u<9)%EiVj8aNM42TC#@AVhj8Js^4DD@TkBQoHxO z^-v4s;qYj9ofNv&-WTt)=chfRN6%E1s4;d$H|JaUaPVph^y^J1(W{9tIT-T#?dH6( zSq0u5A}ZD(_|;EG*8}dwjsbs<)Q?+ZJOzye%aKQ8<{ElM->c|x>sgb#{2Ul76r+B1 zaAkLymf=Y5L%o9D^+#)IeZJ(Ia1IDnePyH6KGW)Ul&T4#|AXdVI)g4I(^Ts=ECs|3 zGN@;A|#09?= z@hHE_#BL#f>hecn$Vf%>rxiWF&0(VQwkol8VA?k+iR7Z_sn2s{uj17Utztny<0N!R z^H3|&7x|bJHoOAgA=HUZ>wshZsEqLMqQ)m)!hfq^144t-g4N_g5PxDX$!%g-rE!@0 z7fUDc50~eUoo~*nUd#5S1W{p$))1ifDO=h!EJq0s2XFEDt;`avb_JYoQCe1d>{+Vm zxv?02){42b&cONU;3O#w>hKKo5d4AJF}BcDM0H>37MleP1x1x#G+GXGfv5`N;R)Ky z%gea$nL`k7_r5^CSQknPnG;45hwBzVkxe(g2Xb?r~v& zW}s<;Wd=1kY0mKNIl=OGEx;2$RvQ8G7nv_=f|mL4siOE?6M<_*tUy9P30vKP)u(q` zOrs+QzEjJyRAOjsp^U-WGG8;wJBI4V^k~)c;^E&ntcn_m2767_SX6HB{ithoy`jzk zdD}*)*$B;tY?mn4jjT)1B56}f^*o2IGEr0m+dQXjR*v#drdq8|;YBNYbgAWoJD4jL zI9t0&EJ!NKk-_JGv;YvC1Y^&)U=f7}1ZKZM_{fH+C-P*j>O-0~L(b-lRmx z=roC0pzf@)>Q-GGU_Z+y(H{s!Omk?Q-3*YV-Z2(6IN|pPrTtp7O;sk!NG>n8Nqt@t zeW&DA2t5N%R7Iz* z5Y*Quz&00$@9mqT*Mq%4%!P?m$zlwmqf%Gr2`)uJ?_pSk2I4UxgYnf{+t?npSx3u# zn(Yz#Cc5{Adv}69e~nAYW!Q=p?*GvLk*k!lTmmUx)>}*+zJ6q?g){Z?hj?LWsm(@y zm;~5HhFZF$#Tj_h9R0NXs2kR`Kv|s=Jvb;Qhar<-$ru*4vXIL=P*01@UXVioG~21H zYcw&n)mOo3TZL;Na7zP6>kB!g)mXty`0B5yGiCO7`EMFL{{E?Daklw$b#M#=nY8H~00}TiY0> z7K(l9L3*#Xnvqsb@4SvJfO$e*|CrUA7E~`ZzCN?(s&~}fd`7v2~yW%rB9ILVgeZbmoF)f{!1#k zdzb^4PhlL+2DgQUIYNu?K0i5bUoIIQ#n4L4EdSwzPVF`D9&K8d75Lkl8VW*|ibsZ2 zF%aQW)uBUd1$5_D`Qw&SQe0%sqs6>!xXn8BZL2tC})^r6$f3L$F11xSH zb9^Sm27UGbwd>UuvVTrU{}O((t?MWJ1p0f#2#_YJJy@>iFi-#l#>&ij$;Fz?Tp^v2 zi|obEvZYnZAV=T(>PzuJxHLxTeaIy59m@XLUOK9nY%uR!-^Tdr(}D5T)kc!Cj8@R=u9oYlaK%a*8Yu({ zLsD#i8aG}sflSE46ab=uO7lxG(3lBm0r}>lSuk(*H-c5f@Ar?^|5e>mN<2=*1vm?2 z68t%8KK;05P%Vp!g&CAEDJCIK^uB+ft2#no!E4Sf#!;3(jX-FRe~+YC*TqZm%dl}d zNf0&`mc4%W`BT8N<+$^1Lk#i+MTb#)H_Qr_@omGr1gkuPpRps~9&Bw4ky1VAx@oKt z3%J3@DV@oNRPa&}srYtHdoNlA7-<^5`5#cm_Xo;|7`_&T6;W5U39c;##VA#yv zjtp;06D$2^O(|_W03T2T)eV5WtF6@La_ffW^WH1ls&&3O;3mRy!Q^&WF2K$I&e7q; zs;%9_v$oJxm^fs0m6#?GX^$AtPZd>MAVZA~@S=fv_o_KeDj|mHAxtAmZNqzcWa*{X#L7kaWz6w&Gb~jLTUT9oxvpQAR zh`bRZ!h#kdOF3gzKtxIF3(8q;h5hqb1E~J?iVVimQb$^^xEF(It`oes$$-41!HFOm z?*eEJu(jsdBnhRf>bZH*G>W}x5jSuh83=&P&=rTvucsktOcs5`7*hnuYC7j9E(vkr z;b^UD$^=q6AB0K%DZ2nc8u3^ElcFj3(Ty;jM#pE<#S;WUA|lqgLH-M9&i zlx7P}YY*q<6QQ2YLPz+g2txhY9A|b;PQc&ZhxY3~jYme}?V?`)4&DJxDW$aV&f(9! z#$1@aXQ!vH8E4|ey~0iV+9=LWKK8X7&s(OY`5-GP)T{@@__=utiL`eJ{uY5eHS>An zB%~|m6Zw`V10v!B!4Vl*`7BHzy)%_^RDiry9sLa9nz!1G6kk3h_gK5X%HL_t3sTd|O;ub#{E z!)YZn_(`O6(2_e^U6(tkLaHgc2mmRJtCPKeK0AB43pvE95E>X(}H&<9_FU+-5iYe}x3opKRQwxoXT53DcR7-Xiz~FySNQeYwO4YpAU@xG9n37?l z3K2LpI2r zzO{PFG!m6Kv4oC!Hs`5_jtk_H-VT_7f23Dc5zdN(QFaEpur?Ai(hS2%PxI$$06hKtM#q z5E(A5q=bOvyCVbSCUNNhKe27mdupC`m5`P60Q5ughOyeN5q%xn>)!0O<|7*B}7 zdZnopQd_6U4U#?CS;a_%Oksk;HtV)Ka;oBo>uBBmT8KbYyaZEOT6VDQ517)j4SH|2 z#E4^M_4_MT$E3udl%-)|#77CB3zkPSXK=JBXGnNo{jhMr6bXA^CIGm1&+hXtdiFvR)K}aG83)s~ zD@u;)0YIOyAJ!z&K*`ryYC-s#Y6ygDXXJcrMA-V>uF>Pt+4I51vpqijZ$XvfPd#I&zs}jtquT0EGyavXYik_s5RPxa$ErJo1T-E zW_tuB&dH0LRD}ssiVXOTgFy1f;l3CG7A{h;^myM}JL-7<_zyv368ZA-cpzeItUo9y zL&5Qph;ucg;WdHenOH)2B>?XHH^@};1NQ8C?-R=YmGU7D%Edi(8#6^~u}@5a}c@!;`> z4+iha$naXr%QGzwvRKvshWg>hM*{O)V#77BWtihW8VdZS!8u-+1^A7hI<$g<*tTyQLWtc%B3Juc@lW<6j6J+>*<;=?ITf#g1W zU^pN!LbPt(>R#NTvf=-n-9{pi+J&GzU_?f^buY2fI20Lxsgw-H^jV6f!S#}p=SDuV zlhi^;uU?y*-LYGPsc1;3Lm*j1YFhjd>e(E32vC?tlMe#Kp#trSgU03vyd;cj+*;Qp zI{xE6=2!Cm_qfz=t#rIn(Br?_P&%QKRuSr2{DoADzQ5Y;l~c49Oy8q|q1j;14_BzO zMc?M4ad02Sq=C1}U{-)%D4!Yk>t;)tc2707@9X z`S~Z)Fj?2(eq|kQS?A#TmxRy|zVx2GtTkpf=ZN_|ZX_{AMe*ty_+M8w9}Zis@~On- z23+jVd^GeM=h?$@u@4=?M046VC?|dHO-gUe8 zvTKY#ko1O|^INs@_R3b=%4KO^_8Vn3)b(7XIB7-Hd2AOtOWq%*ZhJQ;cg}_jjn3Pu z#YI)$4GvEDUldZ>;Ly45a}ZqyJe9s2t|^^e$lwrT{{6F@f9b?+bfQ@KW#a%g zlMTc~({2+=EKbBBnfhT+DkXDwH|*;W;Na|dnG`m`X#vab47L@*LdrTixEpRWFpv;! zb9-6Hn@{uW(;TogKyJ^KS;@MAzHtI6#9*zX(yHF(9 z;z>=Fw&jzM=8-@;|2{5_Ay*fy3rNm(Bg|MSLIB&}mXgD+stMa2)@g#oT9xqnbitCM z;n_)rv}r5L@Z-_?cPAW(0Q6#HcZ5rA8R6^;)S5v)%iA2)nqm9s6;ythAe%2Bh4VqZ zAw51t{fBEJ%tbIX95d?C*-_gp@)QyJ1 zAZ3vld6C~E%F4dGq-KPB_dZ*9nhr`M2gVLP4E;LxHJBUwJ<;1!$+rYUl0C$mn;p81 z{5dW%(fz7w`M-)1#0&7>Ee{CF%i2E+07d`|{z_`%N5?BlO5>0KH2aGHRM%Z$@DCF> znsb;v#6!IdrxmyQbV$6c20W{a9OcZ&*v8Nz_%-(j_yedDjFd1uMwM1j-Y@uX%9AHM z8vPu;DndjA8(s1h%gjXQ<=nm8+S;T4jO_b-ECl%XN9_x@QEB=@1uBVb--d6Uqt?|_ zqtZ$xp(%=)KBuKKxN5$MI;$2fQ%GCo9%lKezpdzWK^x!>olOXfSt)G zBefhzOmkJ7Xm!|T^22~iYO~C80^@jS6;cf;nkE!|zUAidO_&1yp^6G@{jlxE8H`sB8q-$-rPXYIFUDuq? zXR90Lhuq`KB6174IYy!Z|NNhl9J=ooo@EIt$`QNbB96MaL|92v5n&P$&l$Oo$I1Rp zJEcGF7S*RAT_tC*8~J}u+wN=2fSZ3)TWuFn{mxuVCe9M~8*w22gPl*!s&;JwN5u~g zT5~@PIO9|-CJ^Bl+1-zUpT#4Kx9=SBVfcWnu2j&GY-V(6+R?_t0OrvM=`UC6Lm~V5Ql@&Y1H3z#@J|N5EjI241`peS2 zv=RTdw`&=SKOH*`+h{@)0BsPmyz4H-Vz9wywItnc+v)b_+p(gvr_3O9rk^RDDF(WK z9(jQO^v@#!L*U{M+%358GDQfOTR#}Q>jHs>vt2k)5s>?K0qt$F*A>*fZw>mi@Y!Mg zWMlJAT#iB6BA>Dzgl7w>aksTrTr=pgpH3Y$+XFF1xWDdO3lN=VZ3)ZroV3~Fmp7d# z@)kgGcodIPb}Fg#>aiig9)kKcyCKG=Ul~fzG977vY*OazCyI8TzFxTR<8Nq%xD9TWXE)Tb)TBp}yLsONt>&FUAQEq{m> zH~pRzc&&BXoE;^bo0}={s!YOsz&Lfmz|aH#>n9krqJ#AiL)%@pBcV&Ng66JnnCVQJ$PpQk+s?R+BfD zz2mJ-EFMn$4u63gJ!G$TuA*U6JY6w5(3-F;uOwoI;eD~Z7L4!j_cfHp#FafO;TCH z=V0|(`W+0}4HMuzOad_Eeln9q*foyWo(^Z=OQKfv&?!L{^@4Gf$*a%FkWYZ%b&+A%pFHtC5+h<#TesiZC?EQFgr~Q6j)Lk1GKI9UdQM z*;VGZydCB$e>3rc*49a}u-YDnHyX=(UyX~liR8da{HHy_+rhL^jWmkW2g4AIxGR22OTvEC5fT&3ANiqO-+tkYi24*z_PgD z9`Rf_01|O8D;REtW8%V6eT2-FV^GZ_Bau}d^&NCCIsIE;DY=xoh#^H^xLyWj>r_-GI1vEo35MW@D_(|3 z@doz($@M|F*C70LiHM9-r=eCaiV8EoZY3VQs)ojqj18{o7)vp}rW=5w)#LsOE;M*d zMnk$`+A4k4aT#tKnW`k|!aO<}>QY%=-tQBZ)1FfAA?~SVP_uIG_?^Fuq#ma(gLp(6 zsR1#CL5yNj0go0?X=98?KV|zFK6Q*A)+0TUs2DpVS1+*c1#OJ)1qtP;S>tTpD$-9n zfdGKocoDwEshNh%FX?!a``C&fWnW3I%56|Ubf!{>ITSsO#^o`c<(WRbU*uxUjR1Uw zfWYUlD=(>mX%W=l$H&4riD6wszw2ui2|sycIZjG;!pkM+wbW}*2R?AZSS;muDp8t= zj)$E{cY2JUpIOJ-asv?in-I6qwa@BhksLRAG;n0;BYIRtBIV=nL#a> zXlU|iy=$T$NeD5yeCC4CUO7fxwTxZLg>l1M@>9e1hh=!xO0MtK211hfTzGTrygBQUn-4u0)={m)nVq;onaWMu4?qv~T3 z`Z+nCB`Om4e?`_G7lNVRD&?m~cY2BIs;zJ8z~6Mx5$zaB>XfIqlM{EQk#`?Q%6oDx z;GDV{>s!h=kA}sIiw*+;fF0#|fY1hJxy%Sm$sy~qab~(_Adrx> z2|`z7n*626A@;-?Gq@x|E)*%4&?q{fz@%GR>QUCRTiSOEeoI*zNAsb5eLfAAOsZEJ zYDjn|&K3-=zvT>xe?-Bd3fu@?kTHWriIQM#1WS4WUs*UlB$70P{N@AlufV(#R14#h zmHUAI3}gPQ?ok5Zgoj5r#GMcfH0j+VI`*+S+sW zo401*bza27AX-RHMxnq`F?U#$bnPuxjb@;GJBHFD@Vq^bM+Y#b1)5&ejp95`%EQ3K z#2Mvf8F^)-S0hdh$O`gMtY8(o?Uey>vu~ z6N>j2@#(+NR+-CF2jN&7U@wN1;2>Zo*}}?(4+BP&U5~{c&;8x^xzBqqJI8nDZVRnJ zQCgqnL9tYkRPENP{c>@!*DDg92Rk1{<%~w}LaA6o zX&~YEXhJrNU|v+(hzoi7y8CjI^z1D4AJ>zuEm~ejUCv!>hFlyv@@=R?Ug@soB9C&F zJvC-;=;}sq?jP{#889$y2E|&YwI&b4;f*Ub^gp;~H#fKT7%NKJJ#HJ{EMTWz?({Fo z4426>EoI>ZzQYH~N>O3k1~O@n^>|fVKX>4+jzM-@UXWW3{{^^9rUywTD$9&VXC%

    KWP{zO)DsLGbT3s57run#HvPm@?Z#g$-_ZlF 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

    @@ -87,7 +87,7 @@ app:showAsAction="never"/> Date: Fri, 9 Aug 2019 12:01:01 +0200 Subject: [PATCH 54/98] updating commons with some new vector icons --- app/build.gradle | 2 +- .../gallery/pro/activities/ViewPagerActivity.kt | 2 +- .../gallery/pro/adapters/DirectoryAdapter.kt | 2 +- app/src/main/res/layout/bottom_actions.xml | 4 ++-- app/src/main/res/layout/bottom_editor_draw_actions.xml | 2 +- app/src/main/res/layout/directory_item_grid.xml | 2 +- app/src/main/res/layout/directory_item_list.xml | 2 +- app/src/main/res/menu/cab_directories.xml | 2 +- app/src/main/res/menu/cab_media.xml | 8 ++++---- app/src/main/res/menu/menu_editor.xml | 2 +- app/src/main/res/menu/menu_main.xml | 4 ++-- app/src/main/res/menu/menu_media.xml | 4 ++-- app/src/main/res/menu/menu_search.xml | 2 +- app/src/main/res/menu/menu_video_player.xml | 2 +- app/src/main/res/menu/menu_viewpager.xml | 6 +++--- app/src/main/res/menu/photo_video_menu.xml | 2 +- 16 files changed, 24 insertions(+), 24 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6cb891a5c..9c69b7722 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.25' + implementation 'com.simplemobiletools:commons:5.15.26' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index 314cffd36..4d4763fc6 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 @@ -798,7 +798,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View return } - val favoriteIcon = if (medium.isFavorite) R.drawable.ic_star_on else R.drawable.ic_star_off + val favoriteIcon = if (medium.isFavorite) R.drawable.ic_star_on_vector else R.drawable.ic_star_off_vector bottom_favorite.setImageResource(favoriteIcon) val hideIcon = if (medium.isHidden()) R.drawable.ic_unhide_vector else R.drawable.ic_hide diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index 691e2b73f..56ae21193 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -677,7 +677,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList diff --git a/app/src/main/res/layout/directory_item_grid.xml b/app/src/main/res/layout/directory_item_grid.xml index b40156665..591a2dfe1 100644 --- a/app/src/main/res/layout/directory_item_grid.xml +++ b/app/src/main/res/layout/directory_item_grid.xml @@ -110,7 +110,7 @@ android:contentDescription="@null" android:paddingEnd="@dimen/small_margin" android:paddingBottom="@dimen/small_margin" - android:src="@drawable/ic_sd_card" + android:src="@drawable/ic_sd_card_vector" android:visibility="gone"/> diff --git a/app/src/main/res/layout/directory_item_list.xml b/app/src/main/res/layout/directory_item_list.xml index 5812af1ad..97937ee4e 100644 --- a/app/src/main/res/layout/directory_item_list.xml +++ b/app/src/main/res/layout/directory_item_list.xml @@ -95,7 +95,7 @@ android:layout_height="@dimen/sd_card_icon_size" android:contentDescription="@null" android:paddingBottom="@dimen/small_margin" - android:src="@drawable/ic_sd_card" + android:src="@drawable/ic_sd_card_vector" android:visibility="gone"/> diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index eaacbea7b..e4aea1047 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> @@ -14,7 +14,7 @@ app:showAsAction="ifRoom"/> @@ -14,7 +14,7 @@ app:showAsAction="ifRoom"/> diff --git a/app/src/main/res/menu/menu_video_player.xml b/app/src/main/res/menu/menu_video_player.xml index 3651763fb..62d8c48c4 100644 --- a/app/src/main/res/menu/menu_video_player.xml +++ b/app/src/main/res/menu/menu_video_player.xml @@ -8,7 +8,7 @@ app:showAsAction="ifRoom"/> Date: Sat, 10 Aug 2019 17:45:58 +0200 Subject: [PATCH 55/98] updating some remaining icons to vectors --- app/build.gradle | 2 +- .../pro/activities/PanoramaPhotoActivity.kt | 2 +- .../pro/activities/PanoramaVideoActivity.kt | 2 +- .../main/res/drawable-hdpi/ic_aspect_ratio.png | Bin 198 -> 0 bytes .../main/res/drawable-hdpi/ic_crop_rotate.png | Bin 680 -> 0 bytes app/src/main/res/drawable-hdpi/ic_draw.png | Bin 464 -> 0 bytes app/src/main/res/drawable-hdpi/ic_explore.png | Bin 450 -> 0 bytes .../main/res/drawable-hdpi/ic_explore_off.png | Bin 531 -> 0 bytes .../res/drawable-hdpi/ic_flip_horizontally.png | Bin 203 -> 0 bytes .../res/drawable-hdpi/ic_flip_vertically.png | Bin 344 -> 0 bytes app/src/main/res/drawable-hdpi/ic_pause.png | Bin 140 -> 0 bytes .../main/res/drawable-hdpi/ic_photo_filter.png | Bin 292 -> 0 bytes app/src/main/res/drawable-hdpi/ic_play.png | Bin 214 -> 0 bytes .../main/res/drawable-hdpi/ic_rotate_left.png | Bin 647 -> 0 bytes .../res/drawable-hdpi/ic_rotate_one_eighty.png | Bin 620 -> 0 bytes .../main/res/drawable-hdpi/ic_rotate_right.png | Bin 656 -> 0 bytes app/src/main/res/drawable-hdpi/ic_set_as.png | Bin 301 -> 0 bytes app/src/main/res/drawable-hdpi/ic_slideshow.png | Bin 221 -> 0 bytes .../main/res/drawable-xhdpi/ic_aspect_ratio.png | Bin 174 -> 0 bytes .../main/res/drawable-xhdpi/ic_crop_rotate.png | Bin 812 -> 0 bytes app/src/main/res/drawable-xhdpi/ic_draw.png | Bin 601 -> 0 bytes app/src/main/res/drawable-xhdpi/ic_explore.png | Bin 569 -> 0 bytes .../main/res/drawable-xhdpi/ic_explore_off.png | Bin 670 -> 0 bytes .../res/drawable-xhdpi/ic_flip_horizontally.png | Bin 187 -> 0 bytes .../res/drawable-xhdpi/ic_flip_vertically.png | Bin 297 -> 0 bytes app/src/main/res/drawable-xhdpi/ic_pause.png | Bin 92 -> 0 bytes .../main/res/drawable-xhdpi/ic_photo_filter.png | Bin 324 -> 0 bytes app/src/main/res/drawable-xhdpi/ic_play.png | Bin 246 -> 0 bytes .../main/res/drawable-xhdpi/ic_rotate_left.png | Bin 733 -> 0 bytes .../res/drawable-xhdpi/ic_rotate_one_eighty.png | Bin 688 -> 0 bytes .../main/res/drawable-xhdpi/ic_rotate_right.png | Bin 741 -> 0 bytes app/src/main/res/drawable-xhdpi/ic_set_as.png | Bin 413 -> 0 bytes app/src/main/res/drawable-xhdpi/ic_slideshow.png | Bin 219 -> 0 bytes .../main/res/drawable-xxhdpi/ic_aspect_ratio.png | Bin 221 -> 0 bytes .../main/res/drawable-xxhdpi/ic_crop_rotate.png | Bin 1553 -> 0 bytes app/src/main/res/drawable-xxhdpi/ic_draw.png | Bin 867 -> 0 bytes app/src/main/res/drawable-xxhdpi/ic_explore.png | Bin 845 -> 0 bytes .../main/res/drawable-xxhdpi/ic_explore_off.png | Bin 979 -> 0 bytes .../res/drawable-xxhdpi/ic_flip_horizontally.png | Bin 259 -> 0 bytes .../res/drawable-xxhdpi/ic_flip_vertically.png | Bin 442 -> 0 bytes app/src/main/res/drawable-xxhdpi/ic_pause.png | Bin 143 -> 0 bytes .../main/res/drawable-xxhdpi/ic_photo_filter.png | Bin 473 -> 0 bytes app/src/main/res/drawable-xxhdpi/ic_play.png | Bin 320 -> 0 bytes .../main/res/drawable-xxhdpi/ic_rotate_left.png | Bin 1468 -> 0 bytes .../res/drawable-xxhdpi/ic_rotate_one_eighty.png | Bin 1396 -> 0 bytes .../main/res/drawable-xxhdpi/ic_rotate_right.png | Bin 1463 -> 0 bytes app/src/main/res/drawable-xxhdpi/ic_set_as.png | Bin 509 -> 0 bytes .../main/res/drawable-xxhdpi/ic_slideshow.png | Bin 308 -> 0 bytes .../res/drawable-xxxhdpi/ic_aspect_ratio.png | Bin 289 -> 0 bytes .../main/res/drawable-xxxhdpi/ic_crop_rotate.png | Bin 994 -> 0 bytes app/src/main/res/drawable-xxxhdpi/ic_draw.png | Bin 1160 -> 0 bytes app/src/main/res/drawable-xxxhdpi/ic_explore.png | Bin 1136 -> 0 bytes .../main/res/drawable-xxxhdpi/ic_explore_off.png | Bin 1256 -> 0 bytes .../drawable-xxxhdpi/ic_flip_horizontally.png | Bin 324 -> 0 bytes .../res/drawable-xxxhdpi/ic_flip_vertically.png | Bin 684 -> 0 bytes app/src/main/res/drawable-xxxhdpi/ic_pause.png | Bin 110 -> 0 bytes .../res/drawable-xxxhdpi/ic_photo_filter.png | Bin 585 -> 0 bytes app/src/main/res/drawable-xxxhdpi/ic_play.png | Bin 361 -> 0 bytes .../main/res/drawable-xxxhdpi/ic_rotate_left.png | Bin 1489 -> 0 bytes .../drawable-xxxhdpi/ic_rotate_one_eighty.png | Bin 1391 -> 0 bytes .../res/drawable-xxxhdpi/ic_rotate_right.png | Bin 1033 -> 0 bytes app/src/main/res/drawable-xxxhdpi/ic_set_as.png | Bin 670 -> 0 bytes .../main/res/drawable-xxxhdpi/ic_slideshow.png | Bin 373 -> 0 bytes .../main/res/drawable/ic_aspect_ratio_vector.xml | 9 +++++++++ .../main/res/drawable/ic_crop_rotate_vector.xml | 9 +++++++++ app/src/main/res/drawable/ic_draw_vector.xml | 9 +++++++++ .../main/res/drawable/ic_explore_off_vector.xml | 9 +++++++++ app/src/main/res/drawable/ic_explore_vector.xml | 9 +++++++++ .../res/drawable/ic_flip_horizontally_vector.xml | 9 +++++++++ .../res/drawable/ic_flip_vertically_vector.xml | 9 +++++++++ .../main/res/drawable/ic_photo_filter_vector.xml | 9 +++++++++ .../main/res/drawable/ic_rotate_right_vector.xml | 9 +++++++++ app/src/main/res/drawable/ic_set_as_vector.xml | 9 +++++++++ .../main/res/drawable/ic_slideshow_vector.xml | 9 +++++++++ .../main/res/layout/activity_panorama_photo.xml | 2 +- .../main/res/layout/activity_panorama_video.xml | 2 +- app/src/main/res/layout/bottom_actions.xml | 6 +++--- .../layout/bottom_editor_crop_rotate_actions.xml | 8 ++++---- .../res/layout/bottom_editor_primary_actions.xml | 6 +++--- .../res/layout/bottom_set_wallpaper_actions.xml | 2 +- app/src/main/res/menu/cab_media.xml | 2 +- app/src/main/res/menu/menu_viewpager.xml | 6 +++--- app/src/main/res/menu/photo_video_menu.xml | 2 +- 83 files changed, 120 insertions(+), 21 deletions(-) delete mode 100644 app/src/main/res/drawable-hdpi/ic_aspect_ratio.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_crop_rotate.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_draw.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_explore.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_explore_off.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_flip_horizontally.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_flip_vertically.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_pause.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_photo_filter.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_play.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_rotate_left.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_rotate_one_eighty.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_rotate_right.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_set_as.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_slideshow.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_aspect_ratio.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_crop_rotate.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_draw.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_explore.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_explore_off.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_flip_horizontally.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_flip_vertically.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_pause.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_photo_filter.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_play.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_rotate_left.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_rotate_one_eighty.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_rotate_right.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_set_as.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_slideshow.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_aspect_ratio.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_crop_rotate.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_draw.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_explore.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_explore_off.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_flip_horizontally.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_flip_vertically.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_pause.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_photo_filter.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_play.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_rotate_left.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_rotate_one_eighty.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_rotate_right.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_set_as.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_slideshow.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_aspect_ratio.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_crop_rotate.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_draw.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_explore.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_explore_off.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_flip_horizontally.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_flip_vertically.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_pause.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_photo_filter.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_play.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_rotate_left.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_rotate_one_eighty.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_rotate_right.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_set_as.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_slideshow.png 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_explore_off_vector.xml create mode 100644 app/src/main/res/drawable/ic_explore_vector.xml create mode 100644 app/src/main/res/drawable/ic_flip_horizontally_vector.xml create mode 100644 app/src/main/res/drawable/ic_flip_vertically_vector.xml create mode 100644 app/src/main/res/drawable/ic_photo_filter_vector.xml create mode 100644 app/src/main/res/drawable/ic_rotate_right_vector.xml create mode 100644 app/src/main/res/drawable/ic_set_as_vector.xml create mode 100644 app/src/main/res/drawable/ic_slideshow_vector.xml diff --git a/app/build.gradle b/app/build.gradle index 9c69b7722..55e188564 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.26' + implementation 'com.simplemobiletools:commons:5.15.31' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaPhotoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaPhotoActivity.kt index c69cd5271..c89d2aefc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaPhotoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaPhotoActivity.kt @@ -45,7 +45,7 @@ open class PanoramaPhotoActivity : SimpleActivity() { explore.setOnClickListener { isExploreEnabled = !isExploreEnabled panorama_view.setPureTouchTracking(isExploreEnabled) - explore.setImageResource(if (isExploreEnabled) R.drawable.ic_explore else R.drawable.ic_explore_off) + explore.setImageResource(if (isExploreEnabled) R.drawable.ic_explore_vector else R.drawable.ic_explore_off_vector) } handlePermission(PERMISSION_WRITE_STORAGE) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt index e394858d2..c4803333c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt @@ -259,7 +259,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList explore.setOnClickListener { mIsExploreEnabled = !mIsExploreEnabled vr_video_view.setPureTouchTracking(mIsExploreEnabled) - explore.setImageResource(if (mIsExploreEnabled) R.drawable.ic_explore else R.drawable.ic_explore_off) + explore.setImageResource(if (mIsExploreEnabled) R.drawable.ic_explore_vector else R.drawable.ic_explore_off_vector) } } diff --git a/app/src/main/res/drawable-hdpi/ic_aspect_ratio.png b/app/src/main/res/drawable-hdpi/ic_aspect_ratio.png deleted file mode 100644 index 81c7958d6259166b615863f9a33025da5a0e1e93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBdOcknLn;{GUf;;updjFuXm&Yj zE{C+(g(JN;-b6O3#kpGe{L^39DxT4IVG@S{qoBv!FqUQOXK>qJw@y2HKaBmY$j--; zQ@i%^d5LJ2B+U7}SRrBCx;x4mi5&i1r<`qP3NBD!wUk+-zDIiF@3H~VN1SXExtR1htzhv36=gj$Z zW_)JmNCy<)fLlNx*aSWR&wyp11vC!oqX<+4tN=as>KCvETmz=+fNBH3*{>Mr0v7;R zHPqb%)OX-#0QML-S~XPLhVKh-8aM;I0Co)O9WYZh)Dmzuc-I7O16vlYZegf!GL!&& z-i8s2)O4*t*59Jds~C6+M7080pErPQgSwatVi3@vHVJJ4tH5N!Ho_-RfKR~Ts(`>p zVKv3a2?LISr7D2{Hd1^z;J$r-102ePN^?Av!Cu=q%NCfkHa*~6zS%tjIp;c(x{@X& zEz}NVdTIChaRGX5_qm}~-f;Y#bGcS)AeQ8^Y=K!xS0wF>1yHDQ8M41>0&Pi6NspX! z>vaPO_-tw7YDSxp<)Ne^NgaD`<#jfUoO6*g4GZ+jo)<;|lv}{OrR^9vIiOA9Au9qj z0lYPT_eePv;8)~b#bsQBcp~RqU(y3fNV+WPcuKp6_FeKhrHm^xN=JZoi@?4uB`}HK zWNlEAGJ(wLB@5>^aQ(jqLyDZgeQ3D5rHt_#@KXM|!a!zx40vz$-+;whfvkgB;G^}i zg|BQhg6}Q-A+Wl25SYOq;$r;q_c?G1e4tM50ku*olz~m*i%x6!B2=iJK~-1x3BVdQsh9Byw1ZEUec)ypP=5gRxVrVo&=i^g O00000WbcEP)D~V1kq_u^M#KdsoG*a9m!3gAv zMS?trX66quxs9~? zJ*6#pbKmb3q9tgu1#2rT|J0!q8Bp(hgXO~WRdIcSBz zYMc}y6D|PmFfl5snmdXib9D^(gzVMjB^Bejg1d?4j>^dRsL@?TZj#s>wBs!ju%S%I zR+6v_c}s3{Fa!zIkZ_)VeW#H*sE-SQL&#aGMnzWhL?`~$#T+E!A##U0WC^fq!fd`H zE_x}A8OUYQo6!atYyOdsAxvZpxy%F|!7pgFb|9rJG(<;^{&O53Sm@BUzoI$ad5R3R z(6JDA*NJDLBMr~on#p3}Aqxi(7wbqJ=@Z)z^JLsdn-bZ) zr;&e5Fv>p~c}KR=VK=4xA;=%f*sWy9rHd$CLdcTErKY(JmL6glVRV zy;{aermeVp zZbF^`@XWmLp&zdi*%-#FpFLJaPtAJ;e#3E1yCH+4rfEkdw$qB=57}tIHO3KnkVlXP z*?5fWr5x;}h*liI!=H_9nv+__eyV6EOqOhHp$(RO)*_B`n*qYLu|+PbSu)23^XD9| z86#S?yx2oG7_}1D_`(d~+-<}~F$U$-l1#CJai28qD;)1h>cd7JM=o;dAW8?h$&c(Z seiP(3W$aQqWG!DJ#uhITS=x-|0Sw;l3ca5lNB{r;07*qoM6N<$f(*FN9smFU diff --git a/app/src/main/res/drawable-hdpi/ic_explore_off.png b/app/src/main/res/drawable-hdpi/ic_explore_off.png deleted file mode 100644 index 59363f9ab3acd7ca4f1dd89b794ae4afd9752ed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^>XP)~d)clEp;<$MfOQrnfMwEN#|k0wldT1B8LpBu^K|5Rc<;r=8|)P!Mq0YQW2? zAe*^Oo_|Y1`uXP0kIbAJU4}Z-ZTA{jx7=J+wK{;KX&1i`g9>|xlymA09NK9w0l+Q9bQGU5*LCB@9?4w&B-O7)V z4yyfk{gKCV&J!1>Z;f?HG0#wc)_wcL;qI`Ev$LKp`2DzfzXQ;944$rjF6*2UngC#8 BOy~dr diff --git a/app/src/main/res/drawable-hdpi/ic_flip_vertically.png b/app/src/main/res/drawable-hdpi/ic_flip_vertically.png deleted file mode 100644 index eff105482434518e0d87acd05bd73ce1f10013b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)e6Mc;M!@0k4lB1^T zn~qZC@_RiLfT!fWsG(ebZ_29TRY-f{QjDGdpCfS8`L$3H(OnM(4m-aVI@u}HnkFJz z+rZzT{mXLsCpTryP>#tN@|yZHi9@==6e9H8)obWIiEraG7H`=Tokej>R^Fm`YL%V? qH^Al4GIaQ2TbY-$R_R9LhkOID`V9W&W#+K}0000z7x@I*rAC SR<1zf89ZJ6T-G@yGywqmZaC)v diff --git a/app/src/main/res/drawable-hdpi/ic_photo_filter.png b/app/src/main/res/drawable-hdpi/ic_photo_filter.png deleted file mode 100644 index 724d01d695c74706f9ce1caac761e19a3a9a8004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmV+<0o(qGP)j1^Vig3;>doHE_GR{$nXGOkh_Py?^S~U0000zWHj)RrSF1Ohm-BhE8Dvhl2^N}ci?5vq;)`t OGI+ZBxvXXK~g2^fun9oI5!%3&RXS%D6AoFj!y6W_)uTPyi zRnq?|pau+v`q@_njMp7Wlc7$6fqZ0|lI}^W{Zk;IrYJIZLqTGNMks~}j!cl^Wn#Bh zfqCEtFtXP$+bKX+Yd{M)`nQ1wfUg~3tbPE&yRQ?}S>SWZ4Xg{oBCpswO{@ z(SJH6QcXWr1M0xr1XNh0fFa-$a5ZE6Od?Xv#CSjODzSXWLVzB5M_a&nhRrG9eHxH~ zS~5^i%fg%hetRbyKt0EH82Fe5 z^B=c?slpC+`>tSDO6jWa~~v)1H+QWBwdp9%b2W6np0F~W}I{H hiumuTr=Ipge*hLZB7PxYJE;Hw002ovPDHLkV1gDHD6jwk diff --git a/app/src/main/res/drawable-hdpi/ic_rotate_one_eighty.png b/app/src/main/res/drawable-hdpi/ic_rotate_one_eighty.png deleted file mode 100644 index 6ec58172ad46dce11caaf11e3d3b4d3a83b18d2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)8Y7*^aC;tWD;lsyBw@t;0bVYP%zhk?F=BX zwt?&YhPe;?4mxQAD-Jmh9QNP1KU?;guJ(Wj{eoEtU^>7$Py>ci+6)2bfp-y9xlH+p zzXzsofRP;SM}XH+`6kN%Ed^%p^T0$<>w! zQLO^QC4h#3XMx|nUa^N#eCE1-lA30=UlhpOhNZgHD>iM^E0W&&^@}_JzM3YY$D_gZ zEYJw<_a!Zv*=C-8@&HW(pUAF8nJJMKY6|#x0LWgHsZ_%|PTl~H6@)qiY^A|u&Wx`t zNOtFX5g_+D2Yf4CCg5(+c&$v0fwMuTvX?0`nIhT5AlVpuF4c^Fv!1Eq6Bu|L0L_;H za=)=MnHDesd1-OJYoo&z_5(ct}2;0DRL)h79l zx;-eEG2nBwbUWdS@d?|BVm5)}S^G&lT>p}pZAq$0dMK&Yef+Ob|8GfpB&lX*U$XX- zYsUNGR|if>x+3Yaq@5sSN7AaKmy(vv>_Z;^N|h@85B&kpCqbY6v~RNj0000~8ilra=Ci9goib^X;6O zIb-R66EFePLiz0o;1Nlh3*aM33h`w%Np}EAx@U~}UBxWK48^)FX|8JeLITxfp#pm5 z6Ho`P1J8jqwyGU+p=W_i0v%vI0m9XjCf`I9dkihBG_!z|NGo2&ix4Rb#jb zVqGf(^ujTiE^M&XZw44xzh`N2SqImY(|%JGNYav|ySCjc{5H^cW@uLcpj--BT!Sbp zW#1(2v+ezox>W`O_DH&FfA)+q_lp{YUeuTJEb6S3y>!~Gv~8agrY5N=$=I%?GA4EJ zU~E(XI_n*bN6H#?oU|>IP&#t@G@V`huoR3nnq;%M4uIDcpe_R|z(i>vYc$PfVFY*w zoFn5lXiLR;py~C8xv&8@J*Ymz`}C~c&T-scI}?jGrVq>pfk=RA0blrA1EB51w4JRT z>k|d;K)Fw9W6TptrzJg>v>taSh1%zaq>iM9F=i$2IEDTd7-PDUB8K;wi;^x#T602r qk`^^Q!{&`K?~C}4HP%@FLVp1Gzaek-6uXZA0000pR%`-hRF_WBeA4j4;bA z)7XgrJ+q8skIa+tJ1Cb^oO`F~zo<`I{)>A3zk?g*JF!Tiq{=muj>V;<<}}m_;7XCp z0gi2HXat-n&(}^gGzrcWg>DSIXs8byDGIs7y&VlT;Mkc*2G%u{z%{x-qhl1^6LlI& z<^I1Y8`ghOU3~l(RnHMjr~jhr!ip;TFKW!_ zG{pmYk*0W{!pJmrgJv|v4W;I41Bg&QC^2L?AkxB{9xbfy=8WRe8MN#-!zgM=HPUeek>khc3|pV{S2_AOgo zQ-&T-$hD0XwH7LnP{}3Kos16=KdDqMyCnEgS93EFSeQxd^k!% z$(2qMN^5CCPd19sot0wjlVa>QJH_iy%PbG2Wz-*S3;C*_zqg@*8iTXAQ0go^vhy`x Xfi>^S8v6Uo00000NkvXXu0mjfz-3$K diff --git a/app/src/main/res/drawable-xhdpi/ic_aspect_ratio.png b/app/src/main/res/drawable-xhdpi/ic_aspect_ratio.png deleted file mode 100644 index 8a69e996e51be13d5ad6cfd9b3c782b482e53e6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DQcoAhkP61P*BIFv0z_OcZf_09 z`o6XG(xhJtqYm>vatv@gIEVEN>kI?Y#i>c|sp*S)U3?vLm!5Lqf59txgJG{O^K^lS zj}H81FqiqEF2HZ`pdsf1BfDI~lLiZg2M4+jFul-~zxTbZDQaP#%keXfrw)3Erzxpl X&`rN9s%O9sbO3{=tDnm{r-UW|RFppm diff --git a/app/src/main/res/drawable-xhdpi/ic_crop_rotate.png b/app/src/main/res/drawable-xhdpi/ic_crop_rotate.png deleted file mode 100644 index fe2eca85c91a23b1b00c728fc628a37cdc825b71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 812 zcmV+{1JnG8P)zXkfLIh!OG8h(s$3AHk?-67gp-ci`^b-PzgQnVnhiRD17y zbH4LqXLfh)U89r)td(?E(zv8wl0HlNAnA>yr;nEAB&CnBH=C{bIlfQ!K9th3fs z36Cq2?4MKTmibW&Rij&J0=9cTVN#X%oVBuaSb>O%zE>`fs4y<^*fmmb7qlFiGMm~nZJUf`kE>QqwZsRP(P>wsye z)e^8j3FEc^*j_!roYU?d(9^1E+W>680pP3C@@k_7k!rNQihck^U??KP38#J~sx}LN zPz%70h#WIc?d?1Q02Cu~>;wMVx<9}cNh-u9X^+Nh9WchsNxE-`t0YY{)uG-ykftAS z)G3{pq>69CI1SygF{WXUX8nLQl0Hh>V5j!v?GlQVF=j>5v@><6qX4WPJFiDO5#YJ= zdUr?N1Gc_T(t;f>b{v4OPP~N5^dBH=6@YKfw_9J3 zl(b?|09y$j(;#?k8;+uG@Z16HB3QBrb-WHl5%``P02^$| zIrj_D-;hBQYAJ9PvtD4{@p}ezCzQ2T&*T8C;Q@k$)KK>bb{tbt;sDn4jORN|tBb0& zdnFHGjW2uNFMw@T>I`rp?MtmG0h1oYB5<1WZJ`_XSSha%6W%=m@B|nGu6y$(a=Jx2 zO0e}AN4bUQBG`oX-;K_JkR)J`;BNu-K=KPANx&w8KWg|}qHTp}X;CT^Fd%76(uky; qlKLfWl(b&bjHF}6nB^pT`T7S~9d($F?X7YE0000BnvO*ENq3-4=vy*7UGG zYBYJ*`cXE=s*$L7Y?R4;QmVC9l*Lmjxhu+HEfZAoTa?8XGKjC8CJm3$WDt*A#D-F@ zD3dK*Q5+wXK8o_$L6dYzluu8o#;Q>^HzM5;DTO5*>>78t!!gluw$&{4vuLD(W4x;d zsh@44WBewy*g9roB_ATC24_b5IRfeVn2n>1S6Q0_qrLno)mS-FI7zeW{*CsrAJW~C z!ciKLYCPo*_vnjsc(jLirKy(5yY|wG^qV!KU~xZ6FUI^?N{e($-nD@VNFQ4)QrKM@ z7W3zHsloD5u$rMruUI%{V{t9gAr4e5QH=+sSE67cza#x%kx1cSj~bwYsK%SpMN#l7 z(qER1f`y%DkkqLFPL5ezg*4KNQLw4Mqz(q~h;(O!>$FKtc8h{N%%HOY951yPYId1r z+p7Ni-~6Olq8dw^q>@LXU=h8{uBYpyhG-9`A*Dz2sVk7`Ty7!TN&TXI+-!C&uE{5s zG)bCZyW-x((g)FAPWG=RGP70iZWP3txBfbFv{T!EmCT7T$IOI+RSd81EO5E n@QB|`H`x2GwRCjrw!qB<9q^6g?R$W%00000NkvXXu0mjfQF=G`P)B~AE zf#o6V=|fq4J1Q`bJ9xRnTq-D|$jLNf2@=aRawb$pAp@<(5yGuh1$u=JBR3StmVEX$}Wu@@``h2(_=MDdoX6jKVS zW5Op3<&L7n5!QVMkXsg3@ufJ5$qmy9=OR7GqE9GB0v5}3Igy#y1Uo`|*)SWsS7eqQ zt??JnI%>;-d>A;jk{zQ1uDrBdF#8dmoCy{jJl*T94<7LNN z+}$CQEDXcMWP)|n4sUN|$5q_*))y#4Sy|YRx2s`4)0bqGgEQb9cF2xVxEUr_l;$XY zM#_#hI2q)V0}WVD0{&XNh20bEX3B;R93|LOGRui+;GOGar6*SjXS&=_j5xluLKgBe zfJcNCM^U+BfivJJ!8G0z#X`TzWnf{qL=Bb`M>Gb7!qt|6?7<|ue)7jgzQra5AqOYF zy*m1$@VA%WUs~V4eSrM>2^D?>-VHkfqtDoN^rfu+`y(U+(9^86I*fn100000NkvXX Hu0mjfPAUlS diff --git a/app/src/main/res/drawable-xhdpi/ic_explore_off.png b/app/src/main/res/drawable-xhdpi/ic_explore_off.png deleted file mode 100644 index a2cb5e92b80a89ff0bebe0e3a644ed4357f7044a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmV;P0%84$P)kM3Drl&xc_Fd;zDAA&?5ui!I)@{r|0w{ zo;-3kp1zYr9~g>`nz&61q6vv4{KVT}{b%|JtclZ9BckxaaC|)`qHe@gDG3#E_<*Xo zx?@lLnQ07kL8ptl<7WJuC^U%73v^bfyI#X)kWkP7y>sfWudwT^d>Gf!d#MIom>i-% zj&{NWl`;9M27X{t+3Oz}AS4c9@=Fc8LGQZz6J;!p5%QS+n7mR07tm`U+&mL~EPp>- zR0FHfc|l|$F$G66OJc1W=oZKiBNHy_sdwg~lNuH~3<{pQF-9Y2YJx(V|!zJ@C^ zUR5rDHE~DiFc@z?Ng^bo)0}%qN@5BUee{7Oe8Ug2?_XsW4#dMWUew>*%BW~EX-(#qYE3bQxnC6e=NqrlCU8PN5VUikdq-y zG!8Toodw~QkSNas0`-jTID(Og&S1V_^N4{&Ap%P^2|Lm;f$Nyuq&G3;{5&5=D-k@T zrXdS>h?|S!?4uo}grp?$iSQs3e+Kpet*lr8jDukX051Qe*;K0MTL1t607*qoM6N<$ Eg6Y>LqyPW_ diff --git a/app/src/main/res/drawable-xhdpi/ic_flip_horizontally.png b/app/src/main/res/drawable-xhdpi/ic_flip_horizontally.png deleted file mode 100644 index 5717ef76a9b3faf079dc91933b9acda6edfc87b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DCQlc~kch)?uRC%zCKnzgboNt-dM^ebFP*1{yw|HNw*msvIJZz zcn?IdPt$X#i#c-LRV;xo#?GO^a)H@Z8IFM2S$r%je61Oe{`zcP%GmUl$;fz1`J9P= lBu=zE`x=$JpTEXPJ2>K02g{|WKY*@b@O1TaS?83{1OWRtMYaF{ diff --git a/app/src/main/res/drawable-xhdpi/ic_flip_vertically.png b/app/src/main/res/drawable-xhdpi/ic_flip_vertically.png deleted file mode 100644 index 4e9647fa9aceca0ff59f8cbfee2a8bd8d4c203d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?4jBOuH;Rhv&5D0th` z#W5tK@$C&;z9t6|mIsx`&Pn7aS}<)_%gBE#Xw!PJ;cLVS6^XLVNz>X3_mwG}IsJ*h zqvMR&$)*(FO_C?7jGpkG?0WKT_NVDRtihi@uTb=Or=~SyQuxAoVv-A3H@q@4*}Q#E z`Gqr;*=er>!Y9^??e17C9+|iDc)U-rx;(Ff(!O2QuP;bHoU?Zxw|%|%B?hHO-uIdB znKYR5KJaC(h<4k==J4J5>d)$hysR5VEmAa$!Zvun@r+@xV7l=n<4dD!jv*C{ m$r5W0{Noqkjk>0hJ%NeAb!~d=tj~okAZ?zmelF{r5}E*xz!xz9 diff --git a/app/src/main/res/drawable-xhdpi/ic_photo_filter.png b/app/src/main/res/drawable-xhdpi/ic_photo_filter.png deleted file mode 100644 index 05226c2159f6616ddfd48435d6ef1fb760e01a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmV-K0lWT*P)9x$jC5zxmJA0*i;CV2&2Vpaok0M W$Y|Ui5!AE*0000s zHiKk^1DjGoQ)iU}8`BKQnLA1+82)Ylt$D&S_tL)d2`ZjaeN$7z6n+#vx6l+g(0zK1 z!-vNQGlLWw%&$i_J~%)5^AZOJ`Mk|cjB9ijGrhH7W7*xq7+KGA;#ac6HF@Su|0E`S zJ>Ia!o-O6Cp~CBam{fp7vy*~+WZlZOwQ_FuvfADI<##^#cj#GDHP0#5?;3Nt-&7=cFx+v-+oZ>_6(Z3+NFBPgg&ebxsLQ0NLbV*8l(j diff --git a/app/src/main/res/drawable-xhdpi/ic_rotate_left.png b/app/src/main/res/drawable-xhdpi/ic_rotate_left.png deleted file mode 100644 index e07494c64d50aac0f6d5d651e6cd56b79a21070d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmV<30wVp1P)i zO(aAV5x)f+ji-Nsl~!VD)ZRo);YW99^aOn@W>$uGcW-9*=5BLjf8E@^@4U}%X7}bp zsal&rz--kFr3K6aRLxOJ3H(qRaN&o}fP^0^16lAxV;~RS>NRi&I1P+f&6<)2Ug|q= z57=8Zw^FJwysHkd0Bo%iz5%pK8c6gGn5fdk2=K@QdCZRXYR>boz`-g_G=PVB^dfF1 z$H*zCTm(kC#AwXNnQOp_Z32%oLf_MmZvvRJ1zNxskBM7815W&v3=@m7;dcW+ zodQq0nXoz6Lk!qhITOEueK8H(6a`j+Weel{Y-29Cm`>?wAS7enb!KRQmQ3>KH|#@ zF)%6GF9UMQ>V;?@>SL|=0(Od5=v&oHg@jowU3GjpA+OMe)bi9r9R^n^~W?5%i z)QGc{u$|w?m<8`oW=l_BEw%Jt%X?q zyM;!93lbi4pfCKc0^?-gX1rxk*DMx(30MQp<2j`{Ip=^+8StNhJ%eC(;a#l(SAi25 z@y9Xe-z@M1{=h)sEzn#J2#|RT(M`((8+iw440BxU^kCo@Fb|9k6kdQ$0CzDLwxI^v z!0i~Lu6yku5oTeVQf5ChskJ^Vp1)E`Eh}^Cdakwp5vz8sTD5A`+PwM)PUnlZIQaad P00000NkvXXu0mjfx4uf# diff --git a/app/src/main/res/drawable-xhdpi/ic_rotate_one_eighty.png b/app/src/main/res/drawable-xhdpi/ic_rotate_one_eighty.png deleted file mode 100644 index fa913d37d512c812b6363030930ceac8884f501d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E&kP)@LdOK;RlXntI=YcGSnK|dY^XAUI zccg-Xf`WqWjI$B~_DDJ@>4>BWNmWUE{ppsZB}t2t79>4)&V9G??g?NVcm%AFo)zFR zuz!%jhk+SjbrZou{s1?C;eLm&0&jZ=9`YU->sR;#z?Tj|mVi2N0vG|x{x<>~2d)7h zI^6peIGA_%YKQP2fpb79g+>WD>x&KfmRl!)oxoy(={!)$pjQE&CFs2)k1^rfA9CA3 z_hy3bj78?SNfr1Vm^2La!%nOM<5v0t9s~xTh$b#8{R+`IiZg2^z8h!-;ulQB*ZNEa z9zRST5-^$Y^oI;Ghd!l*E}ZFhU)R^3q@%%c(>eDyTg=Wl=l)4*cJW?EngR|5#|vpg zWgyhfcVf!|aFyPS+rt4*%)@)}3emJ4=b}OG(5D1EH4PsVf0)n(v&CG@X9#GRhWEl_ ztlhlNk;8h(d!<<&WD>6D9X?lxwv<=G@V@O?x0I$YgH7YZ&jZWA`81vJ_e>EjotpzI z!UvfP2KO>>9jGN-U-Rd}HGg9ue@WmH8<24QMobT)fHE*mhi{@O3;0DeuF8EcAQo&N zaF<};oN!&77H|(3?bYA%^ZG7HHA%-LO*rQc2j^c&dL!wjq!-S)pH|)l1qB5K+n4_b W%fr0nwW8?&0000wMVXmkDuS&DT7<+O zf>g>vRkZ>k#8;`r0&QSoV=H6X0I`!I82H$ts8A&MG2BHQZ+tml>|7JL-{!=A-skZp zw$Dlx{G$L@cG`mzgbZ&8{xF;&_?zJiK_|l%!VqAvLjYCa9B>cVNC+@^A%KIxGSKQ` zdhkL3Wncl=&S2boh*FQ{$COgflv3jkwGRU$TI*j98rcDk0$&nlbu)S@lPRv{RQh2jr41Yi9?T7PHc@*~ogR69Df;ttlVErlZ8P z2hXz31yQ33?Di%8K!|UWa+u4gUop)7EnoWWn+Lfcta;QAfVG(R7O>x!e!Iv5o!s!K z9{{V7?yN7}c!4tT#t@8LfNfwN7|lIE%vcS$ zOStja2515I39l%fNW7=X3gHX*qzcbU6I$!z;`^5>Jlm`*rJif8TfS-+6ciK`{J;DL Xek@9f&WQa900000NkvXXu0mjfR7y%v diff --git a/app/src/main/res/drawable-xhdpi/ic_set_as.png b/app/src/main/res/drawable-xhdpi/ic_set_as.png deleted file mode 100644 index 728313d9e724f3dc2c1711b6eed8cff32d1b287f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmV;O0b>4%P)@NB{!`MHGk#F_ZyD0TmFS0tiBgk!AoSq6D&57K3RR!zv9V zJ3&(0y{=dP4?6%jk9B8EuulfrJJVu}4;Dj-pr$oo6ZmA=0%M)db~GRdK#Nrih!ic_yU>6#gb}0( zs;U7E_#sl!d*Dq2-uYeHz9U0eFB(wcZ<&ZaJZZosv=eLt;hkx~9%>sJkVI|9w0K0T z&bS6FfNvtN6C@O1kRoa|jfhe3O$>0N6U0r4S+3El5;rZT*yV~E0I%G#MS_w}NHH8i zjQS=jZiupPA{If!d=q6iM8!8T8bJ)ZAgY8{azVr+h#}v^y&IxNc<1*2NQ4tK&HNHa zX0C`jon`4US25l}Wa%{_fspqC(EtE)%3g>Go`F;PtgHG06Zz6r>lN2600000NkvXX Hu0mjfn(~|& diff --git a/app/src/main/res/drawable-xhdpi/ic_slideshow.png b/app/src/main/res/drawable-xhdpi/ic_slideshow.png deleted file mode 100644 index 9af0ae4768f8c618f9fe33a9c65d3be9f909d69d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DMV>B>Ar*{ouQ9SQ8w$8RWMo`$ zTf z-6-+FMCH62?bA4u<#zvjzDqEHk$cUT4gWs=u2U@xOPXY5qt6#5Yx6P5Cq3S^WyUh? Tr;C3AUCZF<>gTe~DWM4foRd`y diff --git a/app/src/main/res/drawable-xxhdpi/ic_aspect_ratio.png b/app/src/main/res/drawable-xxhdpi/ic_aspect_ratio.png deleted file mode 100644 index cc07c4c257229df4d15f34d33236543406922c67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawmUy~2hEy=Vy}6OMDL{hZAv>?} ziHazrob7hz%pRRR zdz|J6`(f6sS?gQ>`PSN(^?f_g1E>cA*8}$elYt$;2=FWLGq4U=4SWu)PmYZtgq=m( z7K-j5FX{x~Cg1^Je3NS1fFFR5fi=KKz={yU-(4}XY}8?Osk+71Y*&9&m#YiZW6QR` zDN0hD+2be_>(i}WkyLl6@2c0S zLuHSpFx>m;R%567k~&=-SN3=c!Pe7lM14bDGlqz7tC#kzHzl5QcN38wSEs3Gs1K`~ z8q^t8*Qqy`J(j{qL|R~dx{V~_R8n<Zc8C zeN}Dt1fgS{_q;#=>Luzo88b)K8`a_-|LjKs4XcaPzcZ%3ug>U12h}l-+yb>|r=4TO zxQ;ARPs%xl3F?y>n|G=YsfX;VKyA@NpiWXX-k8oY$5c^IRo7?QSf`$!u2*T+z=Bboy8@)!{R!Vb`o!$g!Hf1{6N&bGTZMJb=rk!8a ztD%2AsND;`=h%I*J`y-b9qLzs+GQ0uejretcYy7w z&&L8&2Ljdk0r(~LxdNO$5U9?dz?Ye_*#m*31Zu%RpcYh&`_$=&;LD6*xdVtE^b_$kSv!sf`a1}+ z4JyF5nX<{ip(WVTlT?Ti>}jS0N0ng9UJ*j5ga&k~{R;32kbXpY0y(x#{x8&~*l($_ zA>h1n%;`NU#5>qkner>_*Ra_(sSv&A6JRt|J_9H|W@bO25<=Jxd`Ns?w5uGrrW})c zivVB@ha3QIU{1!Y5yaE)SCRrNl z1@0N0{)>7_&fm{51~C;C+Op5It4VgjS`EC+?x+0YfIH0>1^OW{AGiZpNleV`uW6^A zseX_Vev`UT9WL9xEOtAp#29palQA?l&DZMO!aCkdx-L-C>3H?^OrKSCtvb2T&fBCE zfs&4A7-NUio>W!eN~U2?50o2LH9EqMg3w8u`qIz!wkxZuGQuXjAzdcTUO#Q={ zz1*K00*OdV8o9GEf%Z9dmZ`;Ct*B2~Pq5vPh}55+1fbqx%+$+XCsh*y7{#7V z7^xalyYKE>k<=meGWDG%-lV$9_*RyYCf{%E_vtoHJfn{G?{S|r$&d$r8?YMSiY)QTffjnWt<876DI&5VjO)TVA?yM{eAu zok)xvnFO2$%mStoHw7jUHwg|R?({AOp6SMG09)}N$d^K#iraPv00000NkvXXu0mjf D#yIQT diff --git a/app/src/main/res/drawable-xxhdpi/ic_draw.png b/app/src/main/res/drawable-xxhdpi/ic_draw.png deleted file mode 100644 index 3e42d092311392bdc3a4971da221f368db08ebd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 867 zcmV-p1DyPcP)Cd@0SkkS1~iOYs!0f2CO!(onY46x@dEYiZVm)R)yY1!eq?>lMukoX+x^hGVgA z(X7M*48Yn{vl0(ub=9oIF8B`DtV1IMvHqc4X|OQ6a2yw~A8SyhV&gu1n`Hgi8Oz=(94ABOv$QI@d;rgIo;h1*@FPr-^vgBV|Ala2KNxwo~7mC zHHSNw5UgrOF+fVLjljzdrbW zqE1P$IEP^M;!AfZ8yteQy}7Kl#n*|}BuPC)J2Fx>xCp~-7@y)Bz>;3W_v06`q-<~p zu0cxRCVZpWP!5*ocYxvsbQ!KOnt>AuJ3tPOW)u`ZpyRRD*AyH_fbXVcl`VciTVnml zPCQK58^Dqq|}a(!4s2LEF9VyToXuSNOe z3dZ64oh4ykSG# zbDu}C4pZqdDpd_wp7FRwQLj>?Db?GAO1{8)NTo*^0j_s64K=)i6|jn;Ku4_S*@r7> zi|?gb{_k&$WHCj9^~lEliVkm+$vuh^3)7i&UZ+CQVj0?!+$3(GT+yS2r40*ac$eSZJWhwmFwDt*ft8WZKn|1wrzXgIGN2kJ>7%d@F{aV{np<)TV64gRpi|gJrCN7O5-zTnMB5|6)6$+2*m_^)Xa=pUg0w$6R z6SzRZk)$8F(wC%yqCB}&UcvAI@ygJRzwr7dUjFJFxl}2QBCJZ&Qca?P`Ec_ zLtmm8!RI7&3@&3Uh3hAOTu+9udYjgBier+o#4i66#%@}3zYI8!b(sAxKMWuCWB={L+n0~1B&CW zVU(p~hD_|i5n}0h6PvGP#l_Skh&RLM#}d-=#Wj>;6Bf?-VO`CBkq_>m9y; z1qYAOnmvT^pKbb_2^t){Mjyh;aJ~G|&k`ISB>0T6MA2V1ylD;&FV5yiW)amJvSXNk za7bLppDZJ~VRFIqe!;<2lwv*ccwTO3TzGJB3$@rzTpEWTSap$jkY?;AKI^$s?sylk z-|0@=-c~SFAeSmAD3bKe_gL713z(Yk!MO$3F_XB>zA=1cy!rfC;l6ZvPBr%$26c_CP>`9zSDMHlZV8y|yOmHR9oKWMqEpE~jdlLK8fpDc` z9VgCY`esk+#}V?!xkl1&Mp9S84d>W+NwXbC>A->{^-uPQiS5!tGrnsXrTQ!JW#%LChz=W^&^sG7u~2@U=;4s&bL?;$v*G94!~#1Bji}o#LD# z3-)9>b|1-w&fuTqhnI2bBs&fygRj@*h20p2ONxDE!`;O3mOOAjQErzFUlPxoibO}E zd@LKP64!@v;!2{Gk`3LVuu0S-T1VM1mL%Sjg)yMojFt@x@H3CGK6f0Y@G)IB`1;LU z$MLRA=74IqST-!jM~b5)Gl}nI;5YoFWy5TIl=4|xO7z9geAzIbXj#tQu(ULiidi=> zTt>=gzB3YTH*W?O(8NyWXBvK%Hmy5RD1j6H#WJd--gg-@}Y&YrU142rW9oJm8IOkqzX z8+YEqE;H#!hUS0jCtD`Y=OE?aF5~@ilPb&PeW(3q?&R|X{fYLAGwDu6qYJnX zE&K8sWASAs4P>2G?51d3@0wys{(AIjz*P&tvmSVR)v#T0pUJX2!6w`m6O<=<`mw$N{#~pAWf)QEGlHu`E(*g3HIfB7KbGnc#&}=(U(WH8fMaK3d0^eOK<$m zr8@T*1NVaPBm)=nJHv6CM{}NJcje$Jdr}ZirZ2?`LbIhK+*@W#6`pSe`ijBR)z4*} HQ$iB}?Eq(9 diff --git a/app/src/main/res/drawable-xxhdpi/ic_flip_vertically.png b/app/src/main/res/drawable-xxhdpi/ic_flip_vertically.png deleted file mode 100644 index 45a93784f33e9b53cc347f3fb0a1647118300fd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9F5M?jcysy3fA0|R4@ zr;B4q#hkY{eZ80+MUH&Tn#giQ_=Tj4`7?nk*4S=t(f3a>m4t*YN>?;bkT8GhBwlx9 z&-9tDRv-UIw@FpRnw0pvF#*lKwdwB0+T`E&zNI+ktrLBwzU}w6^*QCAwBwrI*4{qs zC3Z*6e#74B@s&+)*S!r~%AGe!-eTwEZAOZo(;JF@={6oj9AIFnrT^c)16d> zH~rOG`TO<5pl5dfua~XYvDaPt=FDkkh7FRNj{gZdo|Sv+%>2C?|Dr`i7A#<3W!2zd zXz2a=Ha6wr^v3^BURz6j2a9SrI5KiEF(f2^jMX_{3+8bJ1T-`;!L&hya@32HJ$KvJ z$9#UDaoI;>ck{exo}ksseKevk#CAJoO^piv_P(!g$-X6r&4fc!R91$2&2&9@g->hg z9#5;OCOMW7ymG2@Q%+5sW^vR@Q-4y`q;+36&OX+AEV_5*5_Zq+lltthgM!H9JKq+i V?&+>({GC7^gQu&X%Q~loCIEV$u^9jW diff --git a/app/src/main/res/drawable-xxhdpi/ic_pause.png b/app/src/main/res/drawable-xxhdpi/ic_pause.png deleted file mode 100644 index fb63ddc5a73821ef47ef5e19330999245e2b79dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^IUvl$3?x5s?2iLdoB=)|u0Z-f7!+45O$Kt9N`m}? z85(A5`$+(K#-1*YAr*|t3*;qO7dIG+aL5Soq#W47#Ub^eM^VLG3jy0Bk6+~NX$oXu YSTvzopr06vo_HUIzs diff --git a/app/src/main/res/drawable-xxhdpi/ic_photo_filter.png b/app/src/main/res/drawable-xxhdpi/ic_photo_filter.png deleted file mode 100644 index d555dd35533dd591360216e269e4c36f6312b282..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve*5P)2x|B!Bnt}hxwk9#4Lb1pb1b2L>c%NL{@#@7t%^YWeAlZ-<0J!P$eESvRIj@9s=I-TnE@hNtK1 z(j@lmJi`+$CzIB8uwDB$P-61qGX{rPjwJr${4l?siRBijK!&=*g1HQhWrR7;<}l1G zW=c87Il)rh0nRabbA6xe6$YLI1_F=ITZ#Bp-j-OFlO5cj#LHj!p7rhIQ|<*EW%je& znA^+~gQWlf diff --git a/app/src/main/res/drawable-xxhdpi/ic_rotate_left.png b/app/src/main/res/drawable-xxhdpi/ic_rotate_left.png deleted file mode 100644 index fec5b416437ee377a1ca6fe245b0c3b453212f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1468 zcmV;t1w;CYP)g20j4R01JR|dAFzGM2b_*abPR(0x&1H~rbm!gHXn;AuhfNX)UJvxSn)P?psguTMZIZ25AYiBXN`IXfk*RfXI%iZ zfOkR!s;D~==mI_?J(>n+h3>JRTE8F;n0aNnMgARF#)x^EcZfY*zBDq?aW96;XGa zr1g@j^F`w&T`6g5eXflHU?H$8;VJb4Jq^0YB;cvYy1p0VJ;0(y_*ct;9_)-&NeTPD zG_C0l)b_6f_$oo55^zVTy_hbxSjnl{pN%p75%wC2G3JnLiuSa>BrOTG7bDPoPx*Hd zwwlEzPx-t|y=YZ{%M!X6z^+hRXJ(qRHhVqglS2)SRe=UQ{i$}Y6L=Tc>%_@y?+LpXmKHf9z{kL>tb9sx(g2G|IV6DHCYk|M?}F5G-wD9| zz^@*0z#jTsmUTo2;l#NMyUXw;a1AgSh&q0Z-R-y<_=1z~fJqzyRy4Xj4aIeVmDsIl zTx0eFZvnRhGe;|wi@@7}H?Sv3(Nac4BR$XQA9_%MQ<{Wbw_0;^N(tO8yKzQrDl zNINuDj+`~XIa#(h7~lr?q_dARIj81vY$h>#J6Mx1qB5K1qB5K1qB5K&EY@T W<8#Og0{JZf0000+lZsLcybzTI5g~?{pj1@! z)Wy)3phBvLup*)hMZHKx4+ZsB1daKSMuL$jX(g5Se8|+ijhDPUH0RgD+JnP!?=y4G z?6Z$2_74s-?6c3e{_9)cy6p9>4J9QdB_$;#B_$;#B_%}@iY!d+0LB0lfa$=^zzx9l zz?Hz|$*re>ZeS;{1Nag64LATC4k7durMVCXC61X2ECg-^W&@M!F#+rYHUpc0E?`@c zj%pg})#}^oR`r~N=Uigz9d$~p>(>zK5OtEeTs@hCQ?fXvKBso7Lt0($0i)inu2Ro7 z(K)@GRadKXTV3w~p)OGWPts8Z|daR!=utuGu4j)80!_?c-&gyPMJ78W9}SyVN~3 zqGqT1q&hUma)+u*)Eza--K);Em9v|AmHL(XZ-&sF>OA8@G4HZF5(i{CsYm@!Q&JN@G(4wwgtjmMrbbf?BIzoNb^woPFbgL`W5v{Ik!>A+GH=E?3_I6HRj9HSrk^$}8t+G%@8Ph(e z@^Fs-m&oahaT|8!ARUyybJQ-=XMm--7Bny|!MMl$Pa}~tkTM!s2W=-Vy83WRh5_-#>8MXN7P4( zj-o!gI@Hh1-U2RWwo=EbU!(}=Q9o8|B@LUcZBi0R)hX}dW~-#7mS?ooLG{k2i>R%y zQ~kWqZj~Zpy826sgDUEJTd?I?rSB5;%cQ}IUj!ym^hQQsKd4S9T-1dcrx?@Ktyu)B zlf7`c|F`<67s**2TQp(x74UR27WJl>7hNpQxhOEEp1X|Mj71ih3u_CEOZ_?OJz0@s zOcRYa-@^-+8kZaG9j%FT9!tiiZ`IoeGia*AlLlFn*j&=KPD*CF#hyP@RWT;@K2jf2 z$JSwMtooqw!E|4rN#U@1U)y!MIuTNK@3yEP;5= z`Cj5Fi`l?6N%@8lver=c{tN5{wg4M|Rlx2LLZ)-`qUhJ5h5)08uR~2EI%;|dA@#_v z+C@ClvIW>id>!g&5soP-DJdx_DJdx_DJdyw9sdE}vGfOxjYO{i0000DCog7$bz6qjhdkX)5$EX9PirLj0TtXFWdKxbCKauvBS{RZ zQMRNsDTB)HmL_G;X_Jc9)iF2>D!W@f83vWzP0BQ=@a}e2o(}`YNa~g}RnmM(izLl$ zaN7h)PXLnik}>9ZTScbG#UP+d(mY8kBrTP+P|_?(CLqiMNvzyWYAe7j;CbMCU^t^I zjf68}b_2SAnZU!qV3Ve}*uZEWxPcyE6L7K(<^b#m)&L=0v@-y127Uo5Z88VoLts|X zbqxYIA9xHqPGn8n72qK774Rx>SA*;8ISG6KoLzK%g8?1|4mGIYAHeItT3~YBy(2Mb z7%+8I`L5p8`vP@s9gPV$i$5j3Vk64R*Hb!Hzk;O7;WmfUy~IvJ4tZ zTF#h2UCV(b6giM%r}EAC2jrcJfti)dFz7GrI5jOm(-`0uU;ua@nA&_zBf*Y4zNvf{ zuwsO9dcHvkEUK=PH4<1lGgJ$aLOU%H{hCxm{s67@LZGHmIA*!bPWLy#k8WBW;aRFRg%(g zvlU63B<+ZZ`KP3pB|Q^yZ#_FCZI)C`m5-B6vjn%yV1PxyUdOkzA6OF^^GRB?I>)}H zA9U#Z8MvYq&uApzcHGnQmjn*1ZPGUxyUt5%tO9F8n-07=teJly8rS)h@pFl+SDXlas#e;_|jXyZ~Za&_qx9zGj4UDlrC~>nR^> zMo6cU-|P1%CB~p3Px%GS2kqmLZq{ahbe0F5O@Ul#$h!vX=ToO zx`5Tmv#Z#h*?aTUkQOup_z3^jb3b;EJh$$K-E~;v8_to0;fx`1WC9*;o)KLPgv z<68LKalkY@+c^ApsA4gla0(4r2^{qpR9gpq4qQv*?ge0giNJNh7ua2tJAEc~9N6*5 zwcS$B0PrSoDeF)9jWHifx?6S&_+-|l zb)U?T4X!yQn_(C|IdSZ`aS?Do_E1758F3n&T^s}+OrBNzY!w6cnBLPsANG_*vjzqZE*f?| RT(1BC002ovPDHLkV1oCyn=1eS diff --git a/app/src/main/res/drawable-xxhdpi/ic_set_as.png b/app/src/main/res/drawable-xxhdpi/ic_set_as.png deleted file mode 100644 index 60f34eb2015ec8be55cb74fa10c86b5fdfdc313b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmV|z}Y7)DLfCk&++Be+6*y<<0xNES4xCH`HcRlq1Z5UP_@u||TC_DJhVYmKy% z6hV@@6S}1$)<~_bksgyHSW&n&E0E^vaLNPlAuQ4`{CYzg z4bTAiL5h=*F%G|KYk=1Cvroju_>ZP*fNsJcq^9B%z432v?3`o(exwLEa65KT4)~AM z#+Tz?+E_vPh_5zLav)2rpwz@)=cqW4Sz?VB{-lUFDC|U>$E)5Eb1q5ju^7Bb5piIn z2B;Z&_0xF_enP74E4(HME+gMLJ-NL|NWjBMk>rB$Bh+8Yv4Gt&s|I#TqFW zXRVPkF`rM?R$O^bpw&XriTWJJt2bPah@=%I>A_ac@__H%XEzh5Lpm~ZLV=`N;w3rK zVQZv}!IK=xksQg99LbToStDH*u|+y3VvE#C#1d(u=%qlKBtb_;_Tkk~Nr*`2LFz4f zDUdpgUJ9f(qLl*alLAL0(lDQgoTIk5l185a;qb$sq~JPT00000NkvXXu0mjfdy3>L diff --git a/app/src/main/res/drawable-xxhdpi/ic_slideshow.png b/app/src/main/res/drawable-xxhdpi/ic_slideshow.png deleted file mode 100644 index 27b37c2c1a56a404ff2d2ce83eda49a4355d20e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawetWt&hEy=Vy~)Vt6e!|)(JPB( zp?&XylPsbO1zi{H3~^=Pba7x=Fku68OoQ~j;wNteb^d+)k#~A&(K*XsIy-|_X?y?L zU(gn#ako|Nbmr!zZq>IeFHDI#TeN_AtJO0H{j9HN8kM40l@2L1^BBE2@37`&R%60> z2X2;fwcNr--zdK_$_V>1iOzma7ve5xz@)k%=R>N z%NmQ|;`FdBPYX@Hq^ww8$rCYQscWa=Z1xD5Wklt2oYSbhZQgBjmavi>*6 z_ot_1i7_4yx&MB*Q1ZNN2Ej#%v$LCo7Nti1<;d`ij&nV}IU>PgQu&X%Q~loCIDylW>x?I diff --git a/app/src/main/res/drawable-xxxhdpi/ic_crop_rotate.png b/app/src/main/res/drawable-xxxhdpi/ic_crop_rotate.png deleted file mode 100644 index 13dc42b28d2969eb59c6c1327d7325246d855907..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994 zcmV<810DQ{P)>`5bqKjB)7jfxl*NY^yTj?;wKDv!C_j+4RWw3+Mg0{=xT!jE%!F zXs&&j&!ehAFb8+~NbEt>Oo={mvCW0NU03 zO16)=zz0BE%U@*M;{~AI%^d19H+TVP17sVg=nYWdeX>2iFo04qz(PxzWSCx($U67~ zb%JG90IJSN^plA#WP8C9Kplz_4x^^&un2(R$Q|pcqYl^v)T2KOucA(Ju|)t3MK0-N z7WITpzywKTuc5xB#Uh|a{EzHxn{50d3rnK=95w6_@Cd3*!5?55r%@aI0JJgGfJeY~ z)JGlxU8s~+KLG6*YJ*3>+o)|G0sBxddIa2ude0+Z9qJp8fOb^X9Uxp2&;&FAO~6^M z38M@UiXHf5Y z1Z+ah(C!aV;5cflKS07us82ltZYA5g=#!N5TP{EgM^UdtpG;Z=Bs__lWliMCuuZ@v zoI<@EdD2VWA|PQ9HAipc(TGjJm87UckwAlq2p@9^9CRHDciWb5|=&^9oOn&U1n0PShARk_|9ph$^qKeN&YKWTXiFKOYKO46XYK5vVuP^wr%ULg zl%HS=pmnmBFQbGmy8vw^5A!-xae`fdb{TiDok2!9!W1W%W{#AvS~^Z=Ntwg%%;}C|u~;k? zi^XF3U_!R!2Hv6v_?lCgR;7bQcp2ACw8(!)~HVezx}W@GmD{AIU$QNEkE7FKkFSd&w`f@(N*`Dc{h{^SJ)xd_Ko@ll(&ik22UD zOd>H6NwPgAA5p{oWUzl`KJ}69KKY3%?gRjK)&H0q*Y)xhm0U}j?Uli`xQ>>;C}VMD zFf%D!YpXO+#&cN4R%u{+ERU-+Fe^P+)>kQ@l6SFuLb*x-dtqBmd836%nVW@Kc*L6= zJ(FwhrV%xY9=WN<&0-x*gqFc~NC3qihQ7iv^&tcPtY4T*8Mi8Q%< z#=I&fy7?vi_@s<2`IY=6Sxd#kg;>64JO!ejn+YSqLMjes!nU0PF#)d;)(?!YV&E1m z?@^%u%**!_;t9$WHDvL7}!$)VK-4R7kdAIDUwDq%sYbKN(vlHfFdsQXdo66L^exQ^%G>|Y^ETK%|IFh1H|#P&Ut zDiD)%2)FSmc`Bs9yHeCTJ^3MQzcQ0dw6nQAv7$YJRdBsvOc7g(#bjV=?j#9N{1ey& z*JT=nEy8Sg(7?$gDNr;e@(c~Yx}>mOCkIRM8MY#wz+$*ARt77Q#`X#|My97>WKUpv zT(9bXEKfhSFB#kE#%E(I>It-A`8QSBjTE+CW^uM_uOtErkC$=%%6Ytj$zCPpA{ea` zIFPUoP!^7$5T_YQ93C?e&IQWCstoN}cB2nhTXB~YZTC{)>^1*HkX}w>Qi*YK^(ZP# zN-z0&nkHr841!$2c={KM<9b`sVPEp`JdMi2jHI#r$>z#nM_e~5N}NV6FVZ3h*J4R9 zzXsqcdlZc1DcnM<9CVSuvR+oi{fujQMU5qR3Cnk^DHFS3Il*ait~3oQ2A1YJ`UeEs z1MEtt0`MfRH>lJgoNj-z7Y*$!%)%_hL>dweq;ak8bh$rp9k0>HT)6&la$l`cOV#lUyZ-8lK0pzkI+7xW1uwz*4|fSpK9nEm?e^`+e`S^`J-(Mm2l#yZPW8!xSnFG_nR)@G{?!CdE74$WGL0m}0S5EEbE! aVt)b9-F*&;Q?K;^0000>qe5vWHOmdIBd)b z+`uz@LtFYVh6T)FEPZLqH$1})oWO>%BBC~D@H#_rF@!fbjXJWTU|U{fCR)>Zne8N9 zRN-`5QI1xeK@~{@4Y-G~gfNt}tlJFhXB|MtYo}{#=p@hW-3?WGa*g(Re1;a?%FxCk7@bn`MeQ6rz z)$L4LItO^2d5$zaC*|QFl9S_GZp3tm_@go7NydEMW>XQq!8DG>;){1l!VI2d4fzL~ zkR#ta;)nf+Z#?%|#MG5DsATN%Ns7Bd zfBi=h%U>K`u!J{@;s#S$G&r9aa(uz|QV{o0+IgZuUqYM9YiuM%P=m>~U?J|(Y{=o`Vq+`E zVmj7XqAKIiTPQZnMQ@xL**F^0QN|LN;bX4YFaf<=#Xxfw8jnzOBR~(v#{{wQ*zh#! zSc{0y8*@*=&)^uJ(T9q(WM0P{0N^|71PYAZ!vDzT(xiA>GUsp|`-_2t@%5wF@C-Vy zh#J44rHB$&p|OzlJldK4T`4vkg2tz!#wYkYSZrv7#!jNd)-1$dZLy;(u6`F4cHrZ( z4!^5dXkX()RBb)KQm$vhR;zS(?x1iA-LMN*tx}8GxH#3Rjq_555XKy8i5uS12k3m% z<95ao&RgP&eXzS+N?;8hWjbN)t*TyE1ZV@B@*499t#8-{jyt6wcHs+h#Bjd0iD@Lo z%_?r<~3n<1l?G!j`U1J4or3frr4fBeLth$67_6~Uce_lb9(u4MEu=8wBKz2HYEe7*=Fd;Y?anj@Fz>6-gJ{@iH^Kh9Yh)D+=mx2CtP)a3M-+1cGer79{YC@3f> z2#KA!ow~H4Ep6$+T$VD8VRWND?{Y8avYoPv8>l946mdM&=t%{(vDD>a)=)NZ1qtv= zU|(Kk622Btojnv57f}fSyd?*$!tIPBj*eVRslwoFDgfLPSclh{PY9EEoOKizr?LXT zErElWMM%@RO7ZX$$zD_IOQgx85(6dh$WcT3<{mXaNdI4gX@(>YB@@C-$95*m{1 z;hZKweO6Xflvas^9;_QW;og)9%gC0IY#k@z2a?^dB%GYZgz;>us3@rt3By<~-xGRK z9w*_;DvYYDx% zm}310ZP%E48YB~azSm#Wdf%Lo=q79xlEuPuKLQxYE%;4WAeoQ_*g?0 zjwGJ@V{8O%$I8Nekeh@I19Y63h#HW)1U|&io3hXpa+Q!YK-(J1LVv=zTPEJXS3g;p zMi>dMRT5)>wvCpB#Y8cNCM3H>8Sps%X2?P`w6A-p5}q@@ zGWl5{3p4Tec*YY+HKo8{qF5jcWAL?@b&M-dU5WxNB*$mtZS)QM%0sb4g|=Tt>ot$Fnh% z%;vC)(qKEPu@swMLT~xtYBGCLDX}kKQHjY;h0 z-YPG$$8gVtYyXq*uzXR*P?rIkmAQqn7-A+&W;OZaP*VF?e`0MOV@`4qT%E8 z12miS28%GnPPhg5P*Jfy)A_&p61(ytD+s|(xQ_J{9VhaC4^baOtc1{b4_j4EU}bvc zd%}7Q%lCv$8K3V7TQic}dP!liENv09PM9$W~P|ZjPhcYgu3vsmP{G|1Okq{hv zQGem|mUWfHF(JVX$|n@@8UILdrSc8Me3l0f-$?itNN}<86(xL?{^1uC6#N2HU233$ SI>*ca0000svAItC<}d7#NvY zWHk58h|FXa_;2?)C8dIY!}C*BxeWE8Tz|t3%!~hF!0^CrKW{;+2!q6ShQ0}G0g{gz zCUG!Kw|Fp>>q7_gvycW&zKCg=C-%uJfQ=L56i`^e2xPYVfK9hZVPfGBP&l9{43_7c z39^!--~>p};lTAjKYsbJ?l{hvtaU(>Phv$T!&GOP3xSsy&Xq(n*lrhTkS}9A&=jyj zo;Bp$n|sx5rUefVe!0&mT<#}R!=dib(C~v(;KDx^juS=y89upg^ zr;B4q#hkZy9kYZBCE7l!D+T#KXBKiq}j?-Uh=IoLb zzd0k*=h=VLx3|yO*uPlzW%kT-hnE4*CO@$Lz_i2i!Sn00=HA-%(Er$5#`6vC zd!NpUN~;%Ld%L9bx%C6l4=gkCXGm|`)X4a);roHNil^VKUsO7~Ea9K&6G*}xH2q+ zVAjRUUpRN2y{8j13}Gsu!8-Ln`V~XfPKkx666{?F+Nm{3RtEcM|?;zLJ>3us`C@!CK#kiO=Kr*(sdSeux~w d$c}rX|6+M{6o2x{zrf_j;OXk;vd$@?2>|OMDDwaS diff --git a/app/src/main/res/drawable-xxxhdpi/ic_pause.png b/app/src/main/res/drawable-xxxhdpi/ic_pause.png deleted file mode 100644 index 3ea7e03e5dc315fcca0178a146ad2eb1b013c15a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^6F`^|NHCnYy)O!+m`Z~Df*BafCZDwc^3*+D978G? wlNIE9ngS2}|Nozzqcc7u1OYp847l7F8Cs>jNuFVdQ&MBb@0ISd)(EtDd diff --git a/app/src/main/res/drawable-xxxhdpi/ic_photo_filter.png b/app/src/main/res/drawable-xxxhdpi/ic_photo_filter.png deleted file mode 100644 index f947149cb922d52f4cfc5f1d72cf7715d1fc5b5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P)6oBy!C#FoYTw8{K*Z+E7=Bi@IyE6NrDKmpNMN>xAaPEuRnQ)F~^WMz+`I)=# z@a;Ndj4{R-Gcgvjo4b4`CoUw)xyAsVwg5_a2%tBh2^0q~kM3{*R8yUIz(EKY&`w+4 z0e8X$u!M++CHV$?3K(z}fHV09{0{Z=pb_t+!T_rHi}#mueF3`}Zo8@g zs@TC#hWo(|DpUk8pL+f>o?p~6S9Aa?I71JU>EaAaMFvnqI}vdV(#Cpu0oAl62-qz1 z5n3Ma5we%qKBF<_e0DM1PGLVX+GtZYN+h52X~L@)Hq3DbfHO+RX=cYgG0uxz&~P&D zoX;vE23aC1fbt|SC!Mr9Co5okk~yC`Hi!zKh>r~Sk)mwJXI|KV0;3gl1w3Q4XG#Jn zroc5j5|Nx=^Gwkw z7{0NkHNbBzY7Ow4yP5;4sa74}S%3vtfCX591z3OuC=2+AETu^U?jp$-mlTJQhW~4JpA+v}J#W{$l!qJa z?v`&X@VGy3_sf!-uCwKK#caE{ZF-({^tFup$>FEXt=?GwE4fkr=cU2N|JQu}%MJ!IHLCog3nkzJ&RE;Ca)O^r`B{(4wvYR}=E z{jGi0+I#Kod_S0{b>_SL|9h>y_c?oQV-!VE6y*#6*buvhDGRUxAa)&7k_qwEfC!|; zR|86>S$s91L|Tcj29!iQ@zsD5$P!--C>Tk6HK0IT#8(3f!c}}VpaAlSuLcArulNmi z0_%aBfkm-!19048#dSdrjSqcj~H(PGh^!!1)vAm)2VW)I9h*nL8y0t88Nkp1~3Qs$j5-D zc-_D{^3RGlfJ&SvO9z+@d>F!jRLmai8hnZO633`oW81HQ`< zwq939z#{BT&KChpI19TT2Q#1%cP{X@W7sj^BA-4=rKz#~0Zf>Iy|M{rKqGD!@PeZW zpHheO0dPx;;`amdJ>yOXUJq$ND)x(xCam@8p>Tj%z)x+8KM=r#X~3%m7|?~=a`ZdU z>(fJ_U@!Hu2w_4O@N!548gb_W-#VDE*{A-(z#jdBLh+}7D+1(7XtQj1#_dDCME#2@ z&H~_Whok42fcX+&dq@KsaW^~ku`WapK>-d4MGsQIFHykrfeq*eeiM56Aw=!L04|St z)BsyU8PJG#pF=;(L*xnquu&-XPYV7Wmd4T%DApY8&z4zi4UsDdz?VX?+e@lrW58I? z2|XPRmCFlY0rv5aELO#?GcVZhvLw!nU8ezV5Q_YRI^4py0Qgzx?N;9$A%y7@#`h#i zaymes7O%bBP=i#=TF%YCtx} zg>mnD8#N%ClfrnnZvr(SGHO6J(h)Ar5D_&Xn{$NmG2aAgKsM5o5QDx6ybSU?jWpR0uN?|l=5FyJd;e03eajKe;nzFPR0)O+#Z_I30% zvFpqWuu|v=0&IizJ~EReIbq}@pEybtj6!mO-AwVTaOC_0EQwufJAkE)8nYO!>`X>pI|r!f>jALaWLHiLTd=!Xj%A2ny@y)Oe~-Pt?;!qAWsm*|fSXzrzOTaKC%{V%;se|pyIv=lyq&1Z z;!n#V{>Rj12R*P5`-Jh{3X4AGqS{v;gY`?84=mz@|>Y^jl-sE)yiG3K5mNp{69q;P->fZY|E0lR_o%jmsQ0Bevp zcNb~EFVyW-G@-%%0Md`+Nz);o3&X%;=o@tZr(wkX*w+geWxyd|Eik)`o@xuQ1iSC| zYnmQ;aroafHPF-IDI14)vM6knyH rD2k#eilQirq9}@@D2k#eN_+kV7+#Z+%5~Rt00000NkvXXu0mjf?S7@3 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_rotate_one_eighty.png b/app/src/main/res/drawable-xxxhdpi/ic_rotate_one_eighty.png deleted file mode 100644 index 707f4e9d1f053e1ec02550148cf2090bcf57ac60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1391 zcmV-#1(5oQP)r;L_tIl za}z=YMTQY1fiV4I7L*tL(1k&z5LPHm7hP0TlfPL65~da1WKQYi*vyqWPZ#Tq%^dZt zwYO*QwfD^T+@5pxdcSw=z0SASx7Lyj!!QiPFbu;m48t%C!!QiPnCQ6F0zv>6Nm?pt zfut)X&6RYqq)tg4jjs($8j{p6=~qenB>f<%&pFp$w&vOc+z7k^?BUG$8F&@ADRo?x z2IvBw0QR-P^waSRumYHwI^N3AF#dU9ut4LRIRd;isXGF2z#~9^iN-hcH}EJhCAA-= z0?YxvOlW*F-vDz{`%((P1HiwD4L=n_KzC|?3IjjnyqMVJ7+$8tA*q!20AQM=_ar@- z^Ah_deJyFLq&@Pv{vrANU-It*7f8B7($$h~mUN4xOLDfiQBt>a?r6^6R|jA^@Ntei z@i6c@uo%d7qX3J5*MNZ>?QaHVwA+tT!4EqdG6vocEC)KmEkx@$7kCW#GozM`l-It$d(fzSVsX3({!C_RM&+@B%Hy}fT;;}P66JD)cP%T_&)%;GnikAfPl9nH7`r8wIx6&@JB=- zy(GNzo54Q`F~dnQ=w0sabzKTd@UBlzqn zl%ft$V5*!O{IqU}wW)Q60MuVyldts1plV{LG8^4)&~TwDpgPhfT_TT zwKcyH#HxU(-qJ;70GI}RR7>+40o)xBHV8~lA}$jA0^-fJGruAJLj2ThD{fCFFcRP_ z;L}=}KSunI0g>xcYm5Py0en^~^QEY{mSJFaYMn9Qm)Cq=8}lUzSQsI=ve{5G`27T5 z)x!KyfZc%(_y;&Ywa!@Z%TxMlVZI~*k4HQOZ>H9n1z;wyt@7qeC+?Wgo`B=PqSRWm z0L%h*R@(eg2)~qV0lHG_%nERJY7J2|o`M4t$^6;@JY?o4hVfgJ%>1$eF2irMHuF;f z+!||sBhy$|w5BobT}K6X=_G;wbM0gJl?#PEF^wc)HGUV&&Pm@1ocy8#em&+>?d*t# z@heV|p-tXSXqdnCG$||iI>KAPQgR$0gD*KQ!LNci+@hTwRC(uP5k#2Z%t7E2U}eO$ zSK?1+Ihf)4lcy8#+d;QvFlQVQ*U!uL6rGUbu)3=xRq@<~%jFMyn)u+$n7In!5!cSc zCaSR8rEGwE@H^*Ib-?eyePzU2S@6a1<-q&>V3haPgz{6&I z0AL=_(=cq@l9!0zj%5V+9=}WG+A_3fr4r}$v;tp8UMzon{WZ?HmdA$y>m~gpe|-Hm x=iET?Dh?Zit%7+QR?<002ovPDHLkV1hmTinss( diff --git a/app/src/main/res/drawable-xxxhdpi/ic_rotate_right.png b/app/src/main/res/drawable-xxxhdpi/ic_rotate_right.png deleted file mode 100644 index 13e03d530c1e9627c40b6ee7feb2ef75af57d391..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmV+k1or!hP)!j-&U@aod7k&2^TPZ2NQp!u68MTY zz*n3x$yaBC0oH5>HEouFWFkg{XeURoOf(_F_i~dJ>U$98^ z!m9)sXD3-1DCct)s$OU#$Z1xp1i?OIfkKg|RncGtmnqeUrvL;w#C(M!&ryb0Cih75 zHKpDmtw5AIKt`d+bBsxSa*vIa+N-j#?Ps1sQQ#QU*2^t&{En@Uw93NtK1~Wmfk9^c zLbF_=8`~*7h2VPcl2#}R3}Wh#JLLEi(>N;?iWz%JsRHg`9Mc7wW(w_K?yn zumjsua)qBUou@?=FlD!9i7Xc|osb)>!S;+QV$v?n0Ug+GmkaE|G{PcP1axao$Z`qO zR=L2Bm|oW`uvK%$9!%eLTtg*qiS&+(*ueZ&SF}jcwrP%LGi*BOc})sS1@H1FN|U;C|)>=X@%m2K}-)S zUic7GyCTFEOg*X=+c15g2=NJ~PF0Kbn9h+>L`ZWH(>hg)W!UakM7Rgj1WQysPGNdO z5#eo2C*%UJVY)<%B7nyjCSNXa7q)gqfakE?DmVBE(-2uXhQ~0b<8p<~*mlSXT*6}rTR%;5h8zRTIKzCo#nY79M@r6+ z;|S9pk!z&*l2ZFHYD;(6Yag&w+in59Z25{X12kw_#G2}k|`?NQ}!O~#dB00000NkvXXu0mjf DE6>#G diff --git a/app/src/main/res/drawable-xxxhdpi/ic_set_as.png b/app/src/main/res/drawable-xxxhdpi/ic_set_as.png deleted file mode 100644 index 303e1780f9ac93893d1e92c46efbb36c649dd2ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmV;P0%84$P)m4M66A3Tzq&Y-z z8X>!fgqtMRo$!o2x)Z#pqC3Gw7UvOO;Yp8(hqOb>qg-SL;;)P3);6)@^KvMuwLMK_kArL0)R&o&tzy`s^-*Xd6 z4p0ETBNP_72NmQ1-T1yY6c%_3y2=3-g9U=U`7limuoWy2?9GQAa)4uCfne`n4435q z*WovWycSMF4glQccfBI-Kbj90R#VI4=j-4i*UZ=EHW;&!`20z4!SV!K5toLHVLg{{0{{=%$1FONN_~hS!UXvY z;s0j{9rY*laR#A}lL&@j2!>z?hF}PWU!G-mEzgKO4kv~br zlV`@J#PfUK-ZV%J$a6eC%ecQJ%{P3V^L$y|8yENMB{*t}EtOOD+w$nh3cCb1@3gOs z(NUXL^Z!_=djBh<_^G*tip~v;Y!V4zg2B6LC-Z~J)9)~TI2!$q!NTaAv_KMXC36yQ zClJpB;+;?$#75_@1d6f!5ZqOFq^>vZx8moZL)|-7ZSynsEIm^i{62ZAa + + 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..09059a8b4 --- /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..4ad8e70ee --- /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_explore_off_vector.xml b/app/src/main/res/drawable/ic_explore_off_vector.xml new file mode 100644 index 000000000..a67123134 --- /dev/null +++ b/app/src/main/res/drawable/ic_explore_off_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_explore_vector.xml b/app/src/main/res/drawable/ic_explore_vector.xml new file mode 100644 index 000000000..07d304b87 --- /dev/null +++ b/app/src/main/res/drawable/ic_explore_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_flip_horizontally_vector.xml b/app/src/main/res/drawable/ic_flip_horizontally_vector.xml new file mode 100644 index 000000000..7b82d9d7c --- /dev/null +++ b/app/src/main/res/drawable/ic_flip_horizontally_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_flip_vertically_vector.xml b/app/src/main/res/drawable/ic_flip_vertically_vector.xml new file mode 100644 index 000000000..4d9437cf6 --- /dev/null +++ b/app/src/main/res/drawable/ic_flip_vertically_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..7bf8aa41a --- /dev/null +++ b/app/src/main/res/drawable/ic_photo_filter_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_rotate_right_vector.xml b/app/src/main/res/drawable/ic_rotate_right_vector.xml new file mode 100644 index 000000000..ba4935170 --- /dev/null +++ b/app/src/main/res/drawable/ic_rotate_right_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_set_as_vector.xml b/app/src/main/res/drawable/ic_set_as_vector.xml new file mode 100644 index 000000000..51a983f3b --- /dev/null +++ b/app/src/main/res/drawable/ic_set_as_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_slideshow_vector.xml b/app/src/main/res/drawable/ic_slideshow_vector.xml new file mode 100644 index 000000000..a9bc8667b --- /dev/null +++ b/app/src/main/res/drawable/ic_slideshow_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_panorama_photo.xml b/app/src/main/res/layout/activity_panorama_photo.xml index 7b589f5d3..f4a92234d 100644 --- a/app/src/main/res/layout/activity_panorama_photo.xml +++ b/app/src/main/res/layout/activity_panorama_photo.xml @@ -36,6 +36,6 @@ android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:padding="@dimen/activity_margin" - android:src="@drawable/ic_explore"/> + android:src="@drawable/ic_explore_vector"/> diff --git a/app/src/main/res/layout/activity_panorama_video.xml b/app/src/main/res/layout/activity_panorama_video.xml index 45e5fb637..337b4a375 100644 --- a/app/src/main/res/layout/activity_panorama_video.xml +++ b/app/src/main/res/layout/activity_panorama_video.xml @@ -20,7 +20,7 @@ android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:padding="@dimen/activity_margin" - android:src="@drawable/ic_explore"/> + android:src="@drawable/ic_explore_vector"/> diff --git a/app/src/main/res/menu/menu_viewpager.xml b/app/src/main/res/menu/menu_viewpager.xml index ec0607510..42dc1c035 100644 --- a/app/src/main/res/menu/menu_viewpager.xml +++ b/app/src/main/res/menu/menu_viewpager.xml @@ -19,7 +19,7 @@ app:showAsAction="ifRoom"/> @@ -97,12 +97,12 @@ app:showAsAction="ifRoom"/> Date: Sat, 10 Aug 2019 19:59:46 +0200 Subject: [PATCH 56/98] catch exceptions thrown at updating widgets --- .../gallery/pro/helpers/MyWidgetProvider.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyWidgetProvider.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyWidgetProvider.kt index 5ba0e3811..199d90952 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyWidgetProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyWidgetProvider.kt @@ -74,7 +74,11 @@ class MyWidgetProvider : AppWidgetProvider() { } setupAppOpenIntent(context, views, R.id.widget_holder, it) - appWidgetManager.updateAppWidget(it.widgetId, views) + + try { + appWidgetManager.updateAppWidget(it.widgetId, views) + } catch (ignored: Exception) { + } } } } From 9433184d6bd8ad747c36654f9267251943786714 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 10 Aug 2019 20:03:55 +0200 Subject: [PATCH 57/98] catching another exception at deleting dir paths --- .../gallery/pro/activities/MediaActivity.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index 1ed780653..c248e6b05 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -632,7 +632,10 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { private fun deleteDBDirectory() { ensureBackgroundThread { - mDirectoryDao.deleteDirPath(mPath) + try { + mDirectoryDao.deleteDirPath(mPath) + } catch (ignored: Exception) { + } } } From f43784e90a69c8560ec31680d20a88c12969b8be Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 10 Aug 2019 20:38:40 +0200 Subject: [PATCH 58/98] fix date taken values automatically after file copy/move --- .../gallery/pro/activities/ViewPagerActivity.kt | 1 + .../simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt | 1 + .../com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt | 1 + 3 files changed, 3 insertions(+) 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 4d4763fc6..452e348c3 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 @@ -572,6 +572,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View val fileDirItems = arrayListOf(FileDirItem(currPath, currPath.getFilenameFromPath())) tryCopyMoveFilesTo(fileDirItems, isCopyOperation) { + fixDateTaken(arrayListOf(currPath), false) config.tempFolderPath = "" if (!isCopyOperation) { refreshViewPager() diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index 56ae21193..e596e7f95 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -439,6 +439,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList activity.tryCopyMoveFilesTo(fileDirItems, isCopyOperation) { + activity.fixDateTaken(paths, false) config.tempFolderPath = "" listener?.refreshItems() finishActMode() diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt index abe7a0625..60730c194 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt @@ -326,6 +326,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList Date: Sat, 10 Aug 2019 21:34:58 +0200 Subject: [PATCH 59/98] fix #1537, fixing a glitch at opening Favorite videos --- app/build.gradle | 2 +- .../simplemobiletools/gallery/pro/activities/MediaActivity.kt | 4 +++- .../gallery/pro/activities/PhotoVideoActivity.kt | 1 + .../com/simplemobiletools/gallery/pro/extensions/Activity.kt | 4 ++-- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 55e188564..65336cac1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.31' + implementation 'com.simplemobiletools:commons:5.15.33' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index c248e6b05..f053fc89a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -835,7 +835,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { } else { val isVideo = path.isVideoFast() if (isVideo) { - openPath(path, false) + val extras = HashMap() + extras[SHOW_FAVORITES] = mPath == FAVORITES + openPath(path, false, extras) } else { Intent(this, ViewPagerActivity::class.java).apply { putExtra(PATH, path) 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 a1ebf1968..f893e8eba 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 @@ -229,6 +229,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList private fun sendViewPagerIntent(path: String) { Intent(this, ViewPagerActivity::class.java).apply { + putExtra(SHOW_FAVORITES, intent.getBooleanExtra(SHOW_FAVORITES, false)) putExtra(IS_VIEW_INTENT, true) putExtra(IS_FROM_GALLERY, mIsFromGallery) putExtra(PATH, path) 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 446821787..274d4f147 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 @@ -60,8 +60,8 @@ fun Activity.setAs(path: String) { setAsIntent(path, BuildConfig.APPLICATION_ID) } -fun Activity.openPath(path: String, forceChooser: Boolean) { - openPathIntent(path, forceChooser, BuildConfig.APPLICATION_ID) +fun Activity.openPath(path: String, forceChooser: Boolean, extras: HashMap = HashMap()) { + openPathIntent(path, forceChooser, BuildConfig.APPLICATION_ID, extras = extras) } fun Activity.openEditor(path: String, forceChooser: Boolean = false) { From 51260d351f1d160e7b5825722d6977c09f4e2cc6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 10 Aug 2019 21:59:39 +0200 Subject: [PATCH 60/98] fix #1523, check SAF dialog at restoring recycle bin items to SD cards --- .../gallery/pro/extensions/Activity.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 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 274d4f147..339e37a35 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 @@ -256,11 +256,15 @@ fun BaseSimpleActivity.restoreRecycleBinPath(path: String, callback: () -> Unit) fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList, mediumDao: MediumDao = galleryDB.MediumDao(), callback: () -> Unit) { ensureBackgroundThread { val newPaths = ArrayList() - paths.forEach { - val source = it - val destination = it.removePrefix(recycleBinPath) + for (source in paths) { + val destination = source.removePrefix(recycleBinPath) val lastModified = File(source).lastModified() + val isShowingSAF = handleSAFDialog(destination) {} + if (isShowingSAF) { + return@ensureBackgroundThread + } + var inputStream: InputStream? = null var out: OutputStream? = null try { From f2b41a3758300b3c525c5d0d544317c7deb4aaa0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 10 Aug 2019 23:02:46 +0200 Subject: [PATCH 61/98] updating Subsampling version --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 65336cac1..e2717d25e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -76,7 +76,7 @@ dependencies { implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.caverock:androidsvg-aar:1.3' implementation 'com.github.tibbi:gestureviews:4444214285' - implementation 'com.github.tibbi:subsampling-scale-image-view:55eb1ddd5b' + implementation 'com.github.tibbi:subsampling-scale-image-view:8341253173' kapt 'com.github.bumptech.glide:compiler:4.9.0' // keep it here too, not just in Commons, else loading SVGs wont work kapt 'androidx.room:room-compiler:2.1.0' From a66596f1602a38c3d0fc81eda7a1add26b344f24 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 12:10:13 +0200 Subject: [PATCH 62/98] try improving the image loading performance on weaker devices --- .../gallery/pro/fragments/PhotoFragment.kt | 16 +++++++++------- .../gallery/pro/helpers/Constants.kt | 6 ++++++ .../gallery/pro/helpers/PicassoRegionDecoder.kt | 14 ++++++++++++-- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt index fc80387e9..611685d23 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt @@ -251,7 +251,6 @@ class PhotoFragment : ViewPagerFragment() { override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) - if (!mWasInit) { return } @@ -272,6 +271,7 @@ class PhotoFragment : ViewPagerFragment() { loadImage() } + measureScreen() initExtendedDetails() updateInstantSwitchWidths() } @@ -461,13 +461,14 @@ class PhotoFragment : ViewPagerFragment() { mIsSubsamplingVisible = true val config = context!!.config val showHighestQuality = config.showHighestQuality + val minTileDpi = if (showHighestQuality) -1 else getMinTileDpi() val bitmapDecoder = object : DecoderFactory { override fun make() = PicassoDecoder(mMedium.path, Picasso.get(), rotation) } val regionDecoder = object : DecoderFactory { - override fun make() = PicassoRegionDecoder(showHighestQuality) + override fun make() = PicassoRegionDecoder(showHighestQuality, mScreenWidth, mScreenHeight, minTileDpi) } var newOrientation = (rotation + mCurrentRotationDegrees) % 360 @@ -477,7 +478,7 @@ class PhotoFragment : ViewPagerFragment() { mView.subsampling_view.apply { setMaxTileSize(if (showHighestQuality) Integer.MAX_VALUE else 4096) - setMinimumTileDpi(if (showHighestQuality) -1 else getMinTileDpi()) + setMinimumTileDpi(minTileDpi) background = ColorDrawable(Color.TRANSPARENT) bitmapDecoderFactory = bitmapDecoder regionDecoderFactory = regionDecoder @@ -487,6 +488,7 @@ class PhotoFragment : ViewPagerFragment() { isOneToOneZoomEnabled = config.allowOneToOneZoom orientation = newOrientation setImage(mMedium.path) + onImageEventListener = object : SubsamplingScaleImageView.OnImageEventListener { override fun onReady() { background = ColorDrawable(if (config.blackBackground) Color.BLACK else config.backgroundColor) @@ -520,10 +522,10 @@ class PhotoFragment : ViewPagerFragment() { val averageDpi = (metrics.xdpi + metrics.ydpi) / 2 val device = "${Build.BRAND} ${Build.MODEL}".toLowerCase() return when { - WEIRD_DEVICES.contains(device) -> 240 - averageDpi > 400 -> 280 - averageDpi > 300 -> 220 - else -> 160 + WEIRD_DEVICES.contains(device) -> WEIRD_TILE_DPI + averageDpi > 400 -> HIGH_TILE_DPI + averageDpi > 300 -> NORMAL_TILE_DPI + else -> LOW_TILE_DPI } } 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 8e92b07f3..57020eed2 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 @@ -208,3 +208,9 @@ const val MAX_VIDEO_ZOOM_SCALE = 5f const val ZOOM_MODE_NONE = 0 const val ZOOM_MODE_DRAG = 1 const val ZOOM_MODE_ZOOM = 2 + +// constants related to image quality +const val LOW_TILE_DPI = 160 +const val NORMAL_TILE_DPI = 220 +const val WEIRD_TILE_DPI = 240 +const val HIGH_TILE_DPI = 280 diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/PicassoRegionDecoder.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/PicassoRegionDecoder.kt index 7c488b64d..2c98321e9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/PicassoRegionDecoder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/PicassoRegionDecoder.kt @@ -5,7 +5,7 @@ import android.graphics.* import android.net.Uri import com.davemorrissey.labs.subscaleview.ImageRegionDecoder -class PicassoRegionDecoder(val showHighestQuality: Boolean) : ImageRegionDecoder { +class PicassoRegionDecoder(val showHighestQuality: Boolean, val screenWidth: Int, val screenHeight: Int, val minTileDpi: Int) : ImageRegionDecoder { private var decoder: BitmapRegionDecoder? = null private val decoderLock = Any() @@ -18,10 +18,20 @@ class PicassoRegionDecoder(val showHighestQuality: Boolean) : ImageRegionDecoder override fun decodeRegion(rect: Rect, sampleSize: Int): Bitmap { synchronized(decoderLock) { + var newSampleSize = sampleSize + if (!showHighestQuality && minTileDpi == LOW_TILE_DPI) { + if ((rect.width() > rect.height() && screenWidth > screenHeight) || (rect.height() > rect.width() && screenHeight > screenWidth)) { + if ((rect.width() / sampleSize > screenWidth || rect.height() / sampleSize > screenHeight)) { + newSampleSize *= 2 + } + } + } + val options = BitmapFactory.Options() - options.inSampleSize = sampleSize + options.inSampleSize = newSampleSize options.inPreferredConfig = if (showHighestQuality) Bitmap.Config.ARGB_8888 else Bitmap.Config.RGB_565 val bitmap = decoder!!.decodeRegion(rect, options) + return bitmap ?: throw RuntimeException("Region decoder returned null bitmap - image format may not be supported") } } From 82aa3e4bd703354f6468bf868bb7d26356d959a0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 12:54:55 +0200 Subject: [PATCH 63/98] adding a new FAQ item about downloading issues --- .../com/simplemobiletools/gallery/pro/extensions/Activity.kt | 3 ++- 1 file changed, 2 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 339e37a35..bb271b7ac 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 @@ -99,7 +99,8 @@ fun SimpleActivity.launchAbout() { FAQItem(R.string.faq_14_title, R.string.faq_14_text), FAQItem(R.string.faq_15_title, R.string.faq_15_text), FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons), - FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons)) + FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons), + FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons)) startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true) } From c93705ebefeef5e9e6f7ff7973031f1be5346a11 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 15:22:25 +0200 Subject: [PATCH 64/98] reordering a few lines around media fetching --- .../gallery/pro/helpers/MediaFetcher.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index 0132367b3..74bc635e9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -38,13 +38,6 @@ class MediaFetcher(val context: Context) { } fun getFoldersToScan(): ArrayList { - val filterMedia = context.config.filterMedia - val projection = arrayOf(MediaStore.Images.Media.DATA) - val uri = MediaStore.Files.getContentUri("external") - - val selection = "${getSelectionQuery(filterMedia)} ${MediaStore.Images.ImageColumns.BUCKET_ID} IS NOT NULL) GROUP BY (${MediaStore.Images.ImageColumns.BUCKET_ID}" - val selectionArgs = getSelectionArgsQuery(filterMedia).toTypedArray() - return try { val folders = getLatestFileFolders() folders.addAll(arrayListOf( @@ -53,6 +46,11 @@ class MediaFetcher(val context: Context) { Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() ).filter { File(it).exists() }) + val filterMedia = context.config.filterMedia + val uri = MediaStore.Files.getContentUri("external") + val projection = arrayOf(MediaStore.Images.Media.DATA) + val selection = "${getSelectionQuery(filterMedia)} ${MediaStore.Images.ImageColumns.BUCKET_ID} IS NOT NULL) GROUP BY (${MediaStore.Images.ImageColumns.BUCKET_ID}" + val selectionArgs = getSelectionArgsQuery(filterMedia).toTypedArray() val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) folders.addAll(parseCursor(cursor)) From 4595f6549a94e3a2c7e6992034ea4a1263006744 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 15:50:28 +0200 Subject: [PATCH 65/98] lets show some error messages during file fetching --- .../com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index 74bc635e9..8d381eeed 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -60,6 +60,7 @@ class MediaFetcher(val context: Context) { val includedPaths = config.includedFolders folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden) }.toMutableList() as ArrayList } catch (e: Exception) { + context.showErrorToast(e) ArrayList() } } @@ -78,6 +79,8 @@ class MediaFetcher(val context: Context) { parents.add(path.getParentPath()) } while (cursor.moveToNext()) } + } catch (e: Exception) { + context.showErrorToast(e) } finally { cursor?.close() } From 6033d6a8124573457e1aca591cff98e400de5a0f Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 15:56:38 +0200 Subject: [PATCH 66/98] adding a null check at the MediaSideScroll --- .../com/simplemobiletools/gallery/pro/views/MediaSideScroll.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/views/MediaSideScroll.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/views/MediaSideScroll.kt index 52ebde06e..50a338666 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/views/MediaSideScroll.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/views/MediaSideScroll.kt @@ -121,7 +121,7 @@ class MediaSideScroll(context: Context, attrs: AttributeSet) : RelativeLayout(co return true } - private fun getCurrentVolume() = activity!!.audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) + private fun getCurrentVolume() = activity?.audioManager?.getStreamVolume(AudioManager.STREAM_MUSIC) ?: 0 private fun getCurrentBrightness(): Int { return try { From bb109fce95072f50f600ba5131aa8403f87665c7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 17:32:49 +0200 Subject: [PATCH 67/98] update the top menu colors depending on the primary color B/W --- app/build.gradle | 2 +- .../gallery/pro/activities/EditActivity.kt | 1 + .../pro/activities/ExcludedFoldersActivity.kt | 3 ++- .../pro/activities/HiddenFoldersActivity.kt | 3 ++- .../pro/activities/IncludedFoldersActivity.kt | 3 ++- .../gallery/pro/activities/MainActivity.kt | 1 + .../gallery/pro/activities/MediaActivity.kt | 1 + .../pro/activities/PhotoVideoActivity.kt | 1 + .../gallery/pro/activities/SearchActivity.kt | 1 + .../pro/activities/SetWallpaperActivity.kt | 27 ++++++++++--------- .../pro/activities/SettingsActivity.kt | 6 +++++ .../pro/activities/ViewPagerActivity.kt | 4 +++ 12 files changed, 36 insertions(+), 17 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e2717d25e..28137f5a8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.33' + implementation 'com.simplemobiletools:commons:5.16.5' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt index ae8b82750..e3d250a51 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 @@ -122,6 +122,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_editor, menu) + updateMenuItemColors(menu) return true } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ExcludedFoldersActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ExcludedFoldersActivity.kt index 0d3f96fdc..530452b0b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ExcludedFoldersActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ExcludedFoldersActivity.kt @@ -31,8 +31,9 @@ class ExcludedFoldersActivity : SimpleActivity(), RefreshRecyclerViewListener { manage_folders_list.adapter = adapter } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_add_folder, menu) + updateMenuItemColors(menu) return true } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/HiddenFoldersActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/HiddenFoldersActivity.kt index a7a5002ba..4a5aaac85 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/HiddenFoldersActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/HiddenFoldersActivity.kt @@ -36,8 +36,9 @@ class HiddenFoldersActivity : SimpleActivity(), RefreshRecyclerViewListener { } } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_add_folder, menu) + updateMenuItemColors(menu) return true } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/IncludedFoldersActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/IncludedFoldersActivity.kt index f4e0258c3..e1f0d9a06 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/IncludedFoldersActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/IncludedFoldersActivity.kt @@ -30,8 +30,9 @@ class IncludedFoldersActivity : SimpleActivity(), RefreshRecyclerViewListener { manage_folders_list.adapter = adapter } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_add_folder, menu) + updateMenuItemColors(menu) return true } 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 943634d3d..3f6993df1 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 @@ -289,6 +289,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { menu.findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden menu.findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden + updateMenuItemColors(menu) return true } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index f053fc89a..1dc0cabec 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -234,6 +234,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { } setupSearch(menu) + updateMenuItemColors(menu) return true } 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 f893e8eba..b29dff33b 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 @@ -249,6 +249,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList findItem(R.id.menu_show_on_map).isVisible = visibleBottomActions and BOTTOM_ACTION_SHOW_ON_MAP == 0 } + updateMenuItemColors(menu) return true } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt index e87755245..0febbfd0b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt @@ -51,6 +51,7 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_search, menu) setupSearch(menu) + updateMenuItemColors(menu) return true } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt index a1f83c574..56d5d01cd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt @@ -48,6 +48,20 @@ class SetWallpaperActivity : SimpleActivity(), CropImageView.OnCropImageComplete setupBottomActions() } + override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.menu_set_wallpaper, menu) + updateMenuItemColors(menu) + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.save -> confirmWallpaper() + else -> return super.onOptionsItemSelected(item) + } + return true + } + private fun handleImage(intent: Intent) { uri = intent.data if (uri.scheme != "file" && uri.scheme != "content") { @@ -81,19 +95,6 @@ class SetWallpaperActivity : SimpleActivity(), CropImageView.OnCropImageComplete bottom_set_wallpaper_aspect_ratio.setImageResource(if (isLandscapeRatio) R.drawable.ic_minimize else R.drawable.ic_maximize) } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_set_wallpaper, menu) - return true - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - R.id.save -> confirmWallpaper() - else -> return super.onOptionsItemSelected(item) - } - return true - } - private fun changeAspectRatio(isLandscape: Boolean) { isLandscapeRatio = isLandscape setupAspectRatio() diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt index 320cfbf1a..4b58e4000 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.gallery.pro.activities import android.content.Intent import android.os.Bundle import android.text.TextUtils +import android.view.Menu import com.simplemobiletools.commons.dialogs.* import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* @@ -86,6 +87,11 @@ class SettingsActivity : SimpleActivity() { setupImportSettings() } + override fun onCreateOptionsMenu(menu: Menu): Boolean { + updateMenuItemColors(menu) + return super.onCreateOptionsMenu(menu) + } + private fun setupSectionColors() { val adjustedPrimaryColor = getAdjustedPrimaryColor() arrayListOf(visibility_label, videos_label, thumbnails_label, scrolling_label, fullscreen_media_label, security_label, 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 452e348c3..7cf212687 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 @@ -19,6 +19,7 @@ import android.net.Uri import android.os.Bundle import android.os.Handler import android.provider.MediaStore +import android.text.Html import android.view.Menu import android.view.MenuItem import android.view.View @@ -126,6 +127,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View invalidateOptionsMenu() supportActionBar?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + supportActionBar?.title = Html.fromHtml("${mPath.getFilenameFromPath()}") window.statusBarColor = Color.TRANSPARENT } @@ -189,6 +191,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View if (visibleBottomActions != 0) { updateBottomActionIcons(currentMedium) } + + updateMenuItemColors(menu, baseColor = Color.BLACK) return true } From c6a8d6d02abf8209d5dd047c13842ca75360c50d Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 21:39:43 +0200 Subject: [PATCH 68/98] fixing some menu color customization related glitches --- app/build.gradle | 2 +- .../gallery/pro/activities/SettingsActivity.kt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 28137f5a8..5492e563f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.16.5' + implementation 'com.simplemobiletools:commons:5.16.6' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt index 4b58e4000..ccc937593 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt @@ -85,6 +85,7 @@ class SettingsActivity : SimpleActivity() { setupSectionColors() setupExportSettings() setupImportSettings() + invalidateOptionsMenu() } override fun onCreateOptionsMenu(menu: Menu): Boolean { From f96ef68471ead9a2fcc344e5ced9546d5b4a7e87 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 22:13:48 +0200 Subject: [PATCH 69/98] update version to 6.9.2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5492e563f..61347efda 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 260 - versionName "6.9.1" + versionCode 261 + versionName "6.9.2" multiDexEnabled true setProperty("archivesBaseName", "gallery") vectorDrawables.useSupportLibrary = true From 568e9d14b521771fc7cf2b84fc771bf4bf51b1d9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 11 Aug 2019 22:13:53 +0200 Subject: [PATCH 70/98] updating changelog --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8792f59be..9dcb79d48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ Changelog ========== +Version 6.9.2 *(2019-08-11)* +---------------------------- + + * Added some performance improvements at fullscreen media on weaker devices + * Allow long pressing Properties fields to copy values to the clipboard + * Show the errors occuring at file fetching with a toast + * Fixed a glitch at batch renaming using a pattern + * Try fixing Date Taken values automatically after copy/move + * Changed most of the icons to vectors for better quality and lower size + * Properly color the top menu icons + * Some other UX, performance and stability improvements + Version 6.9.1 *(2019-08-03)* ---------------------------- From 885dd2b07a87e302dfb9603c5828d804ceb4ff30 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 15 Aug 2019 13:08:40 +0200 Subject: [PATCH 71/98] update commons to 5.16.9 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 61347efda..78387b486 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.16.6' + implementation 'com.simplemobiletools:commons:5.16.9' 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 6f4186673880500d02bbc712ee8e6da9659fdc30 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 15 Aug 2019 20:47:31 +0200 Subject: [PATCH 72/98] update commons to 5.16.10 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 78387b486..707ec77c1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.16.9' + implementation 'com.simplemobiletools:commons:5.16.10' 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 ec89f03c20bc9b03088a5131a8cfabc8e1439e19 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 16 Aug 2019 14:13:11 +0200 Subject: [PATCH 73/98] update commons to 5.16.12 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 707ec77c1..9cbc39cfd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.16.10' + implementation 'com.simplemobiletools:commons:5.16.12' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' From 9b0567e7bccaa7317ef16b3b3e509c0f5db59de1 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 17 Aug 2019 16:36:03 +0200 Subject: [PATCH 74/98] lets use Glide for Subsampling image decoding, keep Picasso only at regions --- .../gallery/pro/fragments/PhotoFragment.kt | 2 +- .../pro/helpers/MyGlideImageDecoder.kt | 29 +++++++++++++++++++ .../gallery/pro/helpers/PicassoDecoder.kt | 21 -------------- .../pro/helpers/RotateTransformation.kt | 17 +++++++++++ 4 files changed, 47 insertions(+), 22 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/PicassoDecoder.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/RotateTransformation.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt index 611685d23..db7c6058d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt @@ -464,7 +464,7 @@ class PhotoFragment : ViewPagerFragment() { val minTileDpi = if (showHighestQuality) -1 else getMinTileDpi() val bitmapDecoder = object : DecoderFactory { - override fun make() = PicassoDecoder(mMedium.path, Picasso.get(), rotation) + override fun make() = MyGlideImageDecoder(rotation, mScreenWidth, mScreenHeight) } val regionDecoder = object : DecoderFactory { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt new file mode 100644 index 000000000..dde41e841 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt @@ -0,0 +1,29 @@ +package com.simplemobiletools.gallery.pro.helpers + +import android.content.Context +import android.graphics.Bitmap +import android.net.Uri +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DecodeFormat +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.request.RequestOptions +import com.davemorrissey.labs.subscaleview.ImageDecoder + +class MyGlideImageDecoder(val degrees: Int, val width: Int, val height: Int) : ImageDecoder { + + override fun decode(context: Context, uri: Uri): Bitmap { + val options = RequestOptions() + .format(DecodeFormat.PREFER_ARGB_8888) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .fitCenter() + + val builder = Glide.with(context) + .asBitmap() + .load(uri) + .apply(options) + .transform(RotateTransformation(-degrees)) + .into(width, height) + + return builder.get() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/PicassoDecoder.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/PicassoDecoder.kt deleted file mode 100644 index 978106763..000000000 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/PicassoDecoder.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.simplemobiletools.gallery.pro.helpers - -import android.content.Context -import android.graphics.Bitmap -import android.net.Uri -import com.davemorrissey.labs.subscaleview.ImageDecoder -import com.squareup.picasso.MemoryPolicy -import com.squareup.picasso.Picasso - -class PicassoDecoder(val tag: String, val picasso: Picasso, val degrees: Int) : ImageDecoder { - - override fun decode(context: Context, uri: Uri): Bitmap { - return picasso - .load(uri) - .tag(tag) - .config(Bitmap.Config.ARGB_8888) - .memoryPolicy(MemoryPolicy.NO_CACHE) - .rotate(-degrees.toFloat()) - .get() - } -} diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/RotateTransformation.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/RotateTransformation.kt new file mode 100644 index 000000000..9fb0fd127 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/RotateTransformation.kt @@ -0,0 +1,17 @@ +package com.simplemobiletools.gallery.pro.helpers + +import android.graphics.Bitmap +import android.graphics.Matrix +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation +import java.security.MessageDigest + +class RotateTransformation(var degrees: Int) : BitmapTransformation() { + override fun updateDiskCacheKey(messageDigest: MessageDigest) {} + + override fun transform(pool: BitmapPool, toTransform: Bitmap, outWidth: Int, outHeight: Int): Bitmap { + val matrix = Matrix() + matrix.postRotate(degrees.toFloat()) + return Bitmap.createBitmap(toTransform, 0, 0, toTransform.width, toTransform.height, matrix, true) + } +} From 170decd866986d8fda412e987005e1f325263fa5 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 18 Aug 2019 12:03:10 +0200 Subject: [PATCH 75/98] properly handle videos in case the pixels arent square (wtf) --- .../simplemobiletools/gallery/pro/fragments/VideoFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index df260c293..e3bd29731 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 @@ -365,7 +365,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S mExoPlayer!!.addVideoListener(object : SimpleExoPlayer.VideoListener { override fun onVideoSizeChanged(width: Int, height: Int, unappliedRotationDegrees: Int, pixelWidthHeightRatio: Float) { mVideoSize.x = width - mVideoSize.y = height + mVideoSize.y = (height / pixelWidthHeightRatio).toInt() setVideoSize() } From e3bf77a2ba3881b5c8f37627fe07792d1a4841da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hevesi=20J=C3=A1nos?= <44799533+hevesij@users.noreply.github.com> Date: Mon, 19 Aug 2019 08:54:39 +0200 Subject: [PATCH 76/98] Update strings.xml --- app/src/main/res/values-hu/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 07fc40b2b..8ddd1a91d 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -117,10 +117,10 @@ Véletlen sorrend Áthelyezés hátra Diavetítés ismétlése - Animation - None - Fade - Slide + Animáció + Nincs + Áttűnés + Csúsztatás A diavetítés vége A diavetítéshez nem található média @@ -135,11 +135,11 @@ Nincs csoportosítás Mappa Utolsó módosítás - Last modified (daily) - Last modified (monthly) + Utoljára módosítva (naponta) + Utoljára módosítva (havonta) Dátum - Date taken (daily) - Date taken (monthly) + Felvétel dátuma (naponta) + Felvétel dátuma (havonta) Fájl típus Kiterjesztés Kérjük, vegye figyelembe, hogy a csoportosítás és a rendezés 2 egymástól független mező From b97693d8f8edb7375b6e5bbebe87e0a38c47fa36 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 19 Aug 2019 16:09:14 +0200 Subject: [PATCH 77/98] update version to 6.9.3 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9cbc39cfd..190f69cfc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 261 - versionName "6.9.2" + versionCode 262 + versionName "6.9.3" multiDexEnabled true setProperty("archivesBaseName", "gallery") vectorDrawables.useSupportLibrary = true From ab30417171d10076723aa72c67719b9984715309 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 19 Aug 2019 16:09:19 +0200 Subject: [PATCH 78/98] updating changelog --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9dcb79d48..d05b5d171 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ Changelog ========== +Version 6.9.3 *(2019-08-19)* +---------------------------- + + * Added some light theme related improvements + * Properly keep the last_modified field at copy/move in some new cases + * Changed the way fullscreen images are loaded to fix some rotation issues + * Fixed some video playback aspect ratio glitches + * Few other improvements here and there + Version 6.9.2 *(2019-08-11)* ---------------------------- From 84110a0638974b49d2e23cb8f9eb0df7f149626c Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 21 Aug 2019 14:28:27 +0200 Subject: [PATCH 79/98] load the fullscreen image in full resolution with Glide --- .../simplemobiletools/gallery/pro/fragments/PhotoFragment.kt | 2 +- .../gallery/pro/helpers/MyGlideImageDecoder.kt | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt index db7c6058d..9c39b95d0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt @@ -464,7 +464,7 @@ class PhotoFragment : ViewPagerFragment() { val minTileDpi = if (showHighestQuality) -1 else getMinTileDpi() val bitmapDecoder = object : DecoderFactory { - override fun make() = MyGlideImageDecoder(rotation, mScreenWidth, mScreenHeight) + override fun make() = MyGlideImageDecoder(rotation) } val regionDecoder = object : DecoderFactory { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt index dde41e841..b1a3461eb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt @@ -7,9 +7,10 @@ import com.bumptech.glide.Glide import com.bumptech.glide.load.DecodeFormat import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.Target import com.davemorrissey.labs.subscaleview.ImageDecoder -class MyGlideImageDecoder(val degrees: Int, val width: Int, val height: Int) : ImageDecoder { +class MyGlideImageDecoder(val degrees: Int) : ImageDecoder { override fun decode(context: Context, uri: Uri): Bitmap { val options = RequestOptions() @@ -22,7 +23,7 @@ class MyGlideImageDecoder(val degrees: Int, val width: Int, val height: Int) : I .load(uri) .apply(options) .transform(RotateTransformation(-degrees)) - .into(width, height) + .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) return builder.get() } From 4d87543956e04fcaa10b9a2aaa66caac64b46e80 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 21 Aug 2019 14:52:57 +0200 Subject: [PATCH 80/98] update version to 6.9.4 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 190f69cfc..fa3561634 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 262 - versionName "6.9.3" + versionCode 264 + versionName "6.9.4" multiDexEnabled true setProperty("archivesBaseName", "gallery") vectorDrawables.useSupportLibrary = true From b4d7b1f3275a4ec58cc34579b2f9d448ae63f798 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 21 Aug 2019 14:53:02 +0200 Subject: [PATCH 81/98] updating changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d05b5d171..2c606839e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========== +Version 6.9.4 *(2019-08-21)* +---------------------------- + + * Let's load a higher resolution image at the fullscreen view + Version 6.9.3 *(2019-08-19)* ---------------------------- From 800111902e66238cda645fef04cd0df5fe579866 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Aug 2019 10:51:40 +0200 Subject: [PATCH 82/98] updating kotlin, commons, gradle --- app/build.gradle | 2 +- build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fa3561634..4806ea99a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.16.12' + implementation 'com.simplemobiletools:commons:5.16.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' diff --git a/build.gradle b/build.gradle index cfaef4aaf..33f4c89fb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.41' + ext.kotlin_version = '1.3.50' repositories { google() @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.4.2' + classpath 'com.android.tools.build:gradle:3.5.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6d33a8d3b..e9392819f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Apr 30 16:38:30 CEST 2019 +#Tue Aug 27 10:46:16 CEST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip From 5f468343bcfcb26791844d826dfe443cd595b3f4 Mon Sep 17 00:00:00 2001 From: AlbatorV Date: Tue, 27 Aug 2019 10:58:10 +0200 Subject: [PATCH 83/98] Update strings.xml --- app/src/main/res/values-fr/strings.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d994dbf9a..1720e410e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -47,7 +47,7 @@ Cette option cache le dossier en y ajoutant un fichier \".nomedia\", cela cachera aussi tous les sous-dossiers. Vous pouvez les voir en appuyant sur le symbole \"Œil\" (permettant l\'affichage) depuis les paramètres. Continuer ? - Exclure + Exclure le dossier Dossiers exclus Gérer les dossiers exclus Cela va exclure la sélection ainsi que ses sous-dossiers depuis Simple Gallery uniquement. Vous pouvez gérer les dossiers exclus depuis les paramètres. @@ -78,8 +78,8 @@ Éditeur Sauvegarder Pivoter - Chemin - Chemin invalide + Emplacement + Emplacement invalide Échec de l\'édition de l\'image Modifier l\'image avec : Aucun éditeur d\'image trouvé @@ -114,7 +114,7 @@ Inclure les vidéos Inclure les GIFs Ordre aléatoire - Défilement inverse + Défilement inversé Diaporama en boucle Animation Aucune @@ -141,7 +141,7 @@ Date de prise de vue (par mois) Type de fichier Extension - Notez que \'Grouper par\' et \'Trier par\' sont 2 modes indépendants + \'Grouper par\' et \'Trier par\' sont 2 modes indépendants Dossier affiché sur le widget : @@ -164,23 +164,23 @@ Défiler les miniatures horizontalement Masquer automatiquement l\'interface utilisateur Supprimer les dossiers vides après avoir supprimé leur contenu - Contrôler la luminosité des images avec des gestes verticaux + Contrôler la luminosité des images par gestes verticaux Contrôler le volume et la luminosité des vidéos avec des gestes verticaux - Afficher le nombre de fichiers dans les dossiers - Afficher en surimpression les informations supplémentaires du média en plein écran + Afficher le nombre de fichiers des dossiers + Afficher les informations supplémentaires du média en plein écran Gérer les informations supplémentaires Activer les zoom à un doigt sur les images en plein écran Appuyer sur les cotés de l\'écran pour changer instantanément de média - Utiliser le zoom maximal des images + Activer les options de zoom avancées Cacher les informations supplémentaires si la barre d\'état est masquée Afficher les boutons d\'action Afficher la corbeille en vue \"Dossier\" Niveau de zoom - Afficher les images avec la meilleur qualité possible + Afficher les images avec la meilleure qualité possible Afficher la corbeille en fin de liste sur l\'écran principal Fermer la vue plein écran par un geste vers le bas Permettre un zoom avant 1:1 par double appui - Ouvrir les vidéos sur un écran séparé avec de nouveaux gestes horizontaux + Ouvrir les vidéos dans une application externe Afficher une encoche si disponible Pivoter les images par gestes Priorité de chargement des fichiers From d17748dce237663407c7cc0716d026fddb01f4d5 Mon Sep 17 00:00:00 2001 From: unbranched <39440265+unbranched@users.noreply.github.com> Date: Mon, 2 Sep 2019 10:57:55 +0200 Subject: [PATCH 84/98] Italian translation update --- app/src/main/res/values-it/strings.xml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 8dc06e8e7..912af62ca 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -33,7 +33,7 @@ Date aggiornate correttamente Condividi una versione ridimensionata Hey,\n\nhai aggiornato dalla vecchia versione gratuita. Puoi disinstallare le vecchia versione, che ha un pulsante \'Aggiorna a Pro\' in alto nelle impostazioni.\n\nNon potrai recuperare gli elementi dal cestino, gli elementi marcati come preferiti e dovrai anche reimpostare le impostazioni dell\'app.\n\nGrazie! - Switch to file search across all visible folders + Passa alla ricerca file su tutte le cartelle visibili Filtra i file @@ -64,7 +64,7 @@ Gestisci le cartelle incluse Aggiungi cartella Se si hanno alcune cartelle che contengono media, ma non sono state riconosciute dall\'app, si possono aggiungerle manualmente qui. - No media files have been found. You can solve it by adding the folders containing media files manually. + Nessun file multimediale trovato. Puoi risolvere aggiungendo a mano le cartelle contenenti i file multimediali. Ridimensiona @@ -116,10 +116,10 @@ Ordine sparso Scorri al contrario Ripeti presentazione - Animation - None - Fade - Slide + Animazione + Nessuna + Dissolvenza + Diapositiva La presentazione è terminata Nessun file trovato per la presentazione @@ -134,11 +134,11 @@ Non raggruppare i file Cartella Ultima modifica - Last modified (daily) - Last modified (monthly) + Ultima modifica (quotidiano) + Ultima modifica (mensile) Data creazione - Date taken (daily) - Date taken (monthly) + Data creazione (quotidiano) + Data creazione (mensile) Tipo di file Estensione Notare che il raggruppamento e l\'ordinamento sono due campi indipendenti From e582dd6034b70bdf65d76841069f1f855183ad9c Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Sep 2019 20:16:00 +0200 Subject: [PATCH 85/98] fix #1571, properly handle the backstack at using shortcuts --- .../simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index e596e7f95..94ce790ae 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -465,7 +465,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList Date: Tue, 3 Sep 2019 21:07:53 +0200 Subject: [PATCH 86/98] fix #1552, fixing a glitch related to removing multiple folders at once --- .../gallery/pro/adapters/DirectoryAdapter.kt | 73 ++++++++++--------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index 94ce790ae..dafd0cc89 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -218,47 +218,50 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList - if (success) { - hideFolder(path) - } - } - } else { - config.wasHideFolderTooltipShown = true - ConfirmationDialog(activity, activity.getString(R.string.hide_folder_description)) { - activity.handleLockedFolderOpening(path) { success -> - if (success) { - hideFolder(path) + activity.handleLockedFolderOpening(path) { success -> + if (success) { + if (path.containsNoMedia()) { + activity.removeNoMedia(path) { + if (activity.config.shouldShowHidden) { + updateFolderNames() + } else { + activity.runOnUiThread { + listener?.refreshItems() + finishActMode() + } } } + } else { + config.addIncludedFolder(path) + activity.runOnUiThread { + listener?.refreshItems() + finishActMode() + } } } - } else { - activity.handleLockedFolderOpening(path) { success -> - if (success) { - if (path.containsNoMedia()) { - activity.removeNoMedia(path) { - if (activity.config.shouldShowHidden) { - updateFolderNames() - } else { - activity.runOnUiThread { - listener?.refreshItems() - finishActMode() - } - } - } - } else { - config.addIncludedFolder(path) - activity.runOnUiThread { - listener?.refreshItems() - finishActMode() - } - } - } + } + } + } + + private fun hideFolders(paths: ArrayList) { + for (path in paths) { + activity.handleLockedFolderOpening(path) { success -> + if (success) { + hideFolder(path) } } } From 629bc2d46364a3a44ccb418313c5eaab299fec5c Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Sep 2019 22:49:47 +0200 Subject: [PATCH 87/98] adding a new string about showing file type indication at thumbnails --- app/src/main/res/values-ar/strings.xml | 1 + app/src/main/res/values-az/strings.xml | 1 + app/src/main/res/values-ca/strings.xml | 1 + app/src/main/res/values-cs/strings.xml | 1 + app/src/main/res/values-da/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-el/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fi/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-gl/strings.xml | 1 + app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 1 + app/src/main/res/values-id/strings.xml | 1 + app/src/main/res/values-in/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-ko-rKR/strings.xml | 1 + app/src/main/res/values-lt/strings.xml | 1 + app/src/main/res/values-nb/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-sk/strings.xml | 1 + app/src/main/res/values-sl/strings.xml | 1 + app/src/main/res/values-sr/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rHK/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 35 files changed, 35 insertions(+) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 01bb0576f..f0e7e674e 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -189,6 +189,7 @@ Speed Compromise Avoid showing invalid files + Show image file types المصغرات diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 491abfbca..19c550c8c 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types Thumbnails diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 23d4c570f..7b9ee0777 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -187,6 +187,7 @@ Velocitat Compromès Eviteu mostrar fitxers no vàlids + Show image file types Miniatures diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index b8567bbea..d5d0e769b 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -187,6 +187,7 @@ Rychlost Kompromis Vyvarovat se zobrazení neplatných souborů + Show image file types Náhledy diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 8f5cab707..e9452a427 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -187,6 +187,7 @@ Hastighed Kompromis Undgå at vise ugyldige filer + Show image file types Miniaturer diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ee4ff9d73..db3af073c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -187,6 +187,7 @@ Geschwindigkeit Kompromiss Das Anzeigen von ungültigen Dateien vermeiden + Show image file types Thumbnails diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 3681fbaed..b58f1813a 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -187,6 +187,7 @@ Ταχύτητα Συμβιβασμός Αποφυγή εμφάνισης μη έγκυρων αρχείων + Show image file types Εικονίδια diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 5ff43ba32..f32555c28 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -187,6 +187,7 @@ Velocidad Compromiso Evita mostrar archivos inválidos + Show image file types Miniaturas diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 1b240e4c0..4242e9b45 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types Esikatselukuvat diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 1720e410e..19ef5b79b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -187,6 +187,7 @@ Rapide Compromis Eviter l\'affichage de fichiers invalides + Show image file types Miniatures diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index dc475d665..2029b965c 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types Iconas diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 4166fa6f2..5e3835a4a 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types Sličice diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 8ddd1a91d..5c58d71c2 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -188,6 +188,7 @@ Gyors Kiegyensúlyozott Kerülje az érvénytelen fájlok mutatását + Show image file types Miniatűrök diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index ca635c575..3ba7745ec 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -187,6 +187,7 @@ Kecepatan Kompromi Hindari menampilkan berkas yang tidak valid + Show image file types Thumbnail diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 04851828f..2674e9fa6 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -187,6 +187,7 @@ Kecepatan Kompromi Hindari menampilkan berkas yang tidak valid + Show image file types Thumbnail diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 912af62ca..8d6ad7350 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -187,6 +187,7 @@ Veloce Compromesso Evita di mostrare file non validi + Show image file types Anteprime diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index e5b135a5f..607b80397 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types サムネイル設定 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index a29c3a84b..39a8bc851 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types 섬네일 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 722e243e6..658b2cd3f 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types Miniatiūros diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 724fa7562..468f37265 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -187,6 +187,7 @@ Hastighet Kompromiss Unngå visning av ugyldige filer + Show image file types Minibilder diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 639c7e3d6..54a786729 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -187,6 +187,7 @@ Snelheid Compromis Ongeldige bestanden verbergen + Show image file types Miniatuurvoorbeelden diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 2b7558c3e..0b3fa9f1c 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -187,6 +187,7 @@ Szybkość Kompromis Unikaj pokazywania niewłaściwych plików + Show image file types Miniatury diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 54ca44e02..10378db4f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -187,6 +187,7 @@ Velocidade Meio termo Evitar a exibição de arquivos inválidos + Show image file types Miniaturas diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index dcb39385e..9a782ef15 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -187,6 +187,7 @@ Velocidade Compromisso Não mostrar ficheiros inválidos + Show image file types Miniaturas diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 72df0723a..fcbb55c68 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -187,6 +187,7 @@ Скорость Компромисс Пропускать файлы с ошибками + Show image file types Миниатюры diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 17975dfe2..29f2feeff 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -187,6 +187,7 @@ Rýchlosť Kompromis Nezobrazovať neplatné súbory + Zobraziť typ obrázkových súborov Náhľady diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index d997791c0..e5586dc90 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -187,6 +187,7 @@ Hitrost Kompromis Izogni se prikazovanju napačnih datotek + Show image file types Sličice diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 15eb6934d..2f4cff456 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -187,6 +187,7 @@ Брзина Компромис Не приказуј оштећене датотеке + Show image file types Сличице diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 7c12d8a8d..2b0520f23 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types Miniatyrer diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a9833c98b..a7e5c8108 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types Küçük resimler diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index fb562ffb0..b56f7184a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -187,6 +187,7 @@ Швидкість Компроміс Запобігати показу пошкоджених файлів + Show image file types Ескізи diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f7628fef5..7a37636b6 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -187,6 +187,7 @@ 速度 折中 避免显示无效的文件 + Show image file types 缩略图 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index b270f8d90..c572d9da7 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -187,6 +187,7 @@ 速度 折衷 避免顯示無效的檔案 + Show image file types 縮圖 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 57f9e0fa9..7fd74cc19 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -187,6 +187,7 @@ 速度 折衷 避免顯示無效的檔案 + Show image file types 縮圖 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7ee43e0db..72a9d9e6a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -187,6 +187,7 @@ Speed Compromise Avoid showing invalid files + Show image file types Thumbnails From 2aed30bd72a3bfcabd7c9ea585a0b92ec3d8e38a Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Sep 2019 22:59:31 +0200 Subject: [PATCH 88/98] show gif/raw/svg indications at file thumbnails --- .../gallery/pro/adapters/MediaAdapter.kt | 14 ++++++++++++++ .../main/res/layout/photo_video_item_grid.xml | 15 +++++++++++++++ .../main/res/layout/photo_video_item_list.xml | 17 +++++++++++++++++ app/src/main/res/values/donottranslate.xml | 3 +++ 4 files changed, 49 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt index 60730c194..dac29a18e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt @@ -21,6 +21,8 @@ import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.dialogs.DeleteWithRememberDialog import com.simplemobiletools.gallery.pro.extensions.* import com.simplemobiletools.gallery.pro.helpers.SHOW_ALL +import com.simplemobiletools.gallery.pro.helpers.TYPE_GIFS +import com.simplemobiletools.gallery.pro.helpers.TYPE_RAWS import com.simplemobiletools.gallery.pro.helpers.VIEW_TYPE_LIST import com.simplemobiletools.gallery.pro.interfaces.MediaOperationsListener import com.simplemobiletools.gallery.pro.models.Medium @@ -445,6 +447,18 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList R.string.gif + TYPE_RAWS -> R.string.raw + else -> R.string.svg + }) + file_type.beVisible() + } else { + file_type.beGone() + } + medium_name.beVisibleIf(displayFilenames || isListViewType) medium_name.text = medium.name medium_name.tag = medium.path diff --git a/app/src/main/res/layout/photo_video_item_grid.xml b/app/src/main/res/layout/photo_video_item_grid.xml index 834214464..241f57980 100644 --- a/app/src/main/res/layout/photo_video_item_grid.xml +++ b/app/src/main/res/layout/photo_video_item_grid.xml @@ -24,6 +24,21 @@ android:src="@drawable/img_play_outline" android:visibility="gone"/> + + + + + GIF + RAW + SVG com.simplemobiletools.gallery.pro From 1c20589d4dea51916919d6b846588603caa607f1 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Sep 2019 23:25:30 +0200 Subject: [PATCH 89/98] adding a setting for toggling file type visibility --- .../gallery/pro/activities/EditActivity.kt | 11 +++++++++ .../gallery/pro/activities/MediaActivity.kt | 6 +++++ .../pro/activities/SettingsActivity.kt | 9 ++++++++ .../gallery/pro/adapters/MediaAdapter.kt | 8 ++++++- .../gallery/pro/helpers/Config.kt | 4 ++++ .../gallery/pro/helpers/Constants.kt | 1 + app/src/main/res/layout/activity_settings.xml | 23 +++++++++++++++++++ 7 files changed, 61 insertions(+), 1 deletion(-) 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 e3d250a51..5149f870e 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 @@ -25,6 +25,7 @@ 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 import com.simplemobiletools.commons.helpers.REAL_FILE_PATH @@ -810,6 +811,16 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } 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() + ConfirmationDialog(this, label, positive = com.simplemobiletools.commons.R.string.ok, negative = 0) { + launchViewIntent("6629852208836920709=di?ved/sppa/erots/moc.elgoog.yalp//:sptth".reversed()) + } + return + } + } + try { ensureBackgroundThread { val file = File(path) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index 1dc0cabec..92579a091 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -73,6 +73,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { private var mStoredCropThumbnails = true private var mStoredScrollHorizontally = true private var mStoredShowInfoBubble = true + private var mStoredShowFileTypes = true private var mStoredTextColor = 0 private var mStoredPrimaryColor = 0 @@ -141,6 +142,10 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { getMedia() } + if (mStoredShowFileTypes != config.showThumbnailFileTypes) { + getMediaAdapter()?.updateShowFileTypes(config.showThumbnailFileTypes) + } + if (mStoredTextColor != config.textColor) { getMediaAdapter()?.updateTextColor(config.textColor) } @@ -285,6 +290,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { mStoredCropThumbnails = cropThumbnails mStoredScrollHorizontally = scrollHorizontally mStoredShowInfoBubble = showInfoBubble + mStoredShowFileTypes = showThumbnailFileTypes mStoredTextColor = textColor mStoredPrimaryColor = primaryColor mShowAll = showAll diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt index ccc937593..c9c296874 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt @@ -64,6 +64,7 @@ class SettingsActivity : SimpleActivity() { setupShowNotch() setupBottomActions() setupThumbnailVideoDuration() + setupThumbnailFileTypes() setupShowMediaCount() setupKeepLastModified() setupShowInfoBubble() @@ -247,6 +248,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupThumbnailFileTypes() { + settings_show_thumbnail_file_types.isChecked = config.showThumbnailFileTypes + settings_show_thumbnail_file_types_holder.setOnClickListener { + settings_show_thumbnail_file_types.toggle() + config.showThumbnailFileTypes = settings_show_thumbnail_file_types.isChecked + } + } + private fun setupDarkBackground() { settings_black_background.isChecked = config.blackBackground settings_black_background_holder.setOnClickListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt index dac29a18e..f76fae3de 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt @@ -54,6 +54,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList R.string.gif TYPE_RAWS -> R.string.raw 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 7b435e810..4b083aad3 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 @@ -178,6 +178,10 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(SHOW_THUMBNAIL_VIDEO_DURATION, false) set(showThumbnailVideoDuration) = prefs.edit().putBoolean(SHOW_THUMBNAIL_VIDEO_DURATION, showThumbnailVideoDuration).apply() + var showThumbnailFileTypes: Boolean + get() = prefs.getBoolean(SHOW_THUMBNAIL_FILE_TYPES, true) + set(showThumbnailFileTypes) = prefs.edit().putBoolean(SHOW_THUMBNAIL_FILE_TYPES, showThumbnailFileTypes).apply() + var screenRotation: Int get() = prefs.getInt(SCREEN_ROTATION, ROTATE_BY_SYSTEM_SETTING) set(screenRotation) = prefs.edit().putInt(SCREEN_ROTATION, screenRotation).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 57020eed2..134df275c 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 @@ -78,6 +78,7 @@ 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" +const val SHOW_THUMBNAIL_FILE_TYPES = "show_thumbnail_file_types" // slideshow const val SLIDESHOW_INTERVAL = "slideshow_interval" diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 4a8c5a1c1..e99e5adc5 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -432,6 +432,29 @@ + + + + + + Date: Tue, 3 Sep 2019 23:27:15 +0200 Subject: [PATCH 90/98] updating Commons to 5.17.3 --- app/build.gradle | 2 +- .../gallery/pro/activities/EditActivity.kt | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4806ea99a..c67ed8ec4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.16.16' + implementation 'com.simplemobiletools:commons:5.17.3' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt index 5149f870e..2e6741f26 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 @@ -814,8 +814,10 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener 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() - ConfirmationDialog(this, label, positive = com.simplemobiletools.commons.R.string.ok, negative = 0) { - launchViewIntent("6629852208836920709=di?ved/sppa/erots/moc.elgoog.yalp//:sptth".reversed()) + runOnUiThread { + ConfirmationDialog(this, label, positive = com.simplemobiletools.commons.R.string.ok, negative = 0) { + launchViewIntent("6629852208836920709=di?ved/sppa/erots/moc.elgoog.yalp//:sptth".reversed()) + } } return } From 43f7cd7eee670424b96f4b9699e529161af20690 Mon Sep 17 00:00:00 2001 From: spkprs Date: Wed, 4 Sep 2019 00:38:00 +0300 Subject: [PATCH 91/98] Update strings.xml --- app/src/main/res/values-el/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index b58f1813a..c4dc1e9cd 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -187,7 +187,7 @@ Ταχύτητα Συμβιβασμός Αποφυγή εμφάνισης μη έγκυρων αρχείων - Show image file types + Εμφάνιση τύπου αρχείου εικόνας Εικονίδια From 79e42c77e84b2b40e4e8c0a49e307a655531dc13 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Wed, 4 Sep 2019 03:10:37 +0200 Subject: [PATCH 92/98] Dutch --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 54a786729..cb2217851 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -187,7 +187,7 @@ Snelheid Compromis Ongeldige bestanden verbergen - Show image file types + Bestandstypen tonen Miniatuurvoorbeelden From 9fae3c67c7db8d026cf76b5dc7083e2d50c6e2cf Mon Sep 17 00:00:00 2001 From: fricyo <30796677+fricyo@users.noreply.github.com> Date: Wed, 4 Sep 2019 09:36:09 +0800 Subject: [PATCH 93/98] Update Translation --- app/src/main/res/values-zh-rTW/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7fd74cc19..a2c94d6c2 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -141,7 +141,7 @@ 拍攝日期 (按月) 檔案類型 副檔名 - 請注意,歸類和排序是兩者是獨立的 + 請注意,歸類和排序兩者是獨立的 在小工具顯示資料夾: @@ -187,7 +187,7 @@ 速度 折衷 避免顯示無效的檔案 - Show image file types + 顯示圖片檔案類型 縮圖 From 693df96bf1f296ce3c091aa138a9ff6137f23b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Wed, 4 Sep 2019 09:16:40 +0200 Subject: [PATCH 94/98] 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 7b9ee0777..9a97506aa 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -187,7 +187,7 @@ Velocitat Compromès Eviteu mostrar fitxers no vàlids - Show image file types + Mostra els tipus de fitxers d\’imatges Miniatures From 9faacb4a7cafe9dacdd4890b8a37908359151c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solatec=20Inform=C3=A0tica?= <35220662+Solatec@users.noreply.github.com> Date: Wed, 4 Sep 2019 09:17:35 +0200 Subject: [PATCH 95/98] 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 f32555c28..3081ab47c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -187,7 +187,7 @@ Velocidad Compromiso Evita mostrar archivos inválidos - Show image file types + Mostrar tipos de archivo de imagen Miniaturas From 09f819a63c0506a9886318cda5ef5d4aa26c3a08 Mon Sep 17 00:00:00 2001 From: zmni Date: Wed, 4 Sep 2019 22:27:50 +0700 Subject: [PATCH 96/98] Update Indonesian translation --- app/src/main/res/values-id/strings.xml | 186 ++++++++++++------------ app/src/main/res/values-in/strings.xml | 190 ++++++++++++------------- 2 files changed, 188 insertions(+), 188 deletions(-) diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index ca635c575..79f9bc1b9 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -12,18 +12,18 @@ Tampilkan semua isi folder Semua folder Beralih ke tampilan folder - Folder lain + Folder lainnya Tampilkan di peta Lokasi tidak diketahui Tambah jumlah kolom Kurangi jumlah kolom - Ubah sampul + Ubah gambar kover Pilih foto Gunakan default Volume Kecerahan - Kunci rotasi - Aktifkan rotasi + Kunci orientasi + Buka kunci orientasi Ubah orientasi Paksa potret Paksa lanskap @@ -33,7 +33,7 @@ Tanggal berhasil diperbaiki Bagikan versi yang diubah ukurannya Hai,\n\nsepertinya anda memperbarui dari aplikasi gratis versi lama. Anda sekarang bisa mencopot versi yang lama, yang ada tombol \'Tingkatkan ke Pro\' di bagian atas pengaturan aplikasi.\n\nHanya item Keranjang sampah yang akan dihapus, item favorit menjadi tak bertanda dan anda juga harus menyetel ulang pengaturan aplikasi.\n\nTerima kasih! - Cari file di semua folder yang terlihat + Beralih ke pencarian berkas di semua folder yang terlihat Filter media @@ -42,47 +42,47 @@ GIF Gambar RAW SVG - Tidak ada file media ditemukan dari filter ini. + Tidak ditemukan berkas media yang sesuai dengan filter ini. Ubah filter - Fungsi ini menyembunyikan folder dengan menambahkan berkas \'.nomedia\' ke dalamnya, juga akan menyembunyikan semua subfolder. Anda bisa melihatnya dari opsi \'Tampilkan berkas tersembunyi\' di Pengaturan. Lanjutkan? + Fungsi ini menyembunyikan folder dengan menambahkan berkas \'.nomedia\' ke dalamnya, juga akan menyembunyikan semua subfoldernya. Anda bisa melihatnya dengan mengaktifkan opsi \'Tampilkan berkas tersembunyi\' di Pengaturan. Lanjutkan? Kecualikan Folder yang dikecualikan - Atur folder yang dikecualikan - Ini hanya akan mengecualikan pilihan bersama dengan subfoldernya di Simple Gallery. Anda bisa mengatur pengecualian di Pengaturan. + Kelola folder yang dikecualikan + Ini akan mengecualikan folder yang dipilih dan seluruh subfoldernya hanya di Simple Gallery. Anda bisa mengelola folder yang dikecualikan di Pengaturan. Kecualikan folder induk? - Mengecualikan folder akan membuatnya bersama subfoldernya tersembunyi hanya di Simple Gallery, namun masih bisa dilihat di aplikasi lain.\n\nJika anda ingin menyembunyikannya dari aplikasi lain juga, gunakan fitur Sembunyikan. - Bersihkan daftar - Hapus semua folder dari daftar pengecualian? Ini tidak akan menghapus folder tersebut. + Mengecualikan folder akan menyembunyikan folder tersebut dan seluruh subfoldernya hanya di Simple Gallery, namun masih bisa dilihat di aplikasi lain.\n\nJika anda ingin menyembunyikannya dari aplikasi lain juga, gunakan fitur Sembunyikan. + Buang semua + Buang semua folder dari daftar pengecualian? Ini tidak akan menghapus folder tersebut. Folder tersembunyi - Atur folder tersembunyi - Sepertinya tidak ada folder tersembunyi dengan berkas \".nomedia\" didalamnya. + Kelola folder tersembunyi + Sepertinya tidak ada folder yang tersembunyi dengan berkas \".nomedia\" di dalamnya. Folder yang disertakan - Atur folder yang disertakan + Kelola folder yang disertakan Tambah folder - Jika ada folder yang berisi berkas media, namun tidak dikenali oleh aplikasi ini, anda bisa menambahkannya disini secara manual.\n\nMenambah beberapa item disini tidak akan mengecualikan folder yang lain. + Jika ada folder yang berisi berkas media namun tidak dikenali oleh aplikasi ini, anda bisa menambahkannya secara manual.\n\nMenambahkan beberapa item di sini tidak akan mengecualikan folder yang lain. Tidak ada berkas media yang ditemukan. Anda bisa memperbaikinya dengan menambahkan folder yang berisi berkas media secara manual. Ubah ukuran - Ubah ukuran terpilih dan simpan + Ubah ukuran dan simpan Lebar Tinggi Jaga aspek rasio - Harap masukkan resolusi dengan benar + Silakan masukkan resolusi yang valid - Editor + Penyunting Simpan Rotasi Jalur Jalur gambar tidak valid - Gagal mengedit gambar - Edit dengan: - Tidak ada aplikasi pengedit gambar + Gagal menyunting gambar + Sunting gambar dengan: + Tidak ditemukan aplikasi penyunting gambar Lokasi berkas tidak diketahui Tidak bisa mengganti berkas sumber Putar ke kiri @@ -96,9 +96,9 @@ Simple Wallpaper - Setel wallpaper - Gagal menyetel sebagai wallpaper - Setel wallpaper dengan: + Setel sebagai Wallpaper + Gagal menyetel sebagai Wallpaper + Setel sebagai Wallpaper dengan: Menyetel wallpaper… Wallpaper berhasil disetel Aspek rasio potret @@ -118,13 +118,13 @@ Slideshow tanpa henti Animasi Tidak ada - Memudar - Bergeser + Pudar + Slide Slideshow berakhir Tidak ditemukan media untuk slideshow - Ubah jenis tampilan + Ubah tampilan Kotak Daftar Kelompokkan subfolder langsung @@ -139,50 +139,50 @@ Tanggal diambil Tanggal diambil (harian) Tanggal diambil (bulanan) - Jenis berkas + Tipe berkas Ekstensi - Harap diingat bahwa mengelompokkan dan mengurutkan adalah 2 menu yang berbeda + Harap dicatat bahwa mengelompokkan dan mengurutkan adalah 2 hal yang berbeda Folder yang ditampilkan pada widget: Tampilkan nama folder - Putar video otomatis + Putar video secara otomatis Ingat posisi pemutaran terakhir - Tampil/sembunyikan nama berkas - Ulangi video + Ubah visibilitas nama berkas + Video berulang Animasi GIF di thumbnail - Kecerahan maksimal saat melihat di layar penuh + Kecerahan maksimum saat melihat di layar penuh Pangkas thumbnail menjadi persegi Tampilkan durasi video - Rotasi layar penuh dari + Rotasi layar penuh menurut Pengaturan sistem Rotasi perangkat Aspek rasio - Background dan status bar hitam saat layar penuh + Latar belakang hitam saat layar penuh Gulir thumbnail secara horizontal - Otomatis sembunyikan status bar saat layar penuh + Otomatis sembunyikan UI sistem saat layar penuh Hapus folder kosong setelah menghapus isinya - Kontrol kecerahan foto dengan gerakan vertikal - Kontrol kecerahan dan volume video dengan gerakan vertikal - Tampilkan jumlah folder media di tampilan utama + Izinkan mangatur kecerahan foto dengan gestur vertikal + Izinkan mangatur kecerahan dan volume video dengan gestur vertikal + Tampilkan jumlah media di tampilan utama Tampilkan detail tambahan saat layar penuh - Atur detail tambahan - Zoom satu jari di layar penuh - Ganti media dengan mengklik sisi layar - Zoom gambar lebih dalam - Sembunyikan detail tambahan ketika status bar disembunyikan - Tampilkan beberapa tombol tindakan dibawah layar - Tampilkan Sampah di layar folder - Zoom gambar mendalam + Kelola detail tambahan + Izinkan zum dengan satu jari di layar penuh + Izinkan mengganti media dengan mengklik sisi layar + Izinkan zum gambar lebih dalam + Sembunyikan detail tambahan ketika bilah status disembunyikan + Tampilkan tombol tindakan di layar bagian bawah + Tampilkan Keranjang Sampah di layar folder + Zum gambar mendalam Tampilkan gambar dalam kualitas tertinggi - Tampilkan Sampah sebagai item terakhir di layar utama - Keluar dari layar penuh dengan menggeser kebawah - Zoom 1:1 (persegi) dengan dua kali ketuk + Tampilkan Keranjang Sampah sebagai item terakhir di layar utama + Izinkan keluar dari layar penuh dengan menggeser ke bawah + Izinkan zum 1:1 dengan dua kali ketuk Selalu buka video pada layar terpisah dengan gestur horizontal baru Tampilkan notch jika tersedia - Rotasi gambar dengan gestur + Izinkan memutar gambar dengan gestur Prioritas pemuatan berkas Kecepatan Kompromi @@ -195,22 +195,22 @@ Tindakan bawah - Sesuaikan tombol tindakan bawah + Kelola tombol tindakan bawah Favorit - Tampil/sembunyikan berkas + Ubah visibilitas berkas Bagaimana cara menjadikan Simple Gallery sebagai aplikasi galeri default? - Pertama anda harus menemukan galeri default saat ini di bagian Aplikasi di Pengaturan perangkat, lihatlah tombol yang seperti \"Buka secara default\", klik itu, lalu pilih \"Hapus default\". - Lain kali anda mencoba membuka gambar atau video, anda akan disuruh memilih aplikasi, dan anda bisa memilih Simple Gallery dan menjadikannya default. + Pertama anda harus menemukan galeri default saat ini di bagian Aplikasi di Pengaturan perangkat, cari tombol dengan label seperti \"Buka secara default\", klik, lalu pilih \"Hapus default\". + Lain kali anda mencoba membuka gambar atau video, anda akan diminta memilih aplikasi, dan anda bisa memilih Simple Gallery dan menjadikannya default. Saya mengunci aplikasi dengan sandi, tapi saya lupa. Apa yang harus dilakukan? Anda bisa menyelesaikannya dengan 2 cara. Anda bisa pasang ulang aplikasi, atau cari aplikasi ini di Pengaturan perangkat dan pilih \"Hapus data\". Ini akan menyetel ulang semua pengaturan anda, dan tidak akan menghapus berkas media apapun. - Bagaimana agar sebuah album selalu muncul paling atas di daftar? - Anda bisa menekan lama album tersebut dan pilih ikon Pin di menu tindakan, itu akan menaruhnya di atas daftar. Anda juga bisa menyematkan beberapa folder, item yang di-pin akan diurutkan berdasarkan metode urutan default. + Bagaimana agar album selalu muncul paling atas di dalam daftar? + Anda bisa menekan lama album tersebut dan pilih ikon Pin di menu tindakan, hal tersebut akan membuat album tetap berada di bagian paling atas daftar. Anda juga bisa menyematkan beberapa folder, item yang di-pin akan diurutkan berdasarkan metode urutan default. Bagaimana cara mempercepat laju video? - Anda dapat menggeser secara horizontal dalam pemutar video, atau klik antara kedua teks durasi dekat bar laju durasi. Itu akan memajukan atau mengundurkan durasi video. + Anda bisa menyeret jari anda secara horizontal pada pemutar video, atau klik pada teks durasi saat ini atau maks dekat bilah laju. Hal tersebut akan memundurkan atau memajukan laju video. Apa perbedaan antara menyembunyikan dan mengecualikan folder? - Mengecualikan tidak akan menampilkan folder di Simple Gallery, sedangkan Sembunyikan bekerja sesuai aturan sistem dan akan menyembunyikan folder juga dari aplikasi galeri yang lain. Cara kerjanya dengan membuat berkas \".nomedia\" kosong pada folder yang diinginkan, yang bisa anda hapus juga dengan aplikasi pengelola berkas. + Mengecualikan tidak akan menampilkan folder di Simple Gallery saja, sedangkan Sembunyikan bekerja sesuai aturan sistem dan akan menyembunyikan folder dari aplikasi galeri yang lain. Cara kerjanya dengan membuat berkas \".nomedia\" kosong pada folder yang diinginkan, yang bisa anda hapus juga dengan aplikasi pengelola berkas. Mengapa folder dengan gambar album musik atau stiker muncul? Kadang anda melihat beberapa album yang tidak biasa muncul. Anda bisa dengan mudah menyembunyikannya dengan menekan lama dan pilih Kecualikan. Pada dialog berikutnya, anda lalu bisa memilih folder induk, yang akan mencegah album terkait muncul kembali. Ada folder berisi gambar namun tidak muncul, apa yang harus dilakukan? @@ -218,14 +218,14 @@ Bagaimana jika saya hanya ingin beberapa folder saja yang terlihat? Menambahkan folder di Folder yang Disertakan tidak otomatis mengecualikan folder yang lain. Yang bisa anda lakukan adalah pergi ke Pengaturan -> Atur Folder yang Dikecualikan, lalu kecualikan folder root \"/\", lalu tambahkan folder yang diinginkan di Pengaturan -> Atur Folder yang Disertakan. Itu akan membuat folder yang dipilih saja yang muncul, dan jika sebuah folder disertakan dan dikecualikan secara bersamaan, folder tersebut akan muncul. - Bisakah saya meng-crop gambar dengan aplikasi ini? + Bisakah saya memangkas gambar dengan aplikasi ini? Ya, anda bisa melakukannya di Penyunting, dengan menyeret sudut gambar. Anda bisa masuk ke penyunting dengan menekan lama thumbnail gambar dan memilih Sunting, atau pilih Sunting dari tampilan layar penuh. Bisakah saya mengelompokkan thumbnail berkas media? Bisa, gunakan menu \"Kelompokkan menurut\" pada tampilan thumbnail. Anda bisa mengelompokkan berkas dengan berbagai kriteria, termasuk Tanggal Diambil. Jika anda menggunakan fungsi \"Tampilkan semua isi folder\", anda juga bisa mengelompokkan berdasarkan foldernya. Tidak bisa mengurutkan berdasarkan Tanggal Diambil, bagaimana cara memperbaikinya? Itu umumnya disebabkan karena berkas yang disalin dari tempat lain. Anda bisa memperbaikinya dengan memilih berkas thumbnail dan pilih \"Perbaiki Tanggal Diambil\". Saya melihat beberapa pita warna pada gambar. Bagaimana saya meningkatkan kualitasnya? - Solusi saat ini untuk menampilkan gambar berfungsi dengan baik dalam sebagian besar kasus, namun jika anda ingin kualitas gambar yang lebih baik, anda bisa mengaktifkan \"Tampilkan gambar dalam kualitas tertinggi\" di pengaturan aplikasi, pada bagian \"Zoom gambar mendalam\". + Solusi saat ini untuk menampilkan gambar berfungsi dengan baik dalam sebagian besar kasus, namun jika anda ingin kualitas gambar yang lebih baik, anda bisa mengaktifkan \"Tampilkan gambar dalam kualitas tertinggi\" di pengaturan aplikasi, pada bagian \"Zum gambar mendalam\". Saya punya berkas/folder tersembunyi. Bagaimana cara memunculkannya? Anda bisa memilih menu \"Tampilkan sementara berkas tersembunyi\" di layar utama, atau \"Tampilkan berkas tersembunyi\" di pengaturan aplikasi untuk menampilkannya. Jika anda tidak ingin menyembunyikannya, tekan lama dan pilih \"Jangan sembunyikan\". Folder disembunyikan dengan menambahkan berkas \".nomedia\" di dalamnya, anda bisa menghapus berkas tersebut dengan aplikasi pengelola berkas. Kenapa aplikasi menggunakan sangat banyak ruang kosong? @@ -233,11 +233,11 @@ - Simple Gallery Pro: Pengelola & Pengedit Foto + Simple Gallery Pro: Pengelola & Penyunting Foto - Galeri offline tanpa iklan. Kelola, sunting, pulihkan dan lindungi foto & video + Galeri luring tanpa iklan. Kelola, sunting, pulihkan dan lindungi foto & video - Simple Gallery Pro adalah aplikasi galeri offline yang sangat mudah disesuaikan. Mengelola & menyunting foto anda, memulihkan berkas yang terhapus dari keranjang sampah, melindungi & menyembunyikan berkas, dan menampilkan banyak format foto & video, diantaranya RAW, SVG dan masih banyak lainnya. + Simple Gallery Pro adalah aplikasi galeri luring yang sangat mudah diubahsuai. Mengelola & menyunting foto anda, memulihkan berkas yang terhapus dari keranjang sampah, melindungi & menyembunyikan berkas, dan menampilkan banyak format foto & video, diantaranya RAW, SVG dan masih banyak lainnya. Aplikasi sama sekali tidak berisi iklan dan tidak membutuhkan perizinan yang tidak perlu. Dan karena aplikasi juga tidak membutuhkan akses internet, privasi anda terlindungi. @@ -245,42 +245,42 @@ SIMPLE GALLERY PRO – FITUR ------------------------------------------------- - • Galeri offline tanpa iklan - • Editor foto bawaan – crop, rotasi, ubah ukuran, gambar, filter, dan lainnya - • Tidak perlu akses internet, sehingga privasi dan keamanan terjaga - • Tidak ada perizinan yang tidak perlu - • Dengan cepat mencari gambar, video & file - • Buka & lihat berbagai jenis foto dan video (RAW, SVG, panorama dll) - • Beragam gestur intuitif untuk mengedit & mengatur file dengan mudah - • Berbagai cara untuk memfilter, kelompokkan & urutkan file - • Sesuaikan penampilan Simple Gallery Pro + • Galeri luring tanpa iklan dan popup + • Penyunting galeri foto sederhana – pangkas, putar, ubah ukuran, gambar, filter & masih banyak lagi + • Tidak membutuhkan akses internet, memberi anda jaminan keamanan dan privasi + • Tidak membutuhkan izin yang tidak diperlukan + • Cepat mencari gambar, video & berkas + • Buka & lihat berbagai macam jenis foto dan video (RAW, SVG, panorama, dll) + • Gestur untuk mempermudah penyuntingan & mengelola berkas + • Banyak cara untuk menambahkan filter, mengelompokkan & mengurutkan berkas + • Sesuaikan tampilan Simple Gallery Pro • Tersedia dalam 32 bahasa - • Favoritkan file untuk akses cepat - • Lindungi foto & video dengan pola, pin atau sidik jari - • Gunakan juga pin, pola & sidik jari untuk mengunci aplikasi atau fungsi tertentu - • Pulihkan foto & video yang terhapus dari Keranjang Sampah - • Ubah keterlihatan file untuk menyembunyikan foto & video - • Buat slideshow file yang bisa disesuaikan - • Lihat info mendetail file Anda (resolusi, EXIF, dll) - • Simple Gallery Pro bersifat open source - … dan lebih banyak lagi! + • Tandai berkas sebagai favorit untuk akses cepat + • Lindungi foto & video anda dengan pola, pin atau sidik jari + • Gunakan pin, pattern & sidik jari untuk mencegah aplikasi dibuka + • Pulihkan foto & video yang dihapus dari keranjang sampah + • Ubah visibilitas berkas untuk menyembunyikan foto & video + • Buat slideshow khusus dari berkas anda + • Lihat informasi detail berkas (resolusi, EXIF, dll) + • Simple Gallery Pro bersumber terbuka + … dan masih banyak lagi! - EDITOR GALERI FOTO - Simple Gallery Pro memudahkan dalam mengedit gambar dengan cepat. Crop, balik, rotasi dan ubah ukuran gambar. Jika Anda merasa agak kreatif, Anda bisa menambahkan filter atau menggambari foto Anda! + PENYUNTING GALERI FOTO + Simple Gallery Pro mempermudah anda menyunting foto. Pangkas, balik, putar dan ubah ukuran gambar anda. Jika anda merasa kreatif anda bisa menambahkan filter dan menggambar pada foto anda! - MENDUKUNG BANYAK JENIS FILE - Tidak seperti galeri lainnya, Simple Gallery Pro mendukung beragam jenis file termasuk JPEG, PNG, MP4, MKV, RAW, SVG, foto dan video panorama dan banyak lagi. + MENDUKUNG BANYAK TIPE BERKAS + Tidak seperti penampil galeri & pengelola foto lainnya, Simple Gallery Pro mendukung sangat banyak tipe berkas yang berbeda diantaranya JPEG, PNG, MP4, MKV, RAW, SVG, foto & video Panorama, dan masih banyak lagi. - BANYAK KUSTOMISASI - Mulai dari UI hingga tombol di toolbar bawah, Simple Gallery Pro bisa dikustomisasi sesuai kebutuhan Anda. Tidak ada aplikasi galeri yang sefleksibel ini! Berkat sifatnya yang open source, kami juga tersedia dalam 32 bahasa! + PENGELOLA GALERI YANG MUDAH DISESUAIKAN + Dari UI sampai tombol tindakan pada bilah perkakas bawah, Simple Gallery Pro sangat mudah disesuaikan dengan keinginan anda. Tidak ada galeri lainnya yang memiliki kemampuan seperti ini! Karena bersumber terbuka, tersedia juga dalam 32 bahasa! PULIHKAN FOTO & VIDEO YANG TERHAPUS - Foto dan video tidak sengaja terhapus? Tenang! Simple Gallery Pro punya fitur Keranjang Sampah dimana Anda bisa memulihkannya dengan mudah. + Secara tidak sengaja menghapus foto atau video? Jangan khawatir! Simple Gallery Pro juga menyertakan fitur Keranjang Sampah yang mempermudah anda memulihkan foto & video yang terhapus. - LINDUNGI & SEMBUNYIKAN FOTO, VIDEO & FILE - Gunakan pin, pola atau sensor sidik jari untuk menyembunyikan foto, video & seluruh album. Anda juga bisa mengunci aplikasi ini atau beberapa fungsi tertentu. Contoh, file tidak bisa dihapus sebelum memindai sidik jari, sehingga mencegah file Anda terhapus secara tidak sengaja. + MELINDUNGI & MENYEMBUNYIKAN FOTO, VIDEO & BERKAS + Menggunakan pin, pola atau pemindai sidik jari perangkat, anda bisa melindungi dan menyembunyikan foto, video & seluruh album. Anda bisa melindungi aplikasinya atau mengunci fungsi-fungsi yang lebih spesifik di dalam aplikasi. Contohnya, anda tidak bisa menghapus berkas tanpa memindai sidik jari, membantu melindungi anda menghapus berkas secara tidak sengaja. - Lihat aplikasi Simple Tools lainnya disini: + Lihat semua aplikasi Simple Tools di sini: https://www.simplemobiletools.com Facebook: diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 04851828f..79f9bc1b9 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -12,18 +12,18 @@ Tampilkan semua isi folder Semua folder Beralih ke tampilan folder - Folder lain + Folder lainnya Tampilkan di peta Lokasi tidak diketahui Tambah jumlah kolom Kurangi jumlah kolom - Ubah sampul + Ubah gambar kover Pilih foto Gunakan default Volume Kecerahan - Kunci rotasi - Aktifkan rotasi + Kunci orientasi + Buka kunci orientasi Ubah orientasi Paksa potret Paksa lanskap @@ -32,8 +32,8 @@ Memperbaiki… Tanggal berhasil diperbaiki Bagikan versi yang diubah ukurannya - Hai,\n\nsepertinya anda memperbarui dari aplikasi gratis versi lama. Anda sekarang bisa mencopot versi yang lama, yang ada tombol \'Tingkatkan ke Pro\' di bagian atas pengaturan aplikasi.\n\nHanya item Keranjang sampah yang akan dihapus, item favorit menjadi tak bertanda dan anda juga harus menyetel ulang pengaturan aplikasi.\n\nThanks! - Switch to file search across all visible folders + Hai,\n\nsepertinya anda memperbarui dari aplikasi gratis versi lama. Anda sekarang bisa mencopot versi yang lama, yang ada tombol \'Tingkatkan ke Pro\' di bagian atas pengaturan aplikasi.\n\nHanya item Keranjang sampah yang akan dihapus, item favorit menjadi tak bertanda dan anda juga harus menyetel ulang pengaturan aplikasi.\n\nTerima kasih! + Beralih ke pencarian berkas di semua folder yang terlihat Filter media @@ -42,37 +42,37 @@ GIF Gambar RAW SVG - Tidak ada berkas media ditemukan dari filter ini. + Tidak ditemukan berkas media yang sesuai dengan filter ini. Ubah filter - Fungsi ini menyembunyikan folder dengan menambahkan berkas \'.nomedia\' ke dalamnya, juga akan menyembunyikan semua subfolder. Anda bisa melihatnya dari opsi \'Tampilkan berkas tersembunyi\' di Pengaturan. Lanjutkan? + Fungsi ini menyembunyikan folder dengan menambahkan berkas \'.nomedia\' ke dalamnya, juga akan menyembunyikan semua subfoldernya. Anda bisa melihatnya dengan mengaktifkan opsi \'Tampilkan berkas tersembunyi\' di Pengaturan. Lanjutkan? Kecualikan Folder yang dikecualikan - Atur folder yang dikecualikan - Ini hanya akan mengecualikan pilihan bersama dengan subfoldernya di Simple Gallery. Anda bisa mengatur pengecualian di Pengaturan. + Kelola folder yang dikecualikan + Ini akan mengecualikan folder yang dipilih dan seluruh subfoldernya hanya di Simple Gallery. Anda bisa mengelola folder yang dikecualikan di Pengaturan. Kecualikan folder induk? - Mengecualikan folder akan membuatnya bersama subfoldernya tersembunyi hanya di Simple Gallery, namun masih bisa dilihat di aplikasi lain.\n\nJika anda ingin menyembunyikannya dari aplikasi lain juga, gunakan fitur Sembunyikan. - Bersihkan daftar - Hapus semua folder dari daftar pengecualian? Ini tidak akan menghapus folder tersebut. + Mengecualikan folder akan menyembunyikan folder tersebut dan seluruh subfoldernya hanya di Simple Gallery, namun masih bisa dilihat di aplikasi lain.\n\nJika anda ingin menyembunyikannya dari aplikasi lain juga, gunakan fitur Sembunyikan. + Buang semua + Buang semua folder dari daftar pengecualian? Ini tidak akan menghapus folder tersebut. Folder tersembunyi - Atur folder tersembunyi - Sepertinya tidak ada folder tersembunyi dengan berkas \".nomedia\" didalamnya. + Kelola folder tersembunyi + Sepertinya tidak ada folder yang tersembunyi dengan berkas \".nomedia\" di dalamnya. Folder yang disertakan - Atur folder yang disertakan + Kelola folder yang disertakan Tambah folder - Jika ada folder yang berisi berkas media, namun tidak dikenali oleh aplikasi ini, anda bisa menambahkannya disini secara manual.\n\nMenambah beberapa item disini tidak akan mengecualikan folder yang lain. + Jika ada folder yang berisi berkas media namun tidak dikenali oleh aplikasi ini, anda bisa menambahkannya secara manual.\n\nMenambahkan beberapa item di sini tidak akan mengecualikan folder yang lain. Tidak ada berkas media yang ditemukan. Anda bisa memperbaikinya dengan menambahkan folder yang berisi berkas media secara manual. Ubah ukuran - Ubah ukuran terpilih dan simpan + Ubah ukuran dan simpan Lebar Tinggi Jaga aspek rasio - Harap masukkan resolusi dengan benar + Silakan masukkan resolusi yang valid Penyunting @@ -81,8 +81,8 @@ Jalur Jalur gambar tidak valid Gagal menyunting gambar - Sunting dengan: - Tidak ada aplikasi penyunting gambar + Sunting gambar dengan: + Tidak ditemukan aplikasi penyunting gambar Lokasi berkas tidak diketahui Tidak bisa mengganti berkas sumber Putar ke kiri @@ -96,9 +96,9 @@ Simple Wallpaper - Setel wallpaper - Gagal menyetel sebagai wallpaper - Setel wallpaper dengan: + Setel sebagai Wallpaper + Gagal menyetel sebagai Wallpaper + Setel sebagai Wallpaper dengan: Menyetel wallpaper… Wallpaper berhasil disetel Aspek rasio potret @@ -116,15 +116,15 @@ Urutan acak Mundur Slideshow tanpa henti - Animation - None - Fade + Animasi + Tidak ada + Pudar Slide Slideshow berakhir Tidak ditemukan media untuk slideshow - Ubah jenis tampilan + Ubah tampilan Kotak Daftar Kelompokkan subfolder langsung @@ -134,52 +134,52 @@ Jangan kelompokkan berkas Folder Terakhir diubah - Last modified (daily) - Last modified (monthly) + Terakhir diubah (harian) + Terakhir diubah (bulanan) Tanggal diambil - Date taken (daily) - Date taken (monthly) - Jenis berkas + Tanggal diambil (harian) + Tanggal diambil (bulanan) + Tipe berkas Ekstensi - Harap dicatat bahwa mengelompokkan dan mengurutkan adalah 2 ruas yang berbeda + Harap dicatat bahwa mengelompokkan dan mengurutkan adalah 2 hal yang berbeda Folder yang ditampilkan pada widget: Tampilkan nama folder - Putar video otomatis + Putar video secara otomatis Ingat posisi pemutaran terakhir - Tampil/sembunyikan nama berkas - Ulangi video + Ubah visibilitas nama berkas + Video berulang Animasi GIF di thumbnail - Kecerahan maksimal saat melihat di layar penuh + Kecerahan maksimum saat melihat di layar penuh Pangkas thumbnail menjadi persegi Tampilkan durasi video - Rotasi layar penuh dari + Rotasi layar penuh menurut Pengaturan sistem Rotasi perangkat Aspek rasio - Background dan status bar hitam saat layar penuh + Latar belakang hitam saat layar penuh Gulir thumbnail secara horizontal - Otomatis sembunyikan sistem UI saat layar penuh + Otomatis sembunyikan UI sistem saat layar penuh Hapus folder kosong setelah menghapus isinya - Izinkan mengontrol kecerahan foto dengan gerakan vertikal - Izinkan mengontrol kecerahan dan volume video dengan gerakan vertikal - Tampilkan jumlah folder media di tampilan utama + Izinkan mangatur kecerahan foto dengan gestur vertikal + Izinkan mangatur kecerahan dan volume video dengan gestur vertikal + Tampilkan jumlah media di tampilan utama Tampilkan detail tambahan saat layar penuh - Atur detail tambahan - Izinkan zoom satu jari di layar penuh + Kelola detail tambahan + Izinkan zum dengan satu jari di layar penuh Izinkan mengganti media dengan mengklik sisi layar - Izinkan zoom gambar lebih dalam - Sembunyikan detail tambahan ketika status bar disembunyikan - Tampilkan beberapa tombol tindakan dibawah layar - Tampilkan Sampah di layar folder - Zoom gambar mendalam + Izinkan zum gambar lebih dalam + Sembunyikan detail tambahan ketika bilah status disembunyikan + Tampilkan tombol tindakan di layar bagian bawah + Tampilkan Keranjang Sampah di layar folder + Zum gambar mendalam Tampilkan gambar dalam kualitas tertinggi - Tampilkan Sampah sebagai item terakhir di layar utama - Izinkan keluar dari layar penuh dengan menggeser kebawah - Izinkan pembesaran 1:1 dengan dua kali ketuk + Tampilkan Keranjang Sampah sebagai item terakhir di layar utama + Izinkan keluar dari layar penuh dengan menggeser ke bawah + Izinkan zum 1:1 dengan dua kali ketuk Selalu buka video pada layar terpisah dengan gestur horizontal baru Tampilkan notch jika tersedia Izinkan memutar gambar dengan gestur @@ -195,22 +195,22 @@ Tindakan bawah - Sesuaikan tombol tindakan bawah + Kelola tombol tindakan bawah Favorit - Tampil/sembunyikan berkas + Ubah visibilitas berkas Bagaimana cara menjadikan Simple Gallery sebagai aplikasi galeri default? - Pertama anda harus menemukan galeri default saat ini di bagian Aplikasi di Pengaturan perangkat, lihatlah tombol yang seperti \"Buka secara default\", klik itu, lalu pilih \"Hapus default\". - Lain kali anda mencoba membuka gambar atau video, anda akan disuruh memilih aplikasi, dan anda bisa memilih Simple Gallery dan menjadikannya default. + Pertama anda harus menemukan galeri default saat ini di bagian Aplikasi di Pengaturan perangkat, cari tombol dengan label seperti \"Buka secara default\", klik, lalu pilih \"Hapus default\". + Lain kali anda mencoba membuka gambar atau video, anda akan diminta memilih aplikasi, dan anda bisa memilih Simple Gallery dan menjadikannya default. Saya mengunci aplikasi dengan sandi, tapi saya lupa. Apa yang harus dilakukan? Anda bisa menyelesaikannya dengan 2 cara. Anda bisa pasang ulang aplikasi, atau cari aplikasi ini di Pengaturan perangkat dan pilih \"Hapus data\". Ini akan menyetel ulang semua pengaturan anda, dan tidak akan menghapus berkas media apapun. - Bagaimana agar sebuah album selalu muncul paling atas di daftar? - Anda bisa menekan lama album tersebut dan pilih ikon Pin di menu tindakan, itu akan menaruhnya di atas daftar. Anda juga bisa menyematkan beberapa folder, item yang di-pin akan diurutkan berdasarkan metode urutan default. + Bagaimana agar album selalu muncul paling atas di dalam daftar? + Anda bisa menekan lama album tersebut dan pilih ikon Pin di menu tindakan, hal tersebut akan membuat album tetap berada di bagian paling atas daftar. Anda juga bisa menyematkan beberapa folder, item yang di-pin akan diurutkan berdasarkan metode urutan default. Bagaimana cara mempercepat laju video? - You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. + Anda bisa menyeret jari anda secara horizontal pada pemutar video, atau klik pada teks durasi saat ini atau maks dekat bilah laju. Hal tersebut akan memundurkan atau memajukan laju video. Apa perbedaan antara menyembunyikan dan mengecualikan folder? - Mengecualikan tidak akan menampilkan folder di Simple Gallery, sedangkan Sembunyikan bekerja sesuai aturan sistem dan akan menyembunyikan folder juga dari aplikasi galeri yang lain. Cara kerjanya dengan membuat berkas \".nomedia\" kosong pada folder yang diinginkan, yang bisa anda hapus juga dengan aplikasi pengelola berkas. + Mengecualikan tidak akan menampilkan folder di Simple Gallery saja, sedangkan Sembunyikan bekerja sesuai aturan sistem dan akan menyembunyikan folder dari aplikasi galeri yang lain. Cara kerjanya dengan membuat berkas \".nomedia\" kosong pada folder yang diinginkan, yang bisa anda hapus juga dengan aplikasi pengelola berkas. Mengapa folder dengan gambar album musik atau stiker muncul? Kadang anda melihat beberapa album yang tidak biasa muncul. Anda bisa dengan mudah menyembunyikannya dengan menekan lama dan pilih Kecualikan. Pada dialog berikutnya, anda lalu bisa memilih folder induk, yang akan mencegah album terkait muncul kembali. Ada folder berisi gambar namun tidak muncul, apa yang harus dilakukan? @@ -218,14 +218,14 @@ Bagaimana jika saya hanya ingin beberapa folder saja yang terlihat? Menambahkan folder di Folder yang Disertakan tidak otomatis mengecualikan folder yang lain. Yang bisa anda lakukan adalah pergi ke Pengaturan -> Atur Folder yang Dikecualikan, lalu kecualikan folder root \"/\", lalu tambahkan folder yang diinginkan di Pengaturan -> Atur Folder yang Disertakan. Itu akan membuat folder yang dipilih saja yang muncul, dan jika sebuah folder disertakan dan dikecualikan secara bersamaan, folder tersebut akan muncul. - Bisakah saya meng-crop gambar dengan aplikasi ini? + Bisakah saya memangkas gambar dengan aplikasi ini? Ya, anda bisa melakukannya di Penyunting, dengan menyeret sudut gambar. Anda bisa masuk ke penyunting dengan menekan lama thumbnail gambar dan memilih Sunting, atau pilih Sunting dari tampilan layar penuh. Bisakah saya mengelompokkan thumbnail berkas media? Bisa, gunakan menu \"Kelompokkan menurut\" pada tampilan thumbnail. Anda bisa mengelompokkan berkas dengan berbagai kriteria, termasuk Tanggal Diambil. Jika anda menggunakan fungsi \"Tampilkan semua isi folder\", anda juga bisa mengelompokkan berdasarkan foldernya. Tidak bisa mengurutkan berdasarkan Tanggal Diambil, bagaimana cara memperbaikinya? Itu umumnya disebabkan karena berkas yang disalin dari tempat lain. Anda bisa memperbaikinya dengan memilih berkas thumbnail dan pilih \"Perbaiki Tanggal Diambil\". Saya melihat beberapa pita warna pada gambar. Bagaimana saya meningkatkan kualitasnya? - Solusi saat ini untuk menampilkan gambar berfungsi dengan baik dalam sebagian besar kasus, namun jika anda ingin kualitas gambar yang lebih baik, anda bisa mengaktifkan \"Tampilkan gambar dalam kualitas tertinggi\" di pengaturan aplikasi, pada bagian \"Zoom gambar mendalam\". + Solusi saat ini untuk menampilkan gambar berfungsi dengan baik dalam sebagian besar kasus, namun jika anda ingin kualitas gambar yang lebih baik, anda bisa mengaktifkan \"Tampilkan gambar dalam kualitas tertinggi\" di pengaturan aplikasi, pada bagian \"Zum gambar mendalam\". Saya punya berkas/folder tersembunyi. Bagaimana cara memunculkannya? Anda bisa memilih menu \"Tampilkan sementara berkas tersembunyi\" di layar utama, atau \"Tampilkan berkas tersembunyi\" di pengaturan aplikasi untuk menampilkannya. Jika anda tidak ingin menyembunyikannya, tekan lama dan pilih \"Jangan sembunyikan\". Folder disembunyikan dengan menambahkan berkas \".nomedia\" di dalamnya, anda bisa menghapus berkas tersebut dengan aplikasi pengelola berkas. Kenapa aplikasi menggunakan sangat banyak ruang kosong? @@ -242,45 +242,45 @@ Aplikasi sama sekali tidak berisi iklan dan tidak membutuhkan perizinan yang tidak perlu. Dan karena aplikasi juga tidak membutuhkan akses internet, privasi anda terlindungi. ------------------------------------------------- - SIMPLE GALLERY PRO – FEATURES + SIMPLE GALLERY PRO – FITUR ------------------------------------------------- - • Offline gallery with no ads or popups - • Simple gallery photo editor – crop, rotate, resize, draw, filters & more - • No internet access needed, giving you more privacy and security - • No unnecessary permissions required - • Quickly search images, videos & files - • Open & view many different photo and video types (RAW, SVG, panoramic etc) - • A variety of intuitive gestures to easily edit & organize files - • Lots of ways to filter, group & sort files - • Customize the appearance of Simple Gallery Pro - • Available in 32 languages - • Mark files as favorites for quick access - • Protect your photos & videos with a pattern, pin or fingerprint - • Use pin, pattern & fingerprint to protect the app launch or specific functions too - • Recover deleted photos & videos from the recycle bin - • Toggle visibility of files to hide photos & videos - • Create a customizable slideshow of your files - • View detailed information of your files (resolution, EXIF values etc) - • Simple Gallery Pro is open source - … and much much more! + • Galeri luring tanpa iklan dan popup + • Penyunting galeri foto sederhana – pangkas, putar, ubah ukuran, gambar, filter & masih banyak lagi + • Tidak membutuhkan akses internet, memberi anda jaminan keamanan dan privasi + • Tidak membutuhkan izin yang tidak diperlukan + • Cepat mencari gambar, video & berkas + • Buka & lihat berbagai macam jenis foto dan video (RAW, SVG, panorama, dll) + • Gestur untuk mempermudah penyuntingan & mengelola berkas + • Banyak cara untuk menambahkan filter, mengelompokkan & mengurutkan berkas + • Sesuaikan tampilan Simple Gallery Pro + • Tersedia dalam 32 bahasa + • Tandai berkas sebagai favorit untuk akses cepat + • Lindungi foto & video anda dengan pola, pin atau sidik jari + • Gunakan pin, pattern & sidik jari untuk mencegah aplikasi dibuka + • Pulihkan foto & video yang dihapus dari keranjang sampah + • Ubah visibilitas berkas untuk menyembunyikan foto & video + • Buat slideshow khusus dari berkas anda + • Lihat informasi detail berkas (resolusi, EXIF, dll) + • Simple Gallery Pro bersumber terbuka + … dan masih banyak lagi! - PHOTO GALLERY EDITOR - Simple Gallery Pro makes it easy to edit your pictures on the fly. Crop, flip, rotate and resize your pictures. If you’re feeling a little more creative you can add filters and draw on your pictures! + PENYUNTING GALERI FOTO + Simple Gallery Pro mempermudah anda menyunting foto. Pangkas, balik, putar dan ubah ukuran gambar anda. Jika anda merasa kreatif anda bisa menambahkan filter dan menggambar pada foto anda! - SUPPORT FOR MANY FILE TYPES - Unlike some other gallery viewers & photo organizers, Simple Gallery Pro supports a huge range of different file types including JPEG, PNG, MP4, MKV, RAW, SVG, Panoramic photos, Panoramic videos and many more. + MENDUKUNG BANYAK TIPE BERKAS + Tidak seperti penampil galeri & pengelola foto lainnya, Simple Gallery Pro mendukung sangat banyak tipe berkas yang berbeda diantaranya JPEG, PNG, MP4, MKV, RAW, SVG, foto & video Panorama, dan masih banyak lagi. - HIGHLY CUSTOMIZABLE GALLERY MANAGER - From the UI to the function buttons on the bottom toolbar, Simple Gallery Pro is highly customizable and works the way you want it to. No other gallery manager has this kind of flexibility! Thanks to being open source, we’re also available in 32 languages! + PENGELOLA GALERI YANG MUDAH DISESUAIKAN + Dari UI sampai tombol tindakan pada bilah perkakas bawah, Simple Gallery Pro sangat mudah disesuaikan dengan keinginan anda. Tidak ada galeri lainnya yang memiliki kemampuan seperti ini! Karena bersumber terbuka, tersedia juga dalam 32 bahasa! - RECOVER DELETED PHOTOS & VIDEOS - Accidentally deleted a precious photo or video? Don’t worry! Simple Gallery Pro features a handy recycle bin where you can recover deleted photos & videos easily. + PULIHKAN FOTO & VIDEO YANG TERHAPUS + Secara tidak sengaja menghapus foto atau video? Jangan khawatir! Simple Gallery Pro juga menyertakan fitur Keranjang Sampah yang mempermudah anda memulihkan foto & video yang terhapus. - PROTECT & HIDE PHOTOS, VIDEOS & FILES - Using pin, pattern or your device’s fingerprint scanner you can protect and hide photos, videos & entire albums. You can protect the app itself or place locks on specific functions of the app. For example, you can’t delete a file without a fingerprint scan, helping to protect your files from accidental deletion. + MELINDUNGI & MENYEMBUNYIKAN FOTO, VIDEO & BERKAS + Menggunakan pin, pola atau pemindai sidik jari perangkat, anda bisa melindungi dan menyembunyikan foto, video & seluruh album. Anda bisa melindungi aplikasinya atau mengunci fungsi-fungsi yang lebih spesifik di dalam aplikasi. Contohnya, anda tidak bisa menghapus berkas tanpa memindai sidik jari, membantu melindungi anda menghapus berkas secara tidak sengaja. - Check out the full suite of Simple Tools here: + Lihat semua aplikasi Simple Tools di sini: https://www.simplemobiletools.com Facebook: From bad4deb18d2d28ea84558bbf29aa38f4762f7d87 Mon Sep 17 00:00:00 2001 From: zmni Date: Wed, 4 Sep 2019 22:42:06 +0700 Subject: [PATCH 97/98] Minor fix --- app/src/main/res/values-id/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 79f9bc1b9..373ccc640 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -187,6 +187,7 @@ Kecepatan Kompromi Hindari menampilkan berkas yang tidak valid + Tampilkan tipe berkas gambar Thumbnail From 13278d4491bb8a760f9126fbf5ce5d3995885e60 Mon Sep 17 00:00:00 2001 From: zmni Date: Wed, 4 Sep 2019 22:42:55 +0700 Subject: [PATCH 98/98] Minor fix --- app/src/main/res/values-in/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 79f9bc1b9..373ccc640 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -187,6 +187,7 @@ Kecepatan Kompromi Hindari menampilkan berkas yang tidak valid + Tampilkan tipe berkas gambar Thumbnail

    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 Dxx0X> literal 46158 zcmd42c{p2Z_%<3k=!EXJs%q-)uBy4MqQ>Z`C|Zgdqczn$Q)8%>-2pY%T&I~Af9L#l&iT$C=eiD(6)U;c`>toapZj_8`hmU{_mQ(lAP@+* z_PyJN5XgS;CCApGgW%!wMVJ(LIQUdo>ox@V_4~1;eJLrO|5*$$GJ`iXd4@r z1)wrq)TmnSf5rcm_LYd+VhI^bEKm16|L6Qal>Wuni=p4tx5sTSf*XcFJU<2sasGaF z@AoqVa^lZ1{Fh+BpK~04j{gsDAO7r2oH=!vE$LK4eHnLm=TSv`<3fyfRrXj*Ww*>;kd29YDss1%U4$vXNOKgfsgf zzwMw8r_=9i_t4zxJ zEW^86^8EzfB;NNPprzu@8J(+u-8^UDojso!BF|VDq2_0MEHm`2@FP?`(+qu>S-|e5 zIe_LbS60WJy8_zvFN4bVx_^|f$Ryr5+n4Z!6iX<;#_A%h9aVh3&(F_i$T^ma{?zqe z&+?+c^qG2dbjpuYL6Kl8^64s8nev0#m6eofmF^`QFnp$ z<{LNLw9C&2W@oAyTi)TTIKL>#lD?fU8OWFQc-t3yB_`pJzP`iINx>nCj$3FY9YNUzniftSA?ag5>G;Fz6S$YSmrSF&BC&i(N%+ z`aCn8#+{<)e(D>SEzQPL&1eCX7zr`hDL#C_My&L986cScX*Uo(=8bwoqhXgGHv z&kya<^lSHyeKAZ8RLC+fUEcDx;+=Y&=%HU$KC-Px)+>yI61Nr?rFN;*snSD`@T(2o zBEj!kTOpA72h{s-6-Y}jwuUnDqxG4M)aOu3(F1EZ6KFl9HqYH+A%GYpoQ6+fu&-}z zvo@MT$Xvt@7rLyXtATml&jYM+;=KdmJ{{*@oEJS@ppJ>*@?ADPQs4NfC^NMkh8uO4cqoDBaW=-2_M=eezzs*{k{ua1o6 zsGQRtpcNi_ZroGSW6V!1_A6=}uQ=;zTx2*nY@wgiw7gZMtDn<4M@mf1GPg~JGhm@Xf z1uM%YdB~}-y5$~ibsIdouFV1Y5b-N7pO+k{d6ej`ez9d&xga%%4A*lotQh9qYT_;$ zPJl{NMEz$(^>Pue`OJQZ}}wV&#N}9ge+Nyn5hV=i@7cfND#Di&9>IoQPreapae64%)KI({yVavR6b&^R&B<|0hd^f1VkE#w;Fy_?k=uZ? z+=ejI62ewX0jmgiqvdOP113<8pKd*j);GR{oZSza9^tr5&f`3lZ}%?>cysv(U=o{W zA4MD}3cFWcH%0kpCeYkP2f0yH97d(`xdqf`{1;@n#{6`LA`A88GzeSYj12Xx%qnDR z1*_a|ExXbq!>C+7yE0nqSs~0;QpC=>EF?v!-o<|y{vbK#U*#g8E?wn6AwWkYVwy4fZ%0D*y3sn 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 Date: Wed, 31 Jul 2019 13:08:48 +0200 Subject: [PATCH 37/98] Update strings.xml Norwegian (nb) translation update --- app/src/main/res/values-nb/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 54bff70f5..724fa7562 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -33,7 +33,7 @@ Datoer er korrigerte Del versjon med endret størrelse 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 + Skift til filsøk i alle synlige mapper Filtrer media From 1d78acb27a89eda077c709c5ad7ca273925f1fa7 Mon Sep 17 00:00:00 2001 From: Pzqqt <821026875@qq.com> Date: Thu, 1 Aug 2019 09:46:59 +0800 Subject: [PATCH 38/98] Update strings.xml --- app/src/main/res/values-zh-rCN/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5734c6824..f7628fef5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -33,7 +33,7 @@ 日期修复成功 调整图像尺寸并分享 嘿,\n\n看起来您是从旧的免费版应用程序升级的。您现在可以卸载旧版本,在该版本应用的设置菜单顶部有一个“升级到专业版”按钮。\n\n此操作将会删除回收站项目,并取消收藏已收藏的项目,你的应用设置也将会重置。\n\n谢谢! - Switch to file search across all visible folders + 切换文件搜索目标为所有可见的文件夹 要显示的媒体文件 @@ -116,10 +116,10 @@ 随机顺序 倒播 循环幻灯片 - Animation - None - Fade - Slide + 动画 + + 渐变 + 滑动 幻灯片结束 未发现可用媒体 @@ -134,11 +134,11 @@ 禁用文件分组 目录 最近修改 - Last modified (daily) - Last modified (monthly) + 最后修改(按日) + 最后修改(按月) 拍摄时间 - Date taken (daily) - Date taken (monthly) + 拍摄日期(按日) + 拍摄日期(按月) 文件类型 扩展名 请注意,分组和排序是相互独立的 From 5863180738e7de0389e6150a6b00e098ef58a1dc Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 1 Aug 2019 23:36:12 +0200 Subject: [PATCH 39/98] if a parent folder contains .nomedia, add it to included folders at unhiding --- app/build.gradle | 2 +- .../gallery/pro/adapters/DirectoryAdapter.kt | 22 +++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d6eba255f..913b4ca95 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.15' + implementation 'com.simplemobiletools:commons:5.15.21' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index b66f91b6d..691e2b73f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -240,15 +240,23 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList if (success) { - activity.removeNoMedia(path) { - if (activity.config.shouldShowHidden) { - updateFolderNames() - } else { - activity.runOnUiThread { - listener?.refreshItems() - finishActMode() + if (path.containsNoMedia()) { + activity.removeNoMedia(path) { + if (activity.config.shouldShowHidden) { + updateFolderNames() + } else { + activity.runOnUiThread { + listener?.refreshItems() + finishActMode() + } } } + } else { + config.addIncludedFolder(path) + activity.runOnUiThread { + listener?.refreshItems() + finishActMode() + } } } } From 860ea21386db64b72d912523771057f407da62b7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 2 Aug 2019 14:00:19 +0200 Subject: [PATCH 40/98] improve the main screen performance, rescan folders with new images first --- .../gallery/pro/helpers/MediaFetcher.kt | 45 ++++++++++++++----- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index 8893d32d4..dcb34076b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.gallery.pro.helpers import android.content.Context import android.database.Cursor import android.os.Environment +import android.provider.BaseColumns import android.provider.MediaStore import android.text.format.DateFormat import com.simplemobiletools.commons.extensions.* @@ -45,26 +46,48 @@ class MediaFetcher(val context: Context) { val selectionArgs = getSelectionArgsQuery(filterMedia).toTypedArray() return try { - val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) - val folders = parseCursor(cursor) + val folders = getLatestFileFolders() - val priorityFolders = arrayListOf( + folders.addAll(arrayListOf( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(), "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)}/Camera", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() - ).filter { File(it).exists() } + ).filter { File(it).exists() }) - folders.sortBy { - val folder = it - !priorityFolders.any { it.equals(folder, true) } - } + val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) + folders.addAll(parseCursor(cursor)) - folders + val config = context.config + val shouldShowHidden = config.shouldShowHidden + val excludedPaths = config.excludedFolders + val includedPaths = config.includedFolders + folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden) }.toMutableList() as ArrayList } catch (e: Exception) { ArrayList() } } + private fun getLatestFileFolders(): LinkedHashSet { + val uri = MediaStore.Files.getContentUri("external") + val projection = arrayOf(MediaStore.Images.ImageColumns.DATA) + val parents = LinkedHashSet() + val sorting = "${BaseColumns._ID} DESC LIMIT 50" + var cursor: Cursor? = null + try { + cursor = context.contentResolver.query(uri, projection, null, null, sorting) + if (cursor?.moveToFirst() == true) { + do { + val path = cursor.getStringValue(MediaStore.Images.ImageColumns.DATA) ?: continue + parents.add(path.getParentPath()) + } while (cursor.moveToNext()) + } + } finally { + cursor?.close() + } + + return parents + } + private fun getSelectionQuery(filterMedia: Int): String { val query = StringBuilder() query.append("(") @@ -130,7 +153,7 @@ class MediaFetcher(val context: Context) { return args } - private fun parseCursor(cursor: Cursor): ArrayList { + private fun parseCursor(cursor: Cursor): LinkedHashSet { val foldersToIgnore = arrayListOf("/storage/emulated/legacy") val config = context.config val includedFolders = config.includedFolders @@ -155,7 +178,7 @@ class MediaFetcher(val context: Context) { val showHidden = config.shouldShowHidden val excludedFolders = config.excludedFolders foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden) } as ArrayList - return foldersToScan.distinctBy { it.getDistinctPath() } as ArrayList + return foldersToScan.distinctBy { it.getDistinctPath() }.toSet() as LinkedHashSet } private fun addFolder(curFolders: ArrayList, folder: String) { From 70dcad616843b27dc8b7edbe61d6233aabbeb2bc Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 2 Aug 2019 15:57:35 +0200 Subject: [PATCH 41/98] removing an empty line --- .../com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index dcb34076b..0132367b3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -47,7 +47,6 @@ class MediaFetcher(val context: Context) { return try { val folders = getLatestFileFolders() - folders.addAll(arrayListOf( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(), "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)}/Camera", From 995ae1402b5ae03e117e6b709a45ca55cbce13c5 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 2 Aug 2019 17:00:27 +0200 Subject: [PATCH 42/98] rewriting the way exoplayer handles videos, fixing some glitches --- .../gallery/pro/fragments/VideoFragment.kt | 97 +++++++++++++------ 1 file changed, 65 insertions(+), 32 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 1f14eef95..b3a59e080 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 @@ -49,9 +49,12 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private var mWasVideoStarted = false private var mWasPlayerInited = false private var mWasLastPositionRestored = false + private var mPlayOnPrepared = false + private var mIsPlayerPrepared = false private var mCurrTime = 0 private var mDuration = 0 private var mPositionWhenInit = 0 + private var mPositionAtPause = 0L private var mExoPlayer: SimpleExoPlayer? = null private var mVideoSize = Point(1, 1) @@ -80,11 +83,12 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S mView = inflater.inflate(R.layout.pager_video_item, container, false).apply { instant_prev_item.setOnClickListener { listener?.goToPrevItem() } instant_next_item.setOnClickListener { listener?.goToNextItem() } + panorama_outline.setOnClickListener { openPanorama() } video_curr_time.setOnClickListener { skip(false) } video_duration.setOnClickListener { skip(true) } video_holder.setOnClickListener { toggleFullscreen() } video_preview.setOnClickListener { toggleFullscreen() } - panorama_outline.setOnClickListener { openPanorama() } + video_surface_frame.setOnClickListener { toggleFullscreen() } video_play_outline.setOnClickListener { if (mConfig.openVideosOnSeparateScreen) { launchVideoPlayer() @@ -108,6 +112,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S mBrightnessSideScroll = video_brightness_controller mVolumeSideScroll = video_volume_controller mTextureView = video_surface + mTextureView.surfaceTextureListener = this@VideoFragment if (mConfig.allowDownGesture) { video_preview.setOnTouchListener { view, event -> @@ -158,7 +163,6 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } if (!mIsPanorama) { - setupPlayer() if (savedInstanceState != null) { mCurrTime = savedInstanceState.getInt(PROGRESS) } @@ -268,21 +272,6 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } } - private fun setupPlayer() { - if (activity == null || mConfig.openVideosOnSeparateScreen || mIsPanorama) { - return - } - - mView.video_surface_frame.setOnClickListener { toggleFullscreen() } - mTextureView.surfaceTextureListener = this - - checkExtendedDetails() - - mExoPlayer = ExoPlayerFactory.newSimpleInstance(context) - mExoPlayer!!.seekParameters = SeekParameters.CLOSEST_SYNC - initExoPlayerListeners() - } - private fun saveVideoProgress() { if (!videoEnded()) { mConfig.saveLastVideoPosition(mMedium.path, mExoPlayer!!.currentPosition.toInt() / 1000) @@ -292,6 +281,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private fun restoreLastVideoSavedPosition() { val pos = mConfig.getLastVideoPosition(mMedium.path) if (pos > 0) { + mPositionAtPause = pos * 1000L setPosition(pos) } } @@ -317,6 +307,13 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } private fun initExoPlayer() { + if (activity == null || mConfig.openVideosOnSeparateScreen || mIsPanorama || mExoPlayer != null) { + return + } + + mExoPlayer = ExoPlayerFactory.newSimpleInstance(context) + mExoPlayer!!.seekParameters = SeekParameters.CLOSEST_SYNC + val isContentUri = mMedium.path.startsWith("content://") val uri = if (isContentUri) Uri.parse(mMedium.path) else Uri.fromFile(File(mMedium.path)) val dataSpec = DataSpec(uri) @@ -325,15 +322,19 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S fileDataSource.open(dataSpec) } catch (e: Exception) { activity?.showErrorToast(e) + return } val factory = DataSource.Factory { fileDataSource } val audioSource = ExtractorMediaSource(fileDataSource.uri, factory, DefaultExtractorsFactory(), null, null) + mPlayOnPrepared = true mExoPlayer!!.audioStreamType = C.STREAM_TYPE_MUSIC mExoPlayer!!.prepare(audioSource) - } - private fun initExoPlayerListeners() { + if (mTextureView.surfaceTexture != null) { + mExoPlayer!!.setVideoSurface(Surface(mTextureView.surfaceTexture)) + } + mExoPlayer!!.addListener(object : Player.EventListener { override fun onPlaybackParametersChanged(playbackParameters: PlaybackParameters?) {} @@ -483,10 +484,14 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } private fun skip(forward: Boolean) { - if (mExoPlayer == null || mIsPanorama) { + if (mIsPanorama) { + return + } else if (mExoPlayer == null) { + playVideo() return } + mPositionAtPause = 0L val curr = mExoPlayer!!.currentPosition val twoPercents = Math.max((mExoPlayer!!.duration / 50).toInt(), MIN_SKIP_LENGTH) val newProgress = if (forward) curr + twoPercents else curr - twoPercents @@ -499,17 +504,25 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - if (mExoPlayer != null && fromUser) { - if (!mWasPlayerInited) { - mPositionWhenInit = progress + if (fromUser) { + if (mExoPlayer != null) { + if (!mWasPlayerInited) { + mPositionWhenInit = progress + } + setPosition(progress) + } + + if (mExoPlayer == null) { + mPositionAtPause = progress * 1000L + playVideo() } - setPosition(progress) } } override fun onStartTrackingTouch(seekBar: SeekBar) { - if (mExoPlayer == null) + if (mExoPlayer == null) { return + } mExoPlayer!!.playWhenReady = false mIsDragged = true @@ -527,26 +540,27 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S if (mIsPlaying) { mExoPlayer!!.playWhenReady = true } else { - togglePlayPause() + playVideo() } mIsDragged = false } private fun togglePlayPause() { - if (activity == null || !isAdded) + if (activity == null || !isAdded) { return + } - mIsPlaying = !mIsPlaying if (mIsPlaying) { - playVideo() - } else { pauseVideo() + } else { + playVideo() } } fun playVideo() { if (mExoPlayer == null) { + initExoPlayer() return } @@ -575,9 +589,11 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } mWasVideoStarted = true - mIsPlaying = true + if (mIsPlayerPrepared) { + mIsPlaying = true + } mExoPlayer?.playWhenReady = true - activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } private fun pauseVideo() { @@ -592,6 +608,8 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S mPlayPauseButton.setImageResource(R.drawable.ic_play_outline) activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + mPositionAtPause = mExoPlayer?.currentPosition ?: 0L + releaseExoPlayer() } private fun videoEnded(): Boolean { @@ -604,6 +622,10 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S mExoPlayer?.seekTo(seconds * 1000L) mSeekBar.progress = seconds mCurrTimeView.text = seconds.getFormattedDuration() + + if (!mIsPlaying) { + mPositionAtPause = mExoPlayer?.currentPosition ?: 0L + } } private fun setupVideoDuration() { @@ -627,7 +649,17 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S setPosition(mPositionWhenInit) mPositionWhenInit = 0 } + + mIsPlayerPrepared = true + if (mPlayOnPrepared && !mIsPlaying) { + if (mPositionAtPause != 0L) { + mExoPlayer?.seekTo(mPositionAtPause) + mPositionAtPause = 0L + } + playVideo() + } mWasPlayerInited = true + mPlayOnPrepared = false } private fun videoCompleted() { @@ -657,6 +689,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } private fun releaseExoPlayer() { + mIsPlayerPrepared = false mExoPlayer?.stop() ensureBackgroundThread { mExoPlayer?.release() From bf11b7135e30741d6014eacf6c7956970add6435 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 2 Aug 2019 17:18:07 +0200 Subject: [PATCH 43/98] update commons to 5.15.22 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 913b4ca95..ead701a9b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.21' + implementation 'com.simplemobiletools:commons:5.15.22' 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 3d605b356101e872ddff3c79bf317112d989471c Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 2 Aug 2019 17:23:19 +0200 Subject: [PATCH 44/98] Allow toggling between the old renaming of appending/prepending or using a pattern --- .../simplemobiletools/gallery/pro/adapters/MediaAdapter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt index cffd022e7..abe7a0625 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt @@ -10,8 +10,8 @@ import com.bumptech.glide.Glide import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.dialogs.PropertiesDialog +import com.simplemobiletools.commons.dialogs.RenameDialog import com.simplemobiletools.commons.dialogs.RenameItemDialog -import com.simplemobiletools.commons.dialogs.RenameItemsPatternDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.models.FileDirItem @@ -215,7 +215,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList Date: Fri, 2 Aug 2019 17:25:05 +0200 Subject: [PATCH 45/98] update version to 6.9.0 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ead701a9b..707c854cd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 258 - versionName "6.8.4" + versionCode 259 + versionName "6.9.0" multiDexEnabled true setProperty("archivesBaseName", "gallery") } From c0a502fd5bc61f025327a79eb76f4935bd1e7f6b Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 2 Aug 2019 17:25:12 +0200 Subject: [PATCH 46/98] updating changelog --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28f705b8f..151453477 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ Changelog ========== +Version 6.9.0 *(2019-08-02)* +---------------------------- + + * Show a message at copy/move if the destination doesn't have enough space + * Rewrote the video playback to fix some glitches + * Improve the performance at loading initial screen folders + * Allow toggling between the old renaming of appending/prepending or using a pattern + * Some improvements related to folder un/hiding + Version 6.8.4 *(2019-07-29)* ---------------------------- From 2196d1f4f9ad173a0078cf709667b52c307429f9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 3 Aug 2019 09:25:42 +0200 Subject: [PATCH 47/98] adding a crashfix --- .../simplemobiletools/gallery/pro/fragments/VideoFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index b3a59e080..df260c293 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 @@ -273,7 +273,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } private fun saveVideoProgress() { - if (!videoEnded()) { + if (!videoEnded() && mExoPlayer != null) { mConfig.saveLastVideoPosition(mMedium.path, mExoPlayer!!.currentPosition.toInt() / 1000) } } From 8b09b19df20ce70d3cd3face89877a4c6588eb73 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 3 Aug 2019 13:34:52 +0200 Subject: [PATCH 48/98] update version to 6.9.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 707c854cd..4e621c47f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 259 - versionName "6.9.0" + versionCode 260 + versionName "6.9.1" multiDexEnabled true setProperty("archivesBaseName", "gallery") } From 2506f1579e3258435a828d5d73679fb6930168a6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 3 Aug 2019 13:34:58 +0200 Subject: [PATCH 49/98] updating changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 151453477..8792f59be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========== +Version 6.9.1 *(2019-08-03)* +---------------------------- + + * Fixing a video player related crash + Version 6.9.0 *(2019-08-02)* ---------------------------- From 51673ebdf4d9ba45c904a2dffcb0b38689a96656 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 3 Aug 2019 18:17:12 +0200 Subject: [PATCH 50/98] do not allow clicking file thumbnails, when activity is finishing --- .../simplemobiletools/gallery/pro/activities/MediaActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index 16de5f6fb..1ed780653 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -381,7 +381,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { val fastscroller = if (config.scrollHorizontally) media_horizontal_fastscroller else media_vertical_fastscroller MediaAdapter(this, mMedia.clone() as ArrayList, this, mIsGetImageIntent || mIsGetVideoIntent || mIsGetAnyIntent, mAllowPickingMultiple, mPath, media_grid, fastscroller) { - if (it is Medium) { + if (it is Medium && !isFinishing) { itemClicked(it.path) } }.apply { From 197d504326e375aa4a19025ca40a6b32d7273a36 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 4 Aug 2019 11:03:23 +0200 Subject: [PATCH 51/98] do some preparations for allowing decimals at aspect ratios --- .../gallery/pro/activities/EditActivity.kt | 18 +++---- .../pro/activities/SettingsActivity.kt | 4 +- .../pro/dialogs/CustomAspectRatioDialog.kt | 10 ++-- .../pro/dialogs/OtherAspectRatioDialog.kt | 52 +++++++++---------- .../gallery/pro/helpers/Config.kt | 12 ++--- .../gallery/pro/helpers/Constants.kt | 4 +- 6 files changed, 50 insertions(+), 50 deletions(-) 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 9d4889219..ae8b82750 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 @@ -78,7 +78,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener private var resizeWidth = 0 private var resizeHeight = 0 private var drawColor = 0 - private var lastOtherAspectRatio: Pair? = null + private var lastOtherAspectRatio: Pair? = null private var currPrimaryAction = PRIMARY_ACTION_NONE private var currCropRotateAction = CROP_ROTATE_ASPECT_RATIO private var currAspectRatio = ASPECT_RATIO_FREE @@ -177,12 +177,12 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener setupBottomActions() if (config.lastEditorCropAspectRatio == ASPECT_RATIO_OTHER) { - if (config.lastEditorCropOtherAspectRatioX == 0) { - config.lastEditorCropOtherAspectRatioX = 1 + if (config.lastEditorCropOtherAspectRatioX == 0f) { + config.lastEditorCropOtherAspectRatioX = 1f } - if (config.lastEditorCropOtherAspectRatioY == 0) { - config.lastEditorCropOtherAspectRatioY = 1 + if (config.lastEditorCropOtherAspectRatioY == 0f) { + config.lastEditorCropOtherAspectRatioY = 1f } lastOtherAspectRatio = Pair(config.lastEditorCropOtherAspectRatioX, config.lastEditorCropOtherAspectRatioY) @@ -654,13 +654,13 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener setFixedAspectRatio(false) } else { val newAspectRatio = when (aspectRatio) { - ASPECT_RATIO_ONE_ONE -> Pair(1, 1) - ASPECT_RATIO_FOUR_THREE -> Pair(4, 3) - ASPECT_RATIO_SIXTEEN_NINE -> Pair(16, 9) + ASPECT_RATIO_ONE_ONE -> Pair(1f, 1f) + ASPECT_RATIO_FOUR_THREE -> Pair(4f, 3f) + ASPECT_RATIO_SIXTEEN_NINE -> Pair(16f, 9f) else -> Pair(lastOtherAspectRatio!!.first, lastOtherAspectRatio!!.second) } - setAspectRatio(newAspectRatio.first, newAspectRatio.second) + setAspectRatio(newAspectRatio.first.toInt(), newAspectRatio.second.toInt()) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt index 2e9cc0a84..320cfbf1a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt @@ -790,8 +790,8 @@ class SettingsActivity : SimpleActivity() { SLIDESHOW_MOVE_BACKWARDS -> config.slideshowMoveBackwards = value.toBoolean() SLIDESHOW_LOOP -> config.loopSlideshow = value.toBoolean() LAST_EDITOR_CROP_ASPECT_RATIO -> config.lastEditorCropAspectRatio = value.toInt() - LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_X -> config.lastEditorCropOtherAspectRatioX = value.toInt() - LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y -> config.lastEditorCropOtherAspectRatioY = value.toInt() + LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_X -> config.lastEditorCropOtherAspectRatioX = value.toString().toFloat() + LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y -> config.lastEditorCropOtherAspectRatioY = value.toString().toFloat() LAST_EDITOR_DRAW_COLOR -> config.lastEditorDrawColor = value.toInt() LAST_EDITOR_BRUSH_SIZE -> config.lastEditorBrushSize = value.toInt() LAST_CONFLICT_RESOLUTION -> config.lastConflictResolution = value.toInt() diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/CustomAspectRatioDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/CustomAspectRatioDialog.kt index 830c839de..47df4b89e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/CustomAspectRatioDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/CustomAspectRatioDialog.kt @@ -9,11 +9,11 @@ import com.simplemobiletools.commons.extensions.value import com.simplemobiletools.gallery.pro.R import kotlinx.android.synthetic.main.dialog_custom_aspect_ratio.view.* -class CustomAspectRatioDialog(val activity: BaseSimpleActivity, val defaultCustomAspectRatio: Pair?, val callback: (aspectRatio: Pair) -> Unit) { +class CustomAspectRatioDialog(val activity: BaseSimpleActivity, val defaultCustomAspectRatio: Pair?, val callback: (aspectRatio: Pair) -> Unit) { init { val view = activity.layoutInflater.inflate(R.layout.dialog_custom_aspect_ratio, null).apply { - aspect_ratio_width.setText(defaultCustomAspectRatio?.first?.toString() ?: "") - aspect_ratio_height.setText(defaultCustomAspectRatio?.second?.toString() ?: "") + aspect_ratio_width.setText(defaultCustomAspectRatio?.first?.toInt()?.toString() ?: "") + aspect_ratio_height.setText(defaultCustomAspectRatio?.second?.toInt()?.toString() ?: "") } AlertDialog.Builder(activity) @@ -32,8 +32,8 @@ class CustomAspectRatioDialog(val activity: BaseSimpleActivity, val defaultCusto } } - private fun getViewValue(view: EditText): Int { + private fun getViewValue(view: EditText): Float { val textValue = view.value - return if (textValue.isEmpty()) 0 else textValue.toInt() + return if (textValue.isEmpty()) 0f else textValue.toFloat() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/OtherAspectRatioDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/OtherAspectRatioDialog.kt index 4fe770c8c..76f7e7e78 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/OtherAspectRatioDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/OtherAspectRatioDialog.kt @@ -6,44 +6,44 @@ import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.gallery.pro.R import kotlinx.android.synthetic.main.dialog_other_aspect_ratio.view.* -class OtherAspectRatioDialog(val activity: BaseSimpleActivity, val lastOtherAspectRatio: Pair?, val callback: (aspectRatio: Pair) -> Unit) { +class OtherAspectRatioDialog(val activity: BaseSimpleActivity, val lastOtherAspectRatio: Pair?, val callback: (aspectRatio: Pair) -> Unit) { private val dialog: AlertDialog init { val view = activity.layoutInflater.inflate(R.layout.dialog_other_aspect_ratio, null).apply { - other_aspect_ratio_2_1.setOnClickListener { ratioPicked(Pair(2, 1)) } - other_aspect_ratio_3_2.setOnClickListener { ratioPicked(Pair(3, 2)) } - other_aspect_ratio_4_3.setOnClickListener { ratioPicked(Pair(4, 3)) } - other_aspect_ratio_5_3.setOnClickListener { ratioPicked(Pair(5, 3)) } - other_aspect_ratio_16_9.setOnClickListener { ratioPicked(Pair(16, 9)) } - other_aspect_ratio_19_9.setOnClickListener { ratioPicked(Pair(19, 9)) } + other_aspect_ratio_2_1.setOnClickListener { ratioPicked(Pair(2f, 1f)) } + other_aspect_ratio_3_2.setOnClickListener { ratioPicked(Pair(3f, 2f)) } + other_aspect_ratio_4_3.setOnClickListener { ratioPicked(Pair(4f, 3f)) } + other_aspect_ratio_5_3.setOnClickListener { ratioPicked(Pair(5f, 3f)) } + other_aspect_ratio_16_9.setOnClickListener { ratioPicked(Pair(16f, 9f)) } + other_aspect_ratio_19_9.setOnClickListener { ratioPicked(Pair(19f, 9f)) } other_aspect_ratio_custom.setOnClickListener { customRatioPicked() } - other_aspect_ratio_1_2.setOnClickListener { ratioPicked(Pair(1, 2)) } - other_aspect_ratio_2_3.setOnClickListener { ratioPicked(Pair(2, 3)) } - other_aspect_ratio_3_4.setOnClickListener { ratioPicked(Pair(3, 4)) } - other_aspect_ratio_3_5.setOnClickListener { ratioPicked(Pair(3, 5)) } - other_aspect_ratio_9_16.setOnClickListener { ratioPicked(Pair(9, 16)) } - other_aspect_ratio_9_19.setOnClickListener { ratioPicked(Pair(9, 19)) } + other_aspect_ratio_1_2.setOnClickListener { ratioPicked(Pair(1f, 2f)) } + other_aspect_ratio_2_3.setOnClickListener { ratioPicked(Pair(2f, 3f)) } + other_aspect_ratio_3_4.setOnClickListener { ratioPicked(Pair(3f, 4f)) } + other_aspect_ratio_3_5.setOnClickListener { ratioPicked(Pair(3f, 5f)) } + other_aspect_ratio_9_16.setOnClickListener { ratioPicked(Pair(9f, 16f)) } + other_aspect_ratio_9_19.setOnClickListener { ratioPicked(Pair(9f, 19f)) } val radio1SelectedItemId = when (lastOtherAspectRatio) { - Pair(2, 1) -> other_aspect_ratio_2_1.id - Pair(3, 2) -> other_aspect_ratio_3_2.id - Pair(4, 3) -> other_aspect_ratio_4_3.id - Pair(5, 3) -> other_aspect_ratio_5_3.id - Pair(16, 9) -> other_aspect_ratio_16_9.id - Pair(19, 9) -> other_aspect_ratio_19_9.id + Pair(2f, 1f) -> other_aspect_ratio_2_1.id + Pair(3f, 2f) -> other_aspect_ratio_3_2.id + Pair(4f, 3f) -> other_aspect_ratio_4_3.id + Pair(5f, 3f) -> other_aspect_ratio_5_3.id + Pair(16f, 9f) -> other_aspect_ratio_16_9.id + Pair(19f, 9f) -> other_aspect_ratio_19_9.id else -> 0 } other_aspect_ratio_dialog_radio_1.check(radio1SelectedItemId) val radio2SelectedItemId = when (lastOtherAspectRatio) { - Pair(1, 2) -> other_aspect_ratio_1_2.id - Pair(2, 3) -> other_aspect_ratio_2_3.id - Pair(3, 4) -> other_aspect_ratio_3_4.id - Pair(3, 5) -> other_aspect_ratio_3_5.id - Pair(9, 16) -> other_aspect_ratio_9_16.id - Pair(9, 19) -> other_aspect_ratio_9_19.id + Pair(1f, 2f) -> other_aspect_ratio_1_2.id + Pair(2f, 3f) -> other_aspect_ratio_2_3.id + Pair(3f, 4f) -> other_aspect_ratio_3_4.id + Pair(3f, 5f) -> other_aspect_ratio_3_5.id + Pair(9f, 16f) -> other_aspect_ratio_9_16.id + Pair(9f, 19f) -> other_aspect_ratio_9_19.id else -> 0 } other_aspect_ratio_dialog_radio_2.check(radio2SelectedItemId) @@ -67,7 +67,7 @@ class OtherAspectRatioDialog(val activity: BaseSimpleActivity, val lastOtherAspe } } - private fun ratioPicked(pair: Pair) { + private fun ratioPicked(pair: Pair) { callback(pair) dialog.dismiss() } 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 f4f514705..7b435e810 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 @@ -447,13 +447,13 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getInt(LAST_EDITOR_CROP_ASPECT_RATIO, ASPECT_RATIO_FREE) set(lastEditorCropAspectRatio) = prefs.edit().putInt(LAST_EDITOR_CROP_ASPECT_RATIO, lastEditorCropAspectRatio).apply() - var lastEditorCropOtherAspectRatioX: Int - get() = prefs.getInt(LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_X, 2) - set(lastEditorCropOtherAspectRatioX) = prefs.edit().putInt(LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_X, lastEditorCropOtherAspectRatioX).apply() + var lastEditorCropOtherAspectRatioX: Float + get() = prefs.getFloat(LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_X, 2f) + set(lastEditorCropOtherAspectRatioX) = prefs.edit().putFloat(LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_X, lastEditorCropOtherAspectRatioX).apply() - var lastEditorCropOtherAspectRatioY: Int - get() = prefs.getInt(LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y, 1) - set(lastEditorCropOtherAspectRatioY) = prefs.edit().putInt(LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y, lastEditorCropOtherAspectRatioY).apply() + var lastEditorCropOtherAspectRatioY: Float + get() = prefs.getFloat(LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y, 1f) + set(lastEditorCropOtherAspectRatioY) = prefs.edit().putFloat(LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y, lastEditorCropOtherAspectRatioY).apply() var groupDirectSubfolders: Boolean get() = prefs.getBoolean(GROUP_DIRECT_SUBFOLDERS, false) 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 c7957b0bb..8e92b07f3 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 @@ -67,8 +67,8 @@ const val LAST_BIN_CHECK = "last_bin_check" const val SHOW_HIGHEST_QUALITY = "show_highest_quality" const val ALLOW_DOWN_GESTURE = "allow_down_gesture" const val LAST_EDITOR_CROP_ASPECT_RATIO = "last_editor_crop_aspect_ratio" -const val LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_X = "last_editor_crop_other_aspect_ratio_x" -const val LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y = "last_editor_crop_other_aspect_ratio_y" +const val LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_X = "last_editor_crop_other_aspect_ratio_x_2" +const val LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y = "last_editor_crop_other_aspect_ratio_y_2" 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" From 1b5dae2e4397e2de594bae056171cc72dc8a3541 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 8 Aug 2019 19:46:40 +0200 Subject: [PATCH 52/98] start replacing some icons with vectors --- app/build.gradle | 3 ++- app/src/main/res/layout/directory_item_grid.xml | 2 +- app/src/main/res/layout/directory_item_list.xml | 2 +- app/src/main/res/layout/photo_video_item_grid.xml | 2 +- app/src/main/res/layout/photo_video_item_list.xml | 2 +- app/src/main/res/menu/cab_media.xml | 2 +- app/src/main/res/menu/menu_editor.xml | 2 +- app/src/main/res/menu/menu_main.xml | 2 +- app/src/main/res/menu/menu_media.xml | 2 +- app/src/main/res/menu/menu_set_wallpaper.xml | 2 +- app/src/main/res/menu/menu_viewpager.xml | 2 +- 11 files changed, 12 insertions(+), 11 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4e621c47f..d1653425c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,6 +19,7 @@ android { versionName "6.9.1" multiDexEnabled true setProperty("archivesBaseName", "gallery") + vectorDrawables.useSupportLibrary = true } signingConfigs { @@ -61,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.22' + implementation 'com.simplemobiletools:commons:5.15.24' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/res/layout/directory_item_grid.xml b/app/src/main/res/layout/directory_item_grid.xml index 5a24ac9e9..f1145d6db 100644 --- a/app/src/main/res/layout/directory_item_grid.xml +++ b/app/src/main/res/layout/directory_item_grid.xml @@ -39,7 +39,7 @@ android:background="@drawable/circle_background" android:contentDescription="@null" android:padding="@dimen/tiny_margin" - android:src="@drawable/ic_check" + android:src="@drawable/ic_check_vector" android:visibility="gone"/> diff --git a/app/src/main/res/menu/menu_viewpager.xml b/app/src/main/res/menu/menu_viewpager.xml index ed3dcc8ac..36724a6a7 100644 --- a/app/src/main/res/menu/menu_viewpager.xml +++ b/app/src/main/res/menu/menu_viewpager.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> From e7589591cbc5549ca8d0e40e44dfa683a262d9d8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 9 Aug 2019 11:02:20 +0200 Subject: [PATCH 53/98] updating commons, replace some new icons with vectors --- app/build.gradle | 2 +- .../gallery/pro/activities/ViewPagerActivity.kt | 8 ++++---- app/src/main/res/layout/bottom_actions.xml | 10 +++++----- app/src/main/res/layout/dialog_directory_picker.xml | 2 +- app/src/main/res/layout/directory_item_grid.xml | 2 +- app/src/main/res/layout/directory_item_list.xml | 2 +- app/src/main/res/menu/cab_directories.xml | 4 ++-- app/src/main/res/menu/cab_hidden_folders.xml | 2 +- app/src/main/res/menu/cab_media.xml | 6 +++--- app/src/main/res/menu/menu_add_folder.xml | 2 +- app/src/main/res/menu/menu_editor.xml | 2 +- app/src/main/res/menu/menu_included_folders.xml | 2 +- app/src/main/res/menu/menu_main.xml | 2 +- app/src/main/res/menu/menu_media.xml | 4 ++-- app/src/main/res/menu/menu_search.xml | 2 +- app/src/main/res/menu/menu_video_player.xml | 2 +- app/src/main/res/menu/menu_viewpager.xml | 6 +++--- app/src/main/res/menu/photo_video_menu.xml | 2 +- 18 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d1653425c..6cb891a5c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.15.24' + implementation 'com.simplemobiletools:commons:5.15.25' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index a4783ced3..314cffd36 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 @@ -620,12 +620,12 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View private fun getChangeOrientationIcon(): Int { return if (mIsOrientationLocked) { if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { - R.drawable.ic_orientation_portrait + R.drawable.ic_orientation_portrait_vector } else { - R.drawable.ic_orientation_landscape + R.drawable.ic_orientation_landscape_vector } } else { - R.drawable.ic_orientation_auto + R.drawable.ic_orientation_auto_vector } } @@ -801,7 +801,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View val favoriteIcon = if (medium.isFavorite) R.drawable.ic_star_on else R.drawable.ic_star_off bottom_favorite.setImageResource(favoriteIcon) - val hideIcon = if (medium.isHidden()) R.drawable.ic_unhide else R.drawable.ic_hide + val hideIcon = if (medium.isHidden()) R.drawable.ic_unhide_vector else R.drawable.ic_hide bottom_toggle_file_visibility.setImageResource(hideIcon) bottom_rotate.beVisibleIf(config.visibleBottomActions and BOTTOM_ACTION_ROTATE != 0 && getCurrentMedium()?.isImage() == true) diff --git a/app/src/main/res/layout/bottom_actions.xml b/app/src/main/res/layout/bottom_actions.xml index 23f9b7dc6..a22d4303b 100644 --- a/app/src/main/res/layout/bottom_actions.xml +++ b/app/src/main/res/layout/bottom_actions.xml @@ -31,7 +31,7 @@ android:background="?attr/selectableItemBackgroundBorderless" android:contentDescription="@string/edit" android:padding="@dimen/medium_margin" - android:src="@drawable/ic_edit" + android:src="@drawable/ic_edit_vector" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/bottom_share" app:layout_constraintHorizontal_bias="0.5" @@ -61,7 +61,7 @@ android:background="?attr/selectableItemBackgroundBorderless" android:contentDescription="@string/delete" android:padding="@dimen/medium_margin" - android:src="@drawable/ic_delete" + android:src="@drawable/ic_delete_vector" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/bottom_rotate" app:layout_constraintHorizontal_bias="0.5" @@ -91,7 +91,7 @@ android:background="?attr/selectableItemBackgroundBorderless" android:contentDescription="@string/properties" android:padding="@dimen/medium_margin" - android:src="@drawable/ic_properties" + android:src="@drawable/ic_properties_vector" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/bottom_change_orientation" app:layout_constraintHorizontal_bias="0.5" @@ -106,7 +106,7 @@ android:background="?attr/selectableItemBackgroundBorderless" android:contentDescription="@string/change_orientation" android:padding="@dimen/medium_margin" - android:src="@drawable/ic_orientation_auto" + android:src="@drawable/ic_orientation_auto_vector" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/bottom_slideshow" app:layout_constraintHorizontal_bias="0.5" @@ -136,7 +136,7 @@ android:background="?attr/selectableItemBackgroundBorderless" android:contentDescription="@string/show_on_map" android:padding="@dimen/medium_margin" - android:src="@drawable/ic_place" + android:src="@drawable/ic_place_vector" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/bottom_toggle_file_visibility" app:layout_constraintHorizontal_bias="0.5" diff --git a/app/src/main/res/layout/dialog_directory_picker.xml b/app/src/main/res/layout/dialog_directory_picker.xml index b41be6412..a3cc14860 100644 --- a/app/src/main/res/layout/dialog_directory_picker.xml +++ b/app/src/main/res/layout/dialog_directory_picker.xml @@ -50,7 +50,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/activity_margin" - android:src="@drawable/ic_unhide" + android:src="@drawable/ic_unhide_vector" android:visibility="gone"/> diff --git a/app/src/main/res/layout/directory_item_grid.xml b/app/src/main/res/layout/directory_item_grid.xml index f1145d6db..b40156665 100644 --- a/app/src/main/res/layout/directory_item_grid.xml +++ b/app/src/main/res/layout/directory_item_grid.xml @@ -25,7 +25,7 @@ android:background="@color/default_background_color" android:contentDescription="@string/lock_folder" android:padding="@dimen/lock_padding" - android:src="@drawable/ic_lock_huge" + android:src="@drawable/ic_lock_vector" android:visibility="gone"/> diff --git a/app/src/main/res/menu/cab_media.xml b/app/src/main/res/menu/cab_media.xml index df7a58a2a..8afa12210 100644 --- a/app/src/main/res/menu/cab_media.xml +++ b/app/src/main/res/menu/cab_media.xml @@ -8,7 +8,7 @@ app:showAsAction="ifRoom"/> diff --git a/app/src/main/res/menu/menu_editor.xml b/app/src/main/res/menu/menu_editor.xml index 41b64055a..01ae613ec 100644 --- a/app/src/main/res/menu/menu_editor.xml +++ b/app/src/main/res/menu/menu_editor.xml @@ -8,7 +8,7 @@ app:showAsAction="ifRoom"/> diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index ebbad2923..eaacbea7b 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -19,7 +19,7 @@ app:showAsAction="ifRoom"/> diff --git a/app/src/main/res/menu/menu_video_player.xml b/app/src/main/res/menu/menu_video_player.xml index 00e818ca3..3651763fb 100644 --- a/app/src/main/res/menu/menu_video_player.xml +++ b/app/src/main/res/menu/menu_video_player.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto">