diff --git a/CHANGELOG.md b/CHANGELOG.md
index 522324963..2c606839e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,63 @@
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)*
+----------------------------
+
+ * 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)*
+----------------------------
+
+ * 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)*
+----------------------------
+
+ * Fixing a video player related crash
+
+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)*
+----------------------------
+
+ * 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)*
+----------------------------
+
+ * 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)*
----------------------------
diff --git a/app/build.gradle b/app/build.gradle
index 9b4abdd3b..c67ed8ec4 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,10 +15,11 @@ android {
applicationId "com.simplemobiletools.gallery.pro"
minSdkVersion 21
targetSdkVersion 28
- versionCode 256
- versionName "6.8.2"
+ versionCode 264
+ versionName "6.9.4"
multiDexEnabled true
setProperty("archivesBaseName", "gallery")
+ vectorDrawables.useSupportLibrary = true
}
signingConfigs {
@@ -61,7 +62,7 @@ android {
}
dependencies {
- implementation 'com.simplemobiletools:commons:5.14.18'
+ 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'
@@ -75,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'
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/EditActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt
index f65b800fe..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
@@ -25,8 +25,12 @@ 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.*
+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
@@ -75,7 +79,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
@@ -90,8 +94,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit)
- if (config.appSideloadingStatus == SIDELOADING_TRUE) {
- showSideloadingDialog()
+ if (checkAppSideloading()) {
return
}
@@ -120,6 +123,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_editor, menu)
+ updateMenuItemColors(menu)
return true
}
@@ -175,12 +179,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)
@@ -652,13 +656,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())
}
}
}
@@ -807,6 +811,18 @@ 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()
+ 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
+ }
+ }
+
try {
ensureBackgroundThread {
val file = File(path)
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 fb3de0bde..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
@@ -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
@@ -145,6 +151,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
updateWidgets()
registerFileUpdateListener()
+
+ directories_switch_searching.setOnClickListener {
+ launchSearchActivity()
+ }
}
override fun onStart() {
@@ -192,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 {
@@ -218,6 +230,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
override fun onStop() {
super.onStop()
+ mSearchMenuItem?.collapseActionView()
+
if (config.temporarilyShowHidden || config.tempSkipDeleteConfirmation) {
mTempShowHiddenHandler.postDelayed({
config.temporarilyShowHidden = false
@@ -268,18 +282,19 @@ 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)
}
}
menu.findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
menu.findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden
+ updateMenuItemColors(menu)
return true
}
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 +338,45 @@ 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 {
+ directories_switch_searching.beVisible()
+ 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) {
+ directories_switch_searching.beGone()
+ mIsSearchOpen = false
+ directories_refresh_layout.isEnabled = config.enablePullToRefresh
+ setupAdapter(mDirs, "")
+ }
+ return true
+ }
+ })
+ }
+
private fun startNewPhotoFetcher() {
if (isNougatPlus()) {
val photoFetcher = NewPhotoFetcher()
@@ -336,7 +390,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)
}
@@ -965,7 +1019,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)
@@ -1017,10 +1074,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)
}
@@ -1215,6 +1274,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/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt
index f79e0a1f5..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)
}
@@ -207,7 +212,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
@@ -234,6 +239,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
}
setupSearch(menu)
+ updateMenuItemColors(menu)
return true
}
@@ -284,6 +290,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
mStoredCropThumbnails = cropThumbnails
mStoredScrollHorizontally = scrollHorizontally
mStoredShowInfoBubble = showInfoBubble
+ mStoredShowFileTypes = showThumbnailFileTypes
mStoredTextColor = textColor
mStoredPrimaryColor = primaryColor
mShowAll = showAll
@@ -381,7 +388,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 {
@@ -632,7 +639,10 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private fun deleteDBDirectory() {
ensureBackgroundThread {
- mDirectoryDao.deleteDirPath(mPath)
+ try {
+ mDirectoryDao.deleteDirPath(mPath)
+ } catch (ignored: Exception) {
+ }
}
}
@@ -832,7 +842,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/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/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt
index 80e922610..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
@@ -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
}
@@ -231,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)
@@ -250,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 33901c1d4..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,15 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener {
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_search, menu)
setupSearch(menu)
+ updateMenuItemColors(menu)
+ return true
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ R.id.toggle_filename -> toggleFilenameVisibility()
+ else -> return super.onOptionsItemSelected(item)
+ }
return true
}
@@ -135,6 +144,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/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SetWallpaperActivity.kt
index 2ceafc06b..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
@@ -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
@@ -43,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") {
@@ -76,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 c1e278770..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
@@ -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.*
@@ -63,6 +64,7 @@ class SettingsActivity : SimpleActivity() {
setupShowNotch()
setupBottomActions()
setupThumbnailVideoDuration()
+ setupThumbnailFileTypes()
setupShowMediaCount()
setupKeepLastModified()
setupShowInfoBubble()
@@ -84,6 +86,12 @@ class SettingsActivity : SimpleActivity() {
setupSectionColors()
setupExportSettings()
setupImportSettings()
+ invalidateOptionsMenu()
+ }
+
+ override fun onCreateOptionsMenu(menu: Menu): Boolean {
+ updateMenuItemColors(menu)
+ return super.onCreateOptionsMenu(menu)
}
private fun setupSectionColors() {
@@ -240,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 {
@@ -615,9 +631,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)
@@ -793,17 +806,13 @@ 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()
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)
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/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt
index db5f4d639..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
}
@@ -572,6 +576,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()
@@ -620,12 +625,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
}
}
@@ -693,7 +698,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) {
@@ -798,10 +803,10 @@ 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 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/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt
index cb1e7dba7..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
@@ -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) {
@@ -218,28 +218,23 @@ 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)
- }
- }
- }
- }
- } else {
- activity.handleLockedFolderOpening(path) { success ->
- if (success) {
+ activity.handleLockedFolderOpening(path) { success ->
+ if (success) {
+ if (path.containsNoMedia()) {
activity.removeNoMedia(path) {
if (activity.config.shouldShowHidden) {
updateFolderNames()
@@ -250,12 +245,28 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList) {
+ for (path in paths) {
+ activity.handleLockedFolderOpening(path) { success ->
+ if (success) {
+ hideFolder(path)
+ }
+ }
+ }
+ }
+
private fun tryEmptyRecycleBin(askConfirmation: Boolean) {
if (askConfirmation) {
activity.showRecycleBinEmptyingDialog {
@@ -308,7 +319,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)
}
@@ -431,6 +442,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList
activity.tryCopyMoveFilesTo(fileDirItems, isCopyOperation) {
+ activity.fixDateTaken(paths, false)
config.tempFolderPath = ""
listener?.refreshItems()
finishActMode()
@@ -456,7 +468,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
@@ -669,7 +681,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
@@ -431,6 +435,11 @@ 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/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/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt
index 07615227b..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
@@ -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
@@ -61,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) {
@@ -100,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)
}
@@ -257,11 +257,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 {
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..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
@@ -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()
@@ -424,7 +427,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 +590,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
@@ -620,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/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/fragments/PhotoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt
index fc80387e9..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
@@ -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)
+ override fun make() = MyGlideImageDecoder(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/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt
index 1f14eef95..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
@@ -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,23 +272,8 @@ 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()) {
+ if (!videoEnded() && mExoPlayer != null) {
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?) {}
@@ -364,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()
}
@@ -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()
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..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()
@@ -447,13 +451,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 4b33ffecc..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
@@ -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"
@@ -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"
@@ -97,7 +98,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"
@@ -209,3 +209,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/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt
index 67bc52291..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
@@ -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.*
@@ -37,34 +38,56 @@ 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 cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
- val folders = parseCursor(cursor)
-
- val priorityFolders = arrayListOf(
+ val folders = getLatestFileFolders()
+ 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 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))
- 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) {
+ context.showErrorToast(e)
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())
+ }
+ } catch (e: Exception) {
+ context.showErrorToast(e)
+ } 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) {
@@ -230,7 +253,7 @@ class MediaFetcher(val context: Context) {
continue
}
- if (checkFileExistence && !file.exists()) {
+ if (checkFileExistence && (!file.exists() || !file.isFile)) {
continue
}
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..b1a3461eb
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MyGlideImageDecoder.kt
@@ -0,0 +1,30 @@
+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.bumptech.glide.request.target.Target
+import com.davemorrissey.labs.subscaleview.ImageDecoder
+
+class MyGlideImageDecoder(val degrees: 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(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
+
+ return builder.get()
+ }
+}
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) {
+ }
}
}
}
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/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")
}
}
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)
+ }
+}
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..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) {
+ }
}
}
@@ -56,46 +60,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)
}
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 {
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 81c7958d6..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_aspect_ratio.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_crop_rotate.png b/app/src/main/res/drawable-hdpi/ic_crop_rotate.png
deleted file mode 100644
index 3cf5e4e71..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_crop_rotate.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_draw.png b/app/src/main/res/drawable-hdpi/ic_draw.png
deleted file mode 100644
index b2c513174..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_draw.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_explore.png b/app/src/main/res/drawable-hdpi/ic_explore.png
deleted file mode 100644
index ad948505a..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_explore.png and /dev/null differ
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 59363f9ab..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_explore_off.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_flip_horizontally.png b/app/src/main/res/drawable-hdpi/ic_flip_horizontally.png
deleted file mode 100644
index ae3b9dbfb..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_flip_horizontally.png and /dev/null differ
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 eff105482..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_flip_vertically.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_pause.png b/app/src/main/res/drawable-hdpi/ic_pause.png
deleted file mode 100644
index eeb009d81..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_pause.png and /dev/null differ
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 724d01d69..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_photo_filter.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_play.png b/app/src/main/res/drawable-hdpi/ic_play.png
deleted file mode 100644
index a2efea8dc..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_play.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_rotate_left.png b/app/src/main/res/drawable-hdpi/ic_rotate_left.png
deleted file mode 100644
index df19b1863..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_rotate_left.png and /dev/null differ
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 6ec58172a..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_rotate_one_eighty.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_rotate_right.png b/app/src/main/res/drawable-hdpi/ic_rotate_right.png
deleted file mode 100644
index 7b1d07af3..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_rotate_right.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_set_as.png b/app/src/main/res/drawable-hdpi/ic_set_as.png
deleted file mode 100644
index d4de4c2b5..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_set_as.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_slideshow.png b/app/src/main/res/drawable-hdpi/ic_slideshow.png
deleted file mode 100644
index 53427ee8c..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_slideshow.png and /dev/null differ
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 8a69e996e..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_aspect_ratio.png and /dev/null differ
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 fe2eca85c..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_crop_rotate.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_draw.png b/app/src/main/res/drawable-xhdpi/ic_draw.png
deleted file mode 100644
index 534bf7180..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_draw.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_explore.png b/app/src/main/res/drawable-xhdpi/ic_explore.png
deleted file mode 100644
index c5e971610..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_explore.png and /dev/null differ
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 a2cb5e92b..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_explore_off.png and /dev/null differ
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 5717ef76a..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_flip_horizontally.png and /dev/null differ
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 4e9647fa9..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_flip_vertically.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_pause.png b/app/src/main/res/drawable-xhdpi/ic_pause.png
deleted file mode 100644
index 7192ad487..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_pause.png and /dev/null differ
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 05226c215..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_photo_filter.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_play.png b/app/src/main/res/drawable-xhdpi/ic_play.png
deleted file mode 100644
index bb5d7c623..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_play.png and /dev/null differ
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 e07494c64..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_rotate_left.png and /dev/null differ
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 fa913d37d..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_rotate_one_eighty.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_rotate_right.png b/app/src/main/res/drawable-xhdpi/ic_rotate_right.png
deleted file mode 100644
index 0f5ac605f..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_rotate_right.png and /dev/null differ
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 728313d9e..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_set_as.png and /dev/null differ
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 9af0ae476..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_slideshow.png and /dev/null differ
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 cc07c4c25..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_aspect_ratio.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_crop_rotate.png b/app/src/main/res/drawable-xxhdpi/ic_crop_rotate.png
deleted file mode 100644
index 292f93bf6..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_crop_rotate.png and /dev/null differ
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 3e42d0923..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_draw.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_explore.png b/app/src/main/res/drawable-xxhdpi/ic_explore.png
deleted file mode 100644
index 2260fa95e..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_explore.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_explore_off.png b/app/src/main/res/drawable-xxhdpi/ic_explore_off.png
deleted file mode 100644
index 1007be3b7..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_explore_off.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_flip_horizontally.png b/app/src/main/res/drawable-xxhdpi/ic_flip_horizontally.png
deleted file mode 100644
index 79910ffe0..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_flip_horizontally.png and /dev/null differ
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 45a93784f..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_flip_vertically.png and /dev/null differ
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 fb63ddc5a..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_pause.png and /dev/null differ
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 d555dd355..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_photo_filter.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_play.png b/app/src/main/res/drawable-xxhdpi/ic_play.png
deleted file mode 100644
index b568f7387..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_play.png and /dev/null differ
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 fec5b4164..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_rotate_left.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_rotate_one_eighty.png b/app/src/main/res/drawable-xxhdpi/ic_rotate_one_eighty.png
deleted file mode 100644
index 17a070205..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_rotate_one_eighty.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_rotate_right.png b/app/src/main/res/drawable-xxhdpi/ic_rotate_right.png
deleted file mode 100644
index 82f3e5493..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_rotate_right.png and /dev/null differ
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 60f34eb20..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_set_as.png and /dev/null differ
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 27b37c2c1..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_slideshow.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_aspect_ratio.png b/app/src/main/res/drawable-xxxhdpi/ic_aspect_ratio.png
deleted file mode 100644
index 3c52ec564..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_aspect_ratio.png and /dev/null differ
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 13dc42b28..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_crop_rotate.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_draw.png b/app/src/main/res/drawable-xxxhdpi/ic_draw.png
deleted file mode 100644
index 6c1924bdf..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_draw.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_explore.png b/app/src/main/res/drawable-xxxhdpi/ic_explore.png
deleted file mode 100644
index e127a202b..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_explore.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_explore_off.png b/app/src/main/res/drawable-xxxhdpi/ic_explore_off.png
deleted file mode 100644
index a6638ac85..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_explore_off.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_flip_horizontally.png b/app/src/main/res/drawable-xxxhdpi/ic_flip_horizontally.png
deleted file mode 100644
index d47ba4a7e..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_flip_horizontally.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_flip_vertically.png b/app/src/main/res/drawable-xxxhdpi/ic_flip_vertically.png
deleted file mode 100644
index 0053524c4..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_flip_vertically.png and /dev/null differ
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 3ea7e03e5..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_pause.png and /dev/null differ
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 f947149cb..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_photo_filter.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play.png b/app/src/main/res/drawable-xxxhdpi/ic_play.png
deleted file mode 100644
index 0bdaa8d04..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_play.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_rotate_left.png b/app/src/main/res/drawable-xxxhdpi/ic_rotate_left.png
deleted file mode 100644
index 3ffcf9cc0..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_rotate_left.png and /dev/null differ
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 707f4e9d1..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_rotate_one_eighty.png and /dev/null differ
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 13e03d530..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_rotate_right.png and /dev/null differ
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 303e1780f..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_set_as.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_slideshow.png b/app/src/main/res/drawable-xxxhdpi/ic_slideshow.png
deleted file mode 100644
index 2b5278bb9..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_slideshow.png and /dev/null differ
diff --git a/app/src/main/res/drawable/ic_aspect_ratio_vector.xml b/app/src/main/res/drawable/ic_aspect_ratio_vector.xml
new file mode 100644
index 000000000..4f30d2612
--- /dev/null
+++ b/app/src/main/res/drawable/ic_aspect_ratio_vector.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_crop_rotate_vector.xml b/app/src/main/res/drawable/ic_crop_rotate_vector.xml
new file mode 100644
index 000000000..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_main.xml b/app/src/main/res/layout/activity_main.xml
index bbf53b09e..1d2d25731 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">
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..f4a92234d 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: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"/>
+
+
+
+
+
+
+ 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,8 +51,9 @@
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"
+ android:src="@drawable/ic_undo_vector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="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..ed600ed0e 100644
--- a/app/src/main/res/layout/bottom_editor_primary_actions.xml
+++ b/app/src/main/res/layout/bottom_editor_primary_actions.xml
@@ -12,8 +12,9 @@
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"
+ android:src="@drawable/ic_photo_filter_vector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/bottom_primary_crop_rotate"
app:layout_constraintStart_toStartOf="parent"
@@ -25,7 +26,7 @@
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/normal_margin"
- android:src="@drawable/ic_crop_rotate"
+ android:src="@drawable/ic_crop_rotate_vector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/bottom_primary_draw"
app:layout_constraintStart_toEndOf="@+id/bottom_primary_filter"
@@ -37,7 +38,7 @@
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/normal_margin"
- android:src="@drawable/ic_draw"
+ android:src="@drawable/ic_draw_vector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/bottom_primary_crop_rotate"
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..3be00ceaa 100644
--- a/app/src/main/res/layout/bottom_set_wallpaper_actions.xml
+++ b/app/src/main/res/layout/bottom_set_wallpaper_actions.xml
@@ -26,8 +26,9 @@
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"
+ android:src="@drawable/ic_rotate_right_vector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
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 75c2c8ba1..591a2dfe1 100644
--- a/app/src/main/res/layout/directory_item_grid.xml
+++ b/app/src/main/res/layout/directory_item_grid.xml
@@ -23,8 +23,9 @@
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:src="@drawable/ic_lock_vector"
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"/>
diff --git a/app/src/main/res/layout/directory_item_list.xml b/app/src/main/res/layout/directory_item_list.xml
index c4fd676f3..97937ee4e 100644
--- a/app/src/main/res/layout/directory_item_list.xml
+++ b/app/src/main/res/layout/directory_item_list.xml
@@ -24,8 +24,9 @@
android:layout_alignBottom="@+id/dir_thumbnail"
android:layout_centerInParent="true"
android:background="@color/default_background_color"
+ android:contentDescription="@string/lock_folder"
android:padding="@dimen/medium_margin"
- android:src="@drawable/ic_lock_huge"
+ android:src="@drawable/ic_lock_vector"
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..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"/>
+
+
+
+
-
diff --git a/app/src/main/res/menu/cab_media.xml b/app/src/main/res/menu/cab_media.xml
index 5f3a83a8b..0d0bb7b5b 100644
--- a/app/src/main/res/menu/cab_media.xml
+++ b/app/src/main/res/menu/cab_media.xml
@@ -3,22 +3,22 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
-
diff --git a/app/src/main/res/menu/menu_editor.xml b/app/src/main/res/menu/menu_editor.xml
index bf319ba75..16a5f7806 100644
--- a/app/src/main/res/menu/menu_editor.xml
+++ b/app/src/main/res/menu/menu_editor.xml
@@ -3,17 +3,17 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
diff --git a/app/src/main/res/menu/menu_included_folders.xml b/app/src/main/res/menu/menu_included_folders.xml
index 4671dcd0f..3551a8a4d 100644
--- a/app/src/main/res/menu/menu_included_folders.xml
+++ b/app/src/main/res/menu/menu_included_folders.xml
@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 0d9b32e12..e4aea1047 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -3,22 +3,23 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
+ app:actionViewClass="androidx.appcompat.widget.SearchView"
+ app:showAsAction="collapseActionView|always"/>
-
-
+
diff --git a/app/src/main/res/menu/menu_set_wallpaper.xml b/app/src/main/res/menu/menu_set_wallpaper.xml
index 82547aaa2..a10009346 100644
--- a/app/src/main/res/menu/menu_set_wallpaper.xml
+++ b/app/src/main/res/menu/menu_set_wallpaper.xml
@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
diff --git a/app/src/main/res/menu/menu_video_player.xml b/app/src/main/res/menu/menu_video_player.xml
index 00e818ca3..62d8c48c4 100644
--- a/app/src/main/res/menu/menu_video_player.xml
+++ b/app/src/main/res/menu/menu_video_player.xml
@@ -3,12 +3,12 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
-
-
-
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 1ac6d0f62..19c550c8c 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
@@ -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 bf9787e1d..9a97506aa 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
@@ -187,6 +187,7 @@
Velocitat
Compromès
Eviteu mostrar fitxers no vàlids
+ Mostra els tipus de fitxers d\’imatges
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 2682c13f4..e9452a427 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
@@ -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 edb16f124..c4dc1e9cd 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
+ Εναλλαγή αναζήτησης αρχείων σε όλους τους ορατούς φακέλους
Φιλτράρισμα πολυμέσων
@@ -187,6 +187,7 @@
Ταχύτητα
Συμβιβασμός
Αποφυγή εμφάνισης μη έγκυρων αρχείων
+ Εμφάνιση τύπου αρχείου εικόνας
Εικονίδια
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 5497765f9..3081ab47c 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
@@ -187,6 +187,7 @@
Velocidad
Compromiso
Evita mostrar archivos inválidos
+ Mostrar tipos de archivo de imagen
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 6303baf9c..19ef5b79b 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
@@ -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,12 +114,12 @@
Inclure les vidéos
Inclure les GIFs
Ordre aléatoire
- Défilement inverse
+ Défilement inversé
Diaporama en boucle
Animation
- None
- Fade
- Slide
+ Aucune
+ Fondu
+ Glissement
Diaporama terminé
Aucun média trouvé pour le diaporama
@@ -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,29 +164,30 @@
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
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 07fc40b2b..5c58d71c2 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ő
@@ -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 04851828f..373ccc640 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
@@ -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
@@ -187,6 +187,7 @@
Kecepatan
Kompromi
Hindari menampilkan berkas yang tidak valid
+ Tampilkan tipe berkas gambar
Thumbnail
@@ -195,22 +196,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 +219,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 +243,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:
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 04851828f..373ccc640 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
@@ -187,6 +187,7 @@
Kecepatan
Kompromi
Hindari menampilkan berkas yang tidak valid
+ Tampilkan tipe berkas gambar
Thumbnail
@@ -195,22 +196,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 +219,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 +243,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:
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 8dc06e8e7..8d6ad7350 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
@@ -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 54bff70f5..468f37265 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
@@ -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 b6c57fe11..cb2217851 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
@@ -187,6 +187,7 @@
Snelheid
Compromis
Ongeldige bestanden verbergen
+ Bestandstypen tonen
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 146bcc54d..2b0520f23 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,15 +178,16 @@
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
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 3a67952c4..a7e5c8108 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
@@ -187,6 +187,7 @@
Speed
Compromise
Avoid showing invalid files
+ Show image file types
Küçük resimler
@@ -239,7 +240,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
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 83bed8198..b56f7184a 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
+ Перейти до пошуку файла в усіх видимих теках
Фільтр мультимедійних файлів
@@ -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 5734c6824..7a37636b6 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)
+ 拍摄日期(按日)
+ 拍摄日期(按月)
文件类型
扩展名
请注意,分组和排序是相互独立的
@@ -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 ec7809e5e..a2c94d6c2 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
+ 檔案搜尋目標切換成全部的可見資料夾
篩選媒體檔案
@@ -141,7 +141,7 @@
拍攝日期 (按月)
檔案類型
副檔名
- 請注意,歸類和排序是兩者是獨立的
+ 請注意,歸類和排序兩者是獨立的
在小工具顯示資料夾:
@@ -187,6 +187,7 @@
速度
折衷
避免顯示無效的檔案
+ 顯示圖片檔案類型
縮圖
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 2d9b27b32..941e7da0d 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -1,7 +1,15 @@
+ GIF
+ RAW
+ SVG
+ 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
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8cc54d748..72a9d9e6a 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
@@ -187,6 +187,7 @@
Speed
Compromise
Avoid showing invalid files
+ Show image file types
Thumbnails
@@ -283,6 +284,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/build.gradle b/build.gradle
index e69b8b26f..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.1'
+ 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/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 37f2f2345..27b47a155 100644
Binary files a/fastlane/metadata/android/en-US/images/featureGraphic.png and b/fastlane/metadata/android/en-US/images/featureGraphic.png differ
diff --git a/fastlane/metadata/android/en-US/title.txt b/fastlane/metadata/android/en-US/title.txt
index 178b5506d..0c89f0d18 100644
--- a/fastlane/metadata/android/en-US/title.txt
+++ b/fastlane/metadata/android/en-US/title.txt
@@ -1 +1 @@
-Simple Gallery
+Simple Gallery Pro: Photo Manager & Editor
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