diff --git a/CHANGELOG.md b/CHANGELOG.md
index 717c71b10..1d017dc06 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,55 @@
Changelog
==========
+Version 6.14.8 *(2020-05-05)*
+----------------------------
+
+ * Added some crashfixes
+
+Version 6.14.7 *(2020-05-04)*
+----------------------------
+
+ * Fixed a glitch with some favorite items disappearing
+ * Improve folder hiding, add the new .nomedia file into MediaStore
+ * Improve the performance of getting video file duration
+ * A few other improvements here and there
+
+Version 6.14.6 *(2020-04-26)*
+----------------------------
+
+ * Added a few more stability and performance improvements
+
+Version 6.14.5 *(2020-04-26)*
+----------------------------
+
+ * Disable Portrait photo showing by default, until it gets improved
+ * Added a couple other performance improvements here and there
+
+Version 6.14.4 *(2020-04-24)*
+----------------------------
+
+ * Improved the performance on multiple places
+ * Removed some unnecessary permissions added recently
+ * Fixed some photo editor glitches
+ * Show Portrait images by default only on Android 9+
+
+Version 6.14.3 *(2020-04-21)*
+----------------------------
+
+ * Use the selected date format grouped thumbnail section titles too
+ * Fixed a glitch related to locked folders asking authentication too often
+ * Refresh the UI here and there a bit
+
+Version 6.14.2 *(2020-04-18)*
+----------------------------
+
+ * Fixed some Photo Editor bugs
+ * Properly handle locked folders at opening from widgets and shortcuts
+ * Open the map at clicking the coordinates at the Properties window
+ * Properly sort items at the Other Folder dialog at copy/move
+ * Fixed some folder un/hiding related glitches
+ * A couple other translation and UX improvements
+
Version 6.14.1 *(2020-04-14)*
----------------------------
diff --git a/app/build.gradle b/app/build.gradle
index da738680a..f76bd1d69 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -17,8 +17,8 @@ android {
applicationId "com.simplemobiletools.gallery.pro"
minSdkVersion 21
targetSdkVersion 29
- versionCode 301
- versionName "6.14.1"
+ versionCode 309
+ versionName "6.14.8"
multiDexEnabled true
setProperty("archivesBaseName", "gallery-$versionCode")
vectorDrawables.useSupportLibrary = true
@@ -58,8 +58,8 @@ android {
flavorDimensions "licensing"
productFlavors {
- proprietary { }
- foss { }
+ proprietary {}
+ foss {}
}
lintOptions {
@@ -78,7 +78,7 @@ android {
}
dependencies {
- implementation 'com.simplemobiletools:commons:5.25.25'
+ implementation 'com.simplemobiletools:commons:5.28.4'
implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'it.sephiroth.android.exif:library:1.0.1'
@@ -111,8 +111,6 @@ if (is_proprietary) {
licencePath 'pesdk_license'
}
- supportLibVersion "28.0.0"
-
modules {
include 'ui:core'
include 'ui:text'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b871b2d77..de8fca45c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,6 +7,7 @@
+
@@ -285,6 +286,15 @@
android:resource="@xml/widget_info"/>
+
+
+
+
+
+
+
100 && config.appRunCount % 50 != 0 && !isPackageInstalled(NEW_APP_PACKAGE)) {
- config.wasNewAppShown = true
- NewAppDialog(this, NEW_APP_PACKAGE, "Simple Clock")
- }*/
-
if (!config.wereFavoritesPinned) {
config.addPinnedFolders(hashSetOf(FAVORITES))
config.wereFavoritesPinned = true
@@ -151,6 +147,20 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
directories_switch_searching.setOnClickListener {
launchSearchActivity()
}
+
+ // just request the permission, tryLoadGallery will then trigger in onResume
+ handlePermission(PERMISSION_WRITE_STORAGE) {
+ if (!it) {
+ toast(R.string.no_storage_permissions)
+ finish()
+ }
+ }
+
+ // notify some users about the Dialer, SMS Messenger and Voice Recorder apps
+ if (!config.wasMessengerRecorderShown && config.appRunCount > 35) {
+ NewAppsIconsDialog(this)
+ config.wasMessengerRecorderShown = true
+ }
}
override fun onStart() {
@@ -161,6 +171,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
override fun onResume() {
super.onResume()
config.isThirdPartyIntent = false
+ mDateFormat = config.dateFormat
+ mTimeFormat = getTimeFormat()
if (mStoredAnimateGifs != config.animateGifs) {
getRecyclerAdapter()?.updateAnimateGifs(config.animateGifs)
@@ -413,7 +425,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private fun checkDefaultSpamFolders() {
if (!config.spamFoldersChecked) {
val spamFolders = arrayListOf(
- "/storage/emulated/0/Android/data/com.facebook.orca/files/stickers"
+ "/storage/emulated/0/Android/data/com.facebook.orca/files/stickers"
)
val OTGPath = config.OTGPath
@@ -427,27 +439,22 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
}
private fun tryLoadGallery() {
- handlePermission(PERMISSION_WRITE_STORAGE) {
- if (it) {
- if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.gallery")) {
- ConfirmationDialog(this, "", R.string.upgraded_from_free, R.string.ok, 0) {}
- config.wasUpgradedFromFreeShown = true
- }
-
- checkOTGPath()
- checkDefaultSpamFolders()
-
- if (config.showAll) {
- showAllMedia()
- } else {
- getDirectories()
- }
-
- setupLayoutManager()
- } else {
- toast(R.string.no_storage_permissions)
- finish()
+ if (hasPermission(PERMISSION_WRITE_STORAGE)) {
+ if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.gallery")) {
+ ConfirmationDialog(this, "", R.string.upgraded_from_free, R.string.ok, 0) {}
+ config.wasUpgradedFromFreeShown = true
}
+
+ checkOTGPath()
+ checkDefaultSpamFolders()
+
+ if (config.showAll) {
+ showAllMedia()
+ } else {
+ getDirectories()
+ }
+
+ setupLayoutManager()
}
}
@@ -539,7 +546,13 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
val fileDirItems = folders.asSequence().filter { it.isDirectory }.map { FileDirItem(it.absolutePath, it.name, true) }.toMutableList() as ArrayList
when {
fileDirItems.isEmpty() -> return
- fileDirItems.size == 1 -> toast(String.format(getString(R.string.deleting_folder), fileDirItems.first().name))
+ fileDirItems.size == 1 -> {
+ try {
+ toast(String.format(getString(R.string.deleting_folder), fileDirItems.first().name))
+ } catch (e: Exception) {
+ showErrorToast(e)
+ }
+ }
else -> {
val baseString = if (config.useRecycleBin) R.plurals.moving_items_into_bin else R.plurals.delete_items
val deletingItems = resources.getQuantityString(baseString, fileDirItems.size, fileDirItems.size)
@@ -835,6 +848,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
handleLockedFolderOpening(path) { success ->
if (success) {
Intent(this, MediaActivity::class.java).apply {
+ putExtra(SKIP_AUTHENTICATION, true)
putExtra(DIRECTORY, path)
handleMediaIntent(this)
}
@@ -944,11 +958,17 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
setupAdapter(dirs)
- // update directories and media files in the local db, delete invalid items
+ // update directories and media files in the local db, delete invalid items. Intentionally creating a new thread
updateDBDirectory(directory)
if (!directory.isRecycleBin()) {
- mediaDB.insertAll(curMedia)
+ Thread {
+ try {
+ mediaDB.insertAll(curMedia)
+ } catch (ignored: Exception) {
+ }
+ }.start()
}
+
getCachedMedia(directory.path, getVideosOnly, getImagesOnly) {
it.forEach {
if (!curMedia.contains(it)) {
@@ -1019,13 +1039,17 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
val newDir = createDirectoryFromMedia(folder, newMedia, albumCovers, hiddenString, includedFolders, getProperFileSize)
dirs.add(newDir)
setupAdapter(dirs)
- try {
- directoryDao.insert(newDir)
- if (folder != RECYCLE_BIN) {
- mediaDB.insertAll(newMedia)
+
+ // make sure to create a new thread for these operations, dont just use the common bg thread
+ Thread {
+ try {
+ directoryDao.insert(newDir)
+ if (folder != RECYCLE_BIN) {
+ mediaDB.insertAll(newMedia)
+ }
+ } catch (ignored: Exception) {
}
- } catch (ignored: Exception) {
- }
+ }.start()
}
mLoadedInitialPhotos = true
@@ -1035,21 +1059,31 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
directories_refresh_layout.isRefreshing = false
checkPlaceholderVisibility(dirs)
}
- checkInvalidDirectories(dirs)
- val everShownFolders = config.everShownFolders as HashSet
- dirs.mapTo(everShownFolders) { it.path }
+ checkInvalidDirectories(dirs)
+ if (mDirs.size > 50) {
+ excludeSpamFolders()
+ }
+
+ val excludedFolders = config.excludedFolders
+ val everShownFolders = config.everShownFolders.toMutableSet() as HashSet
+
+ // do not add excluded folders and their subfolders at everShownFolders
+ dirs.filter { dir ->
+ if (excludedFolders.any { dir.path.startsWith(it) }) {
+ return@filter false
+ }
+ return@filter true
+ }.mapTo(everShownFolders) { it.path }
try {
+ // catch some extreme exceptions like too many everShownFolders for storing, shouldnt really happen
config.everShownFolders = everShownFolders
} catch (e: Exception) {
config.everShownFolders = HashSet()
}
- mDirs = dirs.clone() as ArrayList
- if (mDirs.size > 55) {
- excludeSpamFolders()
- }
+ mDirs = dirs.clone() as ArrayList
}
private fun checkPlaceholderVisibility(dirs: ArrayList) {
@@ -1059,7 +1093,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
if (mIsSearchOpen) {
directories_empty_placeholder.text = getString(R.string.no_items_found)
directories_empty_placeholder_2.beGone()
- } else if (dirs.isEmpty() && config.filterMedia == TYPE_DEFAULT_FILTER) {
+ } else if (dirs.isEmpty() && config.filterMedia == getDefaultFileFilter()) {
directories_empty_placeholder.text = getString(R.string.no_media_add_included)
directories_empty_placeholder_2.text = getString(R.string.add_folder)
@@ -1158,7 +1192,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
} else if (it.path != config.tempFolderPath) {
val children = if (isPathOnOTG(it.path)) getOTGFolderChildrenNames(it.path) else File(it.path).list()?.asList()
val hasMediaFile = children?.any {
- it != null && (it.isMediaFile() || (File(it).isDirectory && it.startsWith("img_", true)))
+ it != null && (it.isMediaFile() || (it.startsWith("img_", true) && File(it).isDirectory))
} ?: false
if (!hasMediaFile) {
@@ -1198,8 +1232,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private fun getCurrentlyDisplayedDirs() = getRecyclerAdapter()?.dirs ?: ArrayList()
- private fun getBubbleTextItem(index: Int) = getRecyclerAdapter()?.dirs?.getOrNull(index)?.getBubbleText(config.directorySorting, this)
- ?: ""
+ private fun getBubbleTextItem(index: Int) = getRecyclerAdapter()?.dirs?.getOrNull(index)?.getBubbleText(config.directorySorting, this, mDateFormat, mTimeFormat)
+ ?: ""
private fun setupLatestMediaId() {
ensureBackgroundThread {
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt
index 5f16757b6..5ac44db95 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt
@@ -22,7 +22,6 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
-import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
@@ -36,7 +35,10 @@ import com.simplemobiletools.gallery.pro.R
import com.simplemobiletools.gallery.pro.adapters.MediaAdapter
import com.simplemobiletools.gallery.pro.asynctasks.GetMediaAsynctask
import com.simplemobiletools.gallery.pro.databases.GalleryDatabase
-import com.simplemobiletools.gallery.pro.dialogs.*
+import com.simplemobiletools.gallery.pro.dialogs.ChangeGroupingDialog
+import com.simplemobiletools.gallery.pro.dialogs.ChangeSortingDialog
+import com.simplemobiletools.gallery.pro.dialogs.ChangeViewTypeDialog
+import com.simplemobiletools.gallery.pro.dialogs.FilterMediaDialog
import com.simplemobiletools.gallery.pro.extensions.*
import com.simplemobiletools.gallery.pro.helpers.*
import com.simplemobiletools.gallery.pro.interfaces.MediaOperationsListener
@@ -61,6 +63,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private var mLoadedInitialPhotos = false
private var mIsSearchOpen = false
private var mLastSearchedText = ""
+ private var mDateFormat = ""
+ private var mTimeFormat = ""
private var mLatestMediaId = 0L
private var mLatestMediaDateId = 0L
private var mLastMediaHandler = Handler()
@@ -122,6 +126,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
override fun onResume() {
super.onResume()
+ mDateFormat = config.dateFormat
+ mTimeFormat = getTimeFormat()
+
if (mStoredAnimateGifs != config.animateGifs) {
getMediaAdapter()?.updateAnimateGifs(config.animateGifs)
}
@@ -160,11 +167,15 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
media_empty_text_placeholder_2.setTextColor(getAdjustedPrimaryColor())
if (mMedia.isEmpty() || config.getFolderSorting(mPath) and SORT_BY_RANDOM == 0) {
- handleLockedFolderOpening(mPath) { success ->
- if (success) {
- tryLoadGallery()
- } else {
- finish()
+ if (shouldSkipAuthentication()) {
+ tryLoadGallery()
+ } else {
+ handleLockedFolderOpening(mPath) { success ->
+ if (success) {
+ tryLoadGallery()
+ } else {
+ finish()
+ }
}
}
}
@@ -212,14 +223,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_media, menu)
- val isFolderHidden = mPath.containsNoMedia()
menu.apply {
findItem(R.id.group).isVisible = !config.scrollHorizontally
- findItem(R.id.hide_folder).isVisible = !isFolderHidden && !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN
- findItem(R.id.unhide_folder).isVisible = isFolderHidden && !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN
- findItem(R.id.exclude_folder).isVisible = !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN
-
findItem(R.id.empty_recycle_bin).isVisible = mPath == RECYCLE_BIN
findItem(R.id.empty_disable_recycle_bin).isVisible = mPath == RECYCLE_BIN
findItem(R.id.restore_all_files).isVisible = mPath == RECYCLE_BIN
@@ -255,9 +261,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
R.id.folder_view -> switchToFolderView()
R.id.change_view_type -> changeViewType()
R.id.group -> showGroupByDialog()
- R.id.hide_folder -> tryHideFolder()
- R.id.unhide_folder -> unhideFolder()
- R.id.exclude_folder -> tryExcludeFolder()
R.id.create_new_folder -> createNewFolder()
R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden()
R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden()
@@ -274,8 +277,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private fun startSlideshow() {
if (mMedia.isNotEmpty()) {
Intent(this, ViewPagerActivity::class.java).apply {
- val item = mMedia.firstOrNull { it is Medium } as? Medium
- ?: return
+ val item = mMedia.firstOrNull { it is Medium } as? Medium ?: return
+ putExtra(SKIP_AUTHENTICATION, shouldSkipAuthentication())
putExtra(PATH, item.path)
putExtra(SHOW_ALL, mShowAll)
putExtra(SLIDESHOW_START_ON_ENTER, true)
@@ -439,7 +442,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
if (mediaAdapter?.isASectionTitle(index) == true) {
realIndex++
}
- return mediaAdapter?.getItemBubbleText(realIndex, sorting) ?: ""
+ return mediaAdapter?.getItemBubbleText(realIndex, sorting, mDateFormat, mTimeFormat) ?: ""
}
private fun checkLastMediaChanged() {
@@ -536,43 +539,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
}
}
- private fun tryHideFolder() {
- if (config.wasHideFolderTooltipShown) {
- hideFolder()
- } else {
- ConfirmationDialog(this, getString(R.string.hide_folder_description)) {
- config.wasHideFolderTooltipShown = true
- hideFolder()
- }
- }
- }
-
- private fun hideFolder() {
- addNoMedia(mPath) {
- runOnUiThread {
- if (!config.shouldShowHidden) {
- finish()
- } else {
- invalidateOptionsMenu()
- }
- }
- }
- }
-
- private fun unhideFolder() {
- removeNoMedia(mPath) {
- runOnUiThread {
- invalidateOptionsMenu()
- }
- }
- }
-
- private fun tryExcludeFolder() {
- ExcludeFolderDialog(this, arrayListOf(mPath)) {
- finish()
- }
- }
-
private fun deleteDirectoryIfEmpty() {
val fileDirItem = FileDirItem(mPath, mPath.getFilenameFromPath(), true)
if (config.deleteEmptyFolders && !fileDirItem.isDownloadsFolder() && fileDirItem.isDirectory && fileDirItem.getProperFileCount(this, true) == 0) {
@@ -862,9 +828,14 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
if (isVideo) {
val extras = HashMap()
extras[SHOW_FAVORITES] = mPath == FAVORITES
+
+ if (shouldSkipAuthentication()) {
+ extras[SKIP_AUTHENTICATION] = true
+ }
openPath(path, false, extras)
} else {
Intent(this, ViewPagerActivity::class.java).apply {
+ putExtra(SKIP_AUTHENTICATION, shouldSkipAuthentication())
putExtra(PATH, path)
putExtra(SHOW_ALL, mShowAll)
putExtra(SHOW_FAVORITES, mPath == FAVORITES)
@@ -902,7 +873,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
if (!isFromCache) {
val mediaToInsert = (mMedia).filter { it is Medium && it.deletedTS == 0L }.map { it as Medium }
try {
- mediaDB.insertAll(mediaToInsert)
+ Thread {
+ mediaDB.insertAll(mediaToInsert)
+ }.start()
} catch (e: Exception) {
}
}
@@ -932,6 +905,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
}
}
+ private fun shouldSkipAuthentication() = intent.getBooleanExtra(SKIP_AUTHENTICATION, false)
+
private fun deleteFilteredFiles(filtered: ArrayList) {
deleteFiles(filtered) {
if (!it) {
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt
index b9a7976c3..7098e3e4a 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt
@@ -130,7 +130,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
mIsPlaying = true
resumeVideo()
} else {
- video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
+ video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
}
video_toggle_play_pause.beVisible()
}
@@ -190,7 +190,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
}
private fun resumeVideo() {
- video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline)
+ video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline_vector)
if (mCurrTime == mDuration) {
setVideoProgress(0)
mPlayOnReady = true
@@ -203,7 +203,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
private fun pauseVideo() {
vr_video_view.pauseVideo()
- video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
+ video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
@@ -247,7 +247,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
}
explore.requestLayout()
}
- video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
+ video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
cardboard.setOnClickListener {
vr_video_view.displayMode = CARDBOARD_DISPLAY_MODE
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt
index 50600c6b0..ff328654b 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt
@@ -103,12 +103,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
if (realPath.getFilenameFromPath().contains('.') || filename.contains('.')) {
if (isFileTypeVisible(realPath)) {
bottom_actions.beGone()
- handleLockedFolderOpening(realPath.getParentPath()) { success ->
- if (success) {
- sendViewPagerIntent(realPath)
- }
- finish()
- }
+ sendViewPagerIntent(realPath)
+ finish()
return
}
} else {
@@ -120,13 +116,9 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
if (mUri!!.scheme == "file") {
if (filename.contains('.')) {
bottom_actions.beGone()
- handleLockedFolderOpening(mUri!!.path!!.getParentPath()) { success ->
- if (success) {
- rescanPaths(arrayListOf(mUri!!.path!!))
- sendViewPagerIntent(mUri!!.path!!)
- }
- finish()
- }
+ rescanPaths(arrayListOf(mUri!!.path!!))
+ sendViewPagerIntent(mUri!!.path!!)
+ finish()
}
return
} else {
@@ -134,13 +126,9 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
if (path != mUri.toString() && path.isNotEmpty() && mUri!!.authority != "mms" && filename.contains('.') && getDoesFilePathExist(path)) {
if (isFileTypeVisible(path)) {
bottom_actions.beGone()
- handleLockedFolderOpening(path.getParentPath()) { success ->
- if (success) {
- rescanPaths(arrayListOf(mUri!!.path!!))
- sendViewPagerIntent(path)
- }
- finish()
- }
+ rescanPaths(arrayListOf(mUri!!.path!!))
+ sendViewPagerIntent(path)
+ finish()
return
}
}
@@ -237,6 +225,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
private fun sendViewPagerIntent(path: String) {
Intent(this, ViewPagerActivity::class.java).apply {
+ putExtra(SKIP_AUTHENTICATION, intent.getBooleanExtra(SKIP_AUTHENTICATION, false))
putExtra(SHOW_FAVORITES, intent.getBooleanExtra(SHOW_FAVORITES, false))
putExtra(IS_VIEW_INTENT, true)
putExtra(IS_FROM_GALLERY, mIsFromGallery)
@@ -293,8 +282,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
}
private fun initBottomActions() {
- initBottomActionsLayout()
initBottomActionButtons()
+ initBottomActionsLayout()
}
private fun initBottomActionsLayout() {
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt
index ced82efa0..4eea261ac 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt
@@ -31,6 +31,8 @@ import java.io.File
class SearchActivity : SimpleActivity(), MediaOperationsListener {
private var mIsSearchOpen = false
private var mLastSearchedText = ""
+ private var mDateFormat = ""
+ private var mTimeFormat = ""
private var mSearchMenuItem: MenuItem? = null
private var mCurrAsyncTask: GetMediaAsynctask? = null
@@ -40,6 +42,8 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_search)
media_empty_text_placeholder.setTextColor(config.textColor)
+ mDateFormat = config.dateFormat
+ mTimeFormat = getTimeFormat()
getAllMedia()
}
@@ -232,7 +236,7 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener {
if (mediaAdapter?.isASectionTitle(index) == true) {
realIndex++
}
- return mediaAdapter?.getItemBubbleText(realIndex, sorting) ?: ""
+ return mediaAdapter?.getItemBubbleText(realIndex, sorting, mDateFormat, mTimeFormat) ?: ""
}
private fun measureRecyclerViewContent(media: ArrayList) {
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt
index 6f994024d..b1c319a1e 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt
@@ -290,7 +290,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
if (config.autoplayVideos) {
resumeVideo()
} else {
- video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
+ video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
}
}
}
@@ -305,7 +305,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
}
private fun resumeVideo() {
- video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline)
+ video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline_vector)
if (mExoPlayer == null) {
return
}
@@ -322,7 +322,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
}
private fun pauseVideo() {
- video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
+ video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
if (mExoPlayer == null) {
return
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt
index 712f45fe6..a29be1226 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt
@@ -308,11 +308,15 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
showSystemUI(true)
- handleLockedFolderOpening(mPath.getParentPath()) { success ->
- if (success) {
- initContinue()
- } else {
- finish()
+ if (intent.getBooleanExtra(SKIP_AUTHENTICATION, false)) {
+ initContinue()
+ } else {
+ handleLockedFolderOpening(mPath.getParentPath()) { success ->
+ if (success) {
+ initContinue()
+ } else {
+ finish()
+ }
}
}
}
@@ -385,7 +389,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
val isFavorite = favoritesDB.isFavorite(mPath)
- val duration = if (type == TYPE_VIDEOS) mPath.getVideoDuration() else 0
+ val duration = if (type == TYPE_VIDEOS) getDuration(mPath) ?: 0 else 0
val ts = System.currentTimeMillis()
val medium = Medium(null, mPath.getFilenameFromPath(), mPath, mPath.getParentPath(), ts, ts, File(mPath).length(), type, duration, isFavorite, 0)
mediaDB.insert(medium)
@@ -395,8 +399,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
private fun initBottomActions() {
- initBottomActionsLayout()
initBottomActionButtons()
+ initBottomActionsLayout()
}
private fun initFavorites() {
@@ -1165,6 +1169,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
}
+ @SuppressLint("SourceLockedOrientationActivity")
private fun checkOrientation() {
if (!mIsOrientationLocked && config.screenRotation == ROTATE_BY_ASPECT_RATIO) {
var flipSides = false
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt
index 5dcf75275..eb9564979 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/MediaAdapter.kt
@@ -493,14 +493,16 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList Unit) {
}
} else {
try {
- file.createNewFile()
+ if (file.createNewFile()) {
+ rescanFolderMedia(file.absolutePath)
+ } else {
+ toast(R.string.unknown_error_occurred)
+ }
} catch (e: Exception) {
showErrorToast(e)
}
@@ -419,7 +423,7 @@ fun Activity.fixDateTaken(paths: ArrayList, showToasts: Boolean, hasResc
for (path in paths) {
val dateTime = ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME_ORIGINAL)
- ?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue
+ ?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue
// some formats contain a "T" in the middle, some don't
// sample dates: 2015-07-26T14:55:23, 2018:09:05 15:09:05
@@ -611,18 +615,18 @@ fun saveFile(path: String, bitmap: Bitmap, out: FileOutputStream, degrees: Int)
fun Activity.getShortcutImage(tmb: String, drawable: Drawable, callback: () -> Unit) {
ensureBackgroundThread {
val options = RequestOptions()
- .format(DecodeFormat.PREFER_ARGB_8888)
- .skipMemoryCache(true)
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .fitCenter()
+ .format(DecodeFormat.PREFER_ARGB_8888)
+ .skipMemoryCache(true)
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .fitCenter()
val size = resources.getDimension(R.dimen.shortcut_size).toInt()
val builder = Glide.with(this)
- .asDrawable()
- .load(tmb)
- .apply(options)
- .centerCrop()
- .into(size, size)
+ .asDrawable()
+ .load(tmb)
+ .apply(options)
+ .centerCrop()
+ .into(size, size)
try {
(drawable as LayerDrawable).setDrawableByLayerId(R.id.shortcut_image, builder.get())
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt
index b205d09c9..f5fb3572d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt
@@ -216,16 +216,16 @@ fun Context.getDirectParentSubfolders(dirs: ArrayList, currentPathPre
}
val directory = Directory(newDirId++,
- parent,
- subDirs.first().tmb,
- getFolderNameFromPath(parent),
- subDirs.sumBy { it.mediaCnt },
- lastModified,
- dateTaken,
- subDirs.sumByLong { it.size },
- getPathLocation(parent),
- mediaTypes,
- "")
+ parent,
+ subDirs.first().tmb,
+ getFolderNameFromPath(parent),
+ subDirs.sumBy { it.mediaCnt },
+ lastModified,
+ dateTaken,
+ subDirs.sumByLong { it.size },
+ getPathLocation(parent),
+ mediaTypes,
+ "")
directory.containsMediaFilesDirectly = false
dirs.add(directory)
@@ -442,15 +442,15 @@ fun Context.getPathLocation(path: String): Int {
fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList? = null) {
val options = RequestOptions()
- .signature(path.getFileSignature())
- .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
- .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
- .priority(Priority.LOW)
- .format(DecodeFormat.PREFER_ARGB_8888)
+ .signature(path.getFileSignature())
+ .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
+ .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
+ .priority(Priority.LOW)
+ .format(DecodeFormat.PREFER_ARGB_8888)
val builder = Glide.with(applicationContext)
- .asBitmap()
- .load(path)
+ .asBitmap()
+ .load(path)
if (cropThumbnails) options.centerCrop() else options.fitCenter()
builder.apply(options).into(target)
@@ -458,34 +458,34 @@ fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boo
fun Context.loadJpg(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList? = null) {
val options = RequestOptions()
- .signature(path.getFileSignature())
- .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
- .priority(Priority.LOW)
- .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
+ .signature(path.getFileSignature())
+ .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
+ .priority(Priority.LOW)
+ .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
val builder = Glide.with(applicationContext)
- .load(path)
+ .load(path)
if (cropThumbnails) options.centerCrop() else options.fitCenter()
builder.apply(options)
- .transition(DrawableTransitionOptions.withCrossFade())
- .into(target)
+ .transition(DrawableTransitionOptions.withCrossFade())
+ .into(target)
}
fun Context.loadStaticGIF(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList? = null) {
val options = RequestOptions()
- .signature(path.getFileSignature())
- .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
- .priority(Priority.LOW)
- .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
+ .signature(path.getFileSignature())
+ .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
+ .priority(Priority.LOW)
+ .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
val builder = Glide.with(applicationContext)
- .asBitmap() // make sure the GIF wont animate
- .load(path)
+ .asBitmap() // make sure the GIF wont animate
+ .load(path)
if (cropThumbnails) options.centerCrop() else options.fitCenter()
builder.apply(options)
- .into(target)
+ .into(target)
}
fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boolean) {
@@ -493,12 +493,12 @@ fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boo
val options = RequestOptions().signature(path.getFileSignature())
Glide.with(applicationContext)
- .`as`(PictureDrawable::class.java)
- .listener(SvgSoftwareLayerSetter())
- .load(path)
- .apply(options)
- .transition(DrawableTransitionOptions.withCrossFade())
- .into(target)
+ .`as`(PictureDrawable::class.java)
+ .listener(SvgSoftwareLayerSetter())
+ .load(path)
+ .apply(options)
+ .transition(DrawableTransitionOptions.withCrossFade())
+ .into(target)
}
fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: Boolean = false, forceShowHidden: Boolean = false, callback: (ArrayList) -> Unit) {
@@ -516,7 +516,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
val shouldShowHidden = config.shouldShowHidden || forceShowHidden
val excludedPaths = config.excludedFolders
val includedPaths = config.includedFolders
- var filteredDirectories = directories.filter { it.path.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden) } as ArrayList
+ var filteredDirectories = directories.filter { it.path.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, this) } as ArrayList
val filterMedia = config.filterMedia
filteredDirectories = (when {
@@ -543,7 +543,6 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
val clone = filteredDirectories.clone() as ArrayList
callback(clone.distinctBy { it.path.getDistinctPath() } as ArrayList)
-
removeInvalidDBDirectories(filteredDirectories)
}
}
@@ -565,7 +564,7 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag
val foldersToAdd = ArrayList()
for (folder in foldersToScan) {
val allFiles = File(folder).listFiles() ?: continue
- allFiles.filter { it.isDirectory && it.name.startsWith("img_", true) }.forEach {
+ allFiles.filter { it.name.startsWith("img_", true) && it.isDirectory }.forEach {
foldersToAdd.add(it.absolutePath)
}
}
@@ -605,23 +604,26 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag
callback(grouped.clone() as ArrayList)
val OTGPath = config.OTGPath
- val mediaToDelete = ArrayList()
- media.filter { !getDoesFilePathExist(it.path, OTGPath) }.forEach {
- if (it.path.startsWith(recycleBinPath)) {
- deleteDBPath(it.path)
- } else {
- mediaToDelete.add(it)
- }
- }
-
try {
- if (mediaToDelete.isNotEmpty()) {
- mediaDB.deleteMedia(*mediaToDelete.toTypedArray())
-
- mediaToDelete.filter { it.isFavorite }.forEach {
- favoritesDB.deleteFavoritePath(it.path)
+ val mediaToDelete = ArrayList()
+ // creating a new thread intentionally, do not reuse the common background thread
+ Thread {
+ media.filter { !getDoesFilePathExist(it.path, OTGPath) }.forEach {
+ if (it.path.startsWith(recycleBinPath)) {
+ deleteDBPath(it.path)
+ } else {
+ mediaToDelete.add(it)
+ }
}
- }
+
+ if (mediaToDelete.isNotEmpty()) {
+ mediaDB.deleteMedia(*mediaToDelete.toTypedArray())
+
+ mediaToDelete.filter { it.isFavorite }.forEach {
+ favoritesDB.deleteFavoritePath(it.path)
+ }
+ }
+ }.start()
} catch (ignored: Exception) {
}
}
@@ -698,7 +700,6 @@ fun Context.deleteDBPath(path: String) {
fun Context.deleteMediumWithPath(path: String) {
try {
mediaDB.deleteMediumPath(path)
- favoritesDB.deleteFavoritePath(path)
} catch (ignored: Exception) {
}
}
@@ -788,9 +789,9 @@ fun Context.addPathToDB(path: String) {
try {
val isFavorite = favoritesDB.isFavorite(path)
- val videoDuration = if (type == TYPE_VIDEOS) path.getVideoDuration() else 0
+ val videoDuration = if (type == TYPE_VIDEOS) getDuration(path) ?: 0 else 0
val medium = Medium(null, path.getFilenameFromPath(), path, path.getParentPath(), System.currentTimeMillis(), System.currentTimeMillis(),
- File(path).length(), type, videoDuration, isFavorite, 0L)
+ File(path).length(), type, videoDuration, isFavorite, 0L)
mediaDB.insert(medium)
} catch (ignored: Exception) {
@@ -887,23 +888,21 @@ fun Context.updateDirectoryPath(path: String) {
fun Context.getFileDateTaken(path: String): Long {
val projection = arrayOf(
- Images.Media.DATE_TAKEN
+ Images.Media.DATE_TAKEN
)
val uri = Files.getContentUri("external")
val selection = "${Images.Media.DATA} = ?"
val selectionArgs = arrayOf(path)
- val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
- cursor?.use {
- if (cursor.moveToFirst()) {
- do {
- try {
- return cursor.getLongValue(Images.Media.DATE_TAKEN)
- } catch (ignored: Exception) {
- }
- } while (cursor.moveToNext())
+ try {
+ val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
+ cursor?.use {
+ if (cursor.moveToFirst()) {
+ return cursor.getLongValue(Images.Media.DATE_TAKEN)
+ }
}
+ } catch (ignored: Exception) {
}
return 0L
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt
index 2c0420b9a..3f36fa99e 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt
@@ -1,9 +1,9 @@
package com.simplemobiletools.gallery.pro.extensions
-import android.media.MediaMetadataRetriever
+import android.content.Context
import android.os.Environment
-import com.simplemobiletools.commons.extensions.doesThisOrParentHaveNoMedia
-import com.simplemobiletools.commons.helpers.NOMEDIA
+import com.simplemobiletools.commons.extensions.containsNoMedia
+import com.simplemobiletools.commons.extensions.doesParentHaveNoMedia
import java.io.File
import java.io.IOException
@@ -11,7 +11,7 @@ fun String.isThisOrParentIncluded(includedPaths: MutableSet) = includedP
fun String.isThisOrParentExcluded(excludedPaths: MutableSet) = excludedPaths.any { equals(it, true) } || excludedPaths.any { "$this/".startsWith("$it/", true) }
-fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPaths: MutableSet, showHidden: Boolean): Boolean {
+fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPaths: MutableSet, showHidden: Boolean, context: Context): Boolean {
if (isEmpty()) {
return false
}
@@ -35,7 +35,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPath
val containsNoMedia = if (showHidden) {
false
} else {
- File(this, NOMEDIA).exists()
+ file.containsNoMedia()
}
return if (!showHidden && containsNoMedia) {
@@ -49,7 +49,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPath
} else if (!showHidden && file.isDirectory && file.canonicalFile == file.absoluteFile) {
var containsNoMediaOrDot = containsNoMedia || contains("/.")
if (!containsNoMediaOrDot) {
- containsNoMediaOrDot = file.doesThisOrParentHaveNoMedia()
+ containsNoMediaOrDot = file.doesParentHaveNoMedia()
}
!containsNoMediaOrDot
} else {
@@ -66,15 +66,4 @@ fun String.getDistinctPath(): String {
}
}
-fun String.getVideoDuration(): Int {
- var seconds = 0
- try {
- val retriever = MediaMetadataRetriever()
- retriever.setDataSource(this)
- seconds = Math.round(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION).toInt() / 1000f)
- } catch (e: Exception) {
- }
- return seconds
-}
-
fun String.isDownloadsFolder() = equals(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString(), true)
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt
index 76da0d990..35c1b8913 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt
@@ -28,7 +28,9 @@ import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.gallery.pro.R
import com.simplemobiletools.gallery.pro.activities.PanoramaVideoActivity
import com.simplemobiletools.gallery.pro.activities.VideoActivity
-import com.simplemobiletools.gallery.pro.extensions.*
+import com.simplemobiletools.gallery.pro.extensions.config
+import com.simplemobiletools.gallery.pro.extensions.hasNavBar
+import com.simplemobiletools.gallery.pro.extensions.parseFileChannel
import com.simplemobiletools.gallery.pro.helpers.*
import com.simplemobiletools.gallery.pro.models.Medium
import com.simplemobiletools.gallery.pro.views.MediaSideScroll
@@ -327,7 +329,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
private fun setupTimer() {
- activity!!.runOnUiThread(object : Runnable {
+ activity?.runOnUiThread(object : Runnable {
override fun run() {
if (mExoPlayer != null && !mIsDragged && mIsPlaying) {
mCurrTime = (mExoPlayer!!.currentPosition / 1000).toInt()
@@ -476,8 +478,8 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
private fun checkIfPanorama() {
try {
val fis = FileInputStream(File(mMedium.path))
- fis.use { fis ->
- context!!.parseFileChannel(mMedium.path, fis.channel, 0, 0, 0) {
+ fis.use {
+ context!!.parseFileChannel(mMedium.path, it.channel, 0, 0, 0) {
mIsPanorama = true
}
}
@@ -501,7 +503,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
mSeekBar.setOnSeekBarChangeListener(if (mIsFullscreen) null else this)
- arrayOf(mView.video_curr_time, mView.video_duration).forEach {
+ arrayOf(mView.video_curr_time, mView.video_duration, mView.video_toggle_play_pause).forEach {
it.isClickable = !mIsFullscreen
}
@@ -588,8 +590,9 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
return
}
- if (mExoPlayer == null)
+ if (mExoPlayer == null) {
return
+ }
if (mIsPlaying) {
mExoPlayer!!.playWhenReady = true
@@ -634,7 +637,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
if (!wasEnded || !mConfig.loopVideos) {
- mPlayPauseButton.setImageResource(R.drawable.ic_pause_outline)
+ mPlayPauseButton.setImageResource(R.drawable.ic_pause_outline_vector)
}
if (!mWasVideoStarted) {
@@ -660,7 +663,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
mExoPlayer?.playWhenReady = false
}
- mPlayPauseButton.setImageResource(R.drawable.ic_play_outline)
+ mPlayPauseButton.setImageResource(R.drawable.ic_play_outline_vector)
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
mPositionAtPause = mExoPlayer?.currentPosition ?: 0L
releaseExoPlayer()
@@ -683,9 +686,14 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
private fun setupVideoDuration() {
- mDuration = mMedium.path.getVideoDuration()
- setupTimeHolder()
- setPosition(0)
+ ensureBackgroundThread {
+ mDuration = context?.getDuration(mMedium.path) ?: 0
+
+ activity?.runOnUiThread {
+ setupTimeHolder()
+ setPosition(0)
+ }
+ }
}
private fun videoPrepared() {
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt
index 06663d8f1..9d70eb98c 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt
@@ -191,7 +191,7 @@ class Config(context: Context) : BaseConfig(context) {
set(blackBackground) = prefs.edit().putBoolean(BLACK_BACKGROUND, blackBackground).apply()
var filterMedia: Int
- get() = prefs.getInt(FILTER_MEDIA, TYPE_DEFAULT_FILTER)
+ get() = prefs.getInt(FILTER_MEDIA, getDefaultFileFilter())
set(filterMedia) = prefs.edit().putInt(FILTER_MEDIA, filterMedia).apply()
var dirColumnCnt: Int
@@ -400,11 +400,13 @@ class Config(context: Context) : BaseConfig(context) {
set(everShownFolders) = prefs.edit().putStringSet(EVER_SHOWN_FOLDERS, everShownFolders).apply()
private fun getEverShownFolders() = hashSetOf(
- internalStoragePath,
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).absolutePath,
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath,
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath,
- "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath}/Screenshots"
+ internalStoragePath,
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).absolutePath,
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath,
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath,
+ "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath}/Screenshots",
+ "internalStoragePath/WhatsApp/Media/WhatsApp Images",
+ "internalStoragePath/WhatsApp/Media/WhatsApp Video"
)
var showRecycleBinAtFolders: Boolean
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt
index d6d6abef0..35933b7df 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt
@@ -1,6 +1,7 @@
package com.simplemobiletools.gallery.pro.helpers
import com.simplemobiletools.commons.helpers.MONTH_SECONDS
+import com.simplemobiletools.commons.helpers.isPiePlus
// shared preferences
const val DIRECTORY_SORT_ORDER = "directory_sort_order"
@@ -132,6 +133,7 @@ const val IS_VIEW_INTENT = "is_view_intent"
const val PICKED_PATHS = "picked_paths"
const val SHOULD_INIT_FRAGMENT = "should_init_fragment"
const val PORTRAIT_PATH = "portrait_path"
+const val SKIP_AUTHENTICATION = "skip_authentication"
// rotations
const val ROTATE_BY_SYSTEM_SETTING = 0
@@ -168,7 +170,8 @@ const val TYPE_GIFS = 4
const val TYPE_RAWS = 8
const val TYPE_SVGS = 16
const val TYPE_PORTRAITS = 32
-const val TYPE_DEFAULT_FILTER = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS or TYPE_PORTRAITS
+
+fun getDefaultFileFilter() = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS
const val LOCATION_INTERNAL = 1
const val LOCATION_SD = 2
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt
index 27c61a640..9e66b62b8 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt
@@ -49,9 +49,9 @@ class MediaFetcher(val context: Context) {
val OTGPath = context.config.OTGPath
val folders = getLatestFileFolders()
folders.addAll(arrayListOf(
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(),
- "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)}/Camera",
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(),
+ "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)}/Camera",
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()
).filter { context.getDoesFilePathExist(it, OTGPath) })
val filterMedia = context.config.filterMedia
@@ -66,7 +66,7 @@ class MediaFetcher(val context: Context) {
val shouldShowHidden = config.shouldShowHidden
val excludedPaths = config.excludedFolders
val includedPaths = config.includedFolders
- folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden) }.toMutableList() as ArrayList
+ folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, context) }.toMutableList() as ArrayList
} catch (e: Exception) {
ArrayList()
}
@@ -172,7 +172,7 @@ class MediaFetcher(val context: Context) {
val config = context.config
val includedFolders = config.includedFolders
val OTGPath = config.OTGPath
- var foldersToScan = config.everShownFolders.filter { it == FAVORITES || it == RECYCLE_BIN || context.getDoesFilePathExist(it, OTGPath) }.toHashSet()
+ val foldersToScan = config.everShownFolders.filter { it == FAVORITES || it == RECYCLE_BIN || context.getDoesFilePathExist(it, OTGPath) }.toHashSet()
cursor.use {
if (cursor.moveToFirst()) {
@@ -192,8 +192,8 @@ class MediaFetcher(val context: Context) {
val showHidden = config.shouldShowHidden
val excludedFolders = config.excludedFolders
- foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden) }.toHashSet()
- return foldersToScan.distinctBy { it.getDistinctPath() }.toMutableSet() as LinkedHashSet
+ return foldersToScan.distinctBy { it.getDistinctPath() }
+ .filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden, context) }.toMutableSet() as LinkedHashSet
}
private fun addFolder(curFolders: HashSet, folder: String) {
@@ -244,7 +244,7 @@ class MediaFetcher(val context: Context) {
val isSvg = if (isImage || isVideo || isGif || isRaw) false else path.isSvg()
if (!isImage && !isVideo && !isGif && !isRaw && !isSvg) {
- if (showPortraits && file.isDirectory && file.name.startsWith("img_", true)) {
+ if (showPortraits && file.name.startsWith("img_", true) && file.isDirectory) {
val portraitFiles = file.listFiles() ?: continue
val cover = portraitFiles.firstOrNull { it.name.contains("cover", true) } ?: portraitFiles.firstOrNull()
if (cover != null && !files.contains(cover)) {
@@ -294,7 +294,7 @@ class MediaFetcher(val context: Context) {
} else {
val lastModified = if (getProperLastModified) file.lastModified() else 0L
var dateTaken = lastModified
- val videoDuration = if (getVideoDurations && isVideo) path.getVideoDuration() else 0
+ val videoDuration = if (getVideoDurations && isVideo) context.getDuration(path) ?: 0 else 0
if (getProperDateTaken) {
var newDateTaken = dateTakens.remove(path)
@@ -383,7 +383,7 @@ class MediaFetcher(val context: Context) {
}
val path = Uri.decode(file.uri.toString().replaceFirst("${context.config.OTGTreeUri}/document/${context.config.OTGPartition}%3A", "${context.config.OTGPath}/"))
- val videoDuration = if (getVideoDurations) path.getVideoDuration() else 0
+ val videoDuration = if (getVideoDurations) context.getDuration(path) ?: 0 else 0
val isFavorite = favoritePaths.contains(path)
val medium = Medium(null, filename, path, folder, dateModified, dateTaken, size, type, videoDuration, isFavorite, 0L)
media.add(medium)
@@ -396,8 +396,8 @@ class MediaFetcher(val context: Context) {
val dateTakens = HashMap()
if (folder != FAVORITES) {
val projection = arrayOf(
- Images.Media.DISPLAY_NAME,
- Images.Media.DATE_TAKEN
+ Images.Media.DISPLAY_NAME,
+ Images.Media.DATE_TAKEN
)
val uri = Files.getContentUri("external")
@@ -494,7 +494,7 @@ class MediaFetcher(val context: Context) {
val sortDescending = currentGrouping and GROUP_DESCENDING != 0
val sorted = if (currentGrouping and GROUP_BY_LAST_MODIFIED_DAILY != 0 || currentGrouping and GROUP_BY_LAST_MODIFIED_MONTHLY != 0 ||
- currentGrouping and GROUP_BY_DATE_TAKEN_DAILY != 0 || currentGrouping and GROUP_BY_DATE_TAKEN_MONTHLY != 0) {
+ currentGrouping and GROUP_BY_DATE_TAKEN_DAILY != 0 || currentGrouping and GROUP_BY_DATE_TAKEN_MONTHLY != 0) {
mediumGroups.toSortedMap(if (sortDescending) compareByDescending {
it.toLongOrNull() ?: 0L
} else {
@@ -549,7 +549,7 @@ class MediaFetcher(val context: Context) {
return if (timestamp.areDigitsOnly()) {
val cal = Calendar.getInstance(Locale.ENGLISH)
cal.timeInMillis = timestamp.toLong()
- val format = if (showDay) "dd MMM yyyy" else "MMM yyyy"
+ val format = if (showDay) context.config.dateFormat else "MMMM yyyy"
DateFormat.format(format, cal).toString()
} else {
""
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt
index f68ae3171..4f37ea010 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt
@@ -32,11 +32,11 @@ data class Directory(
constructor() : this(null, "", "", "", 0, 0L, 0L, 0L, 0, 0, "", 0, 0)
- fun getBubbleText(sorting: Int, context: Context) = when {
+ fun getBubbleText(sorting: Int, context: Context, dateFormat: String? = null, timeFormat: String? = null) = when {
sorting and SORT_BY_NAME != 0 -> name
sorting and SORT_BY_PATH != 0 -> path
sorting and SORT_BY_SIZE != 0 -> size.formatSize()
- sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context)
+ sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context, dateFormat, timeFormat)
else -> taken.formatDate(context)
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Medium.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Medium.kt
index 04c685229..894feae17 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Medium.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Medium.kt
@@ -48,11 +48,11 @@ data class Medium(
fun isHidden() = name.startsWith('.')
- fun getBubbleText(sorting: Int, context: Context) = when {
+ fun getBubbleText(sorting: Int, context: Context, dateFormat: String, timeFormat: String) = when {
sorting and SORT_BY_NAME != 0 -> name
sorting and SORT_BY_PATH != 0 -> path
sorting and SORT_BY_SIZE != 0 -> size.formatSize()
- sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context)
+ sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context, dateFormat, timeFormat)
else -> taken.formatDate(context)
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/receivers/BootCompletedReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/receivers/BootCompletedReceiver.kt
new file mode 100644
index 000000000..f8aae1326
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/receivers/BootCompletedReceiver.kt
@@ -0,0 +1,18 @@
+package com.simplemobiletools.gallery.pro.receivers
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import com.simplemobiletools.commons.helpers.ensureBackgroundThread
+import com.simplemobiletools.gallery.pro.extensions.updateDirectoryPath
+import com.simplemobiletools.gallery.pro.helpers.MediaFetcher
+
+class BootCompletedReceiver : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
+ ensureBackgroundThread {
+ MediaFetcher(context).getFoldersToScan().forEach {
+ context.updateDirectoryPath(it)
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/drawable-hdpi/ic_next_outline.png b/app/src/main/res/drawable-hdpi/ic_next_outline.png
deleted file mode 100644
index 88c0a34aa..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_next_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_pause_outline.png b/app/src/main/res/drawable-hdpi/ic_pause_outline.png
deleted file mode 100644
index d6d51bfc9..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_pause_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_prev_outline.png b/app/src/main/res/drawable-hdpi/ic_prev_outline.png
deleted file mode 100644
index 898c74d78..000000000
Binary files a/app/src/main/res/drawable-hdpi/ic_prev_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/img_play_outline.png b/app/src/main/res/drawable-hdpi/img_play_outline.png
deleted file mode 100644
index 0aeace079..000000000
Binary files a/app/src/main/res/drawable-hdpi/img_play_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/img_play_outline_empty.png b/app/src/main/res/drawable-hdpi/img_play_outline_empty.png
deleted file mode 100644
index 6212066d5..000000000
Binary files a/app/src/main/res/drawable-hdpi/img_play_outline_empty.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_next_outline.png b/app/src/main/res/drawable-xhdpi/ic_next_outline.png
deleted file mode 100644
index e92ce5556..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_next_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_pause_outline.png b/app/src/main/res/drawable-xhdpi/ic_pause_outline.png
deleted file mode 100644
index 11d8d1698..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_pause_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_prev_outline.png b/app/src/main/res/drawable-xhdpi/ic_prev_outline.png
deleted file mode 100644
index 8c2c6774b..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_prev_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/img_play_outline.png b/app/src/main/res/drawable-xhdpi/img_play_outline.png
deleted file mode 100644
index d61aa4371..000000000
Binary files a/app/src/main/res/drawable-xhdpi/img_play_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/img_play_outline_empty.png b/app/src/main/res/drawable-xhdpi/img_play_outline_empty.png
deleted file mode 100644
index 2753608b6..000000000
Binary files a/app/src/main/res/drawable-xhdpi/img_play_outline_empty.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_next_outline.png b/app/src/main/res/drawable-xxhdpi/ic_next_outline.png
deleted file mode 100644
index f88b8d317..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_next_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_pause_outline.png b/app/src/main/res/drawable-xxhdpi/ic_pause_outline.png
deleted file mode 100644
index d6f0c72ce..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_pause_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_prev_outline.png b/app/src/main/res/drawable-xxhdpi/ic_prev_outline.png
deleted file mode 100644
index b92feff7d..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_prev_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/img_play_outline.png b/app/src/main/res/drawable-xxhdpi/img_play_outline.png
deleted file mode 100644
index a3ffa45fb..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/img_play_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/img_play_outline_empty.png b/app/src/main/res/drawable-xxhdpi/img_play_outline_empty.png
deleted file mode 100644
index 95a4f7d28..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/img_play_outline_empty.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_next_outline.png b/app/src/main/res/drawable-xxxhdpi/ic_next_outline.png
deleted file mode 100644
index 34fe17702..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_next_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_pause_outline.png b/app/src/main/res/drawable-xxxhdpi/ic_pause_outline.png
deleted file mode 100644
index 162ed84d1..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_pause_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_prev_outline.png b/app/src/main/res/drawable-xxxhdpi/ic_prev_outline.png
deleted file mode 100644
index 2e0a23b8b..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_prev_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/img_play_outline.png b/app/src/main/res/drawable-xxxhdpi/img_play_outline.png
deleted file mode 100644
index dafb99e23..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/img_play_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/img_play_outline_empty.png b/app/src/main/res/drawable-xxxhdpi/img_play_outline_empty.png
deleted file mode 100644
index df8727abd..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/img_play_outline_empty.png and /dev/null differ
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index b7d436f28..75ea7b056 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -1,6 +1,5 @@
-
+ android:text="@string/customize_colors" />
@@ -40,9 +39,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -63,9 +62,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ android:text="@string/change_date_and_time_format" />
@@ -84,9 +83,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/bigger_margin">
+ android:paddingStart="@dimen/medium_margin"
+ android:paddingEnd="@dimen/medium_margin"
+ android:text="@string/file_loading_priority" />
+ tools:text="@string/compromise" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ android:text="@string/manage_included_folders" />
@@ -157,9 +149,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ android:text="@string/manage_excluded_folders" />
@@ -178,9 +170,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ android:text="@string/manage_hidden_folders" />
@@ -199,9 +191,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -262,9 +247,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -285,9 +270,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -308,9 +293,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -331,9 +316,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -394,9 +372,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -417,9 +395,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -440,9 +418,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -463,9 +441,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -526,9 +497,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -549,9 +520,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -612,9 +576,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -635,9 +599,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -658,9 +622,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -681,9 +645,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -704,9 +668,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -727,9 +691,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -750,9 +714,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/bigger_margin">
+ android:paddingStart="@dimen/medium_margin"
+ android:paddingEnd="@dimen/medium_margin"
+ android:text="@string/screen_rotation_by" />
+ android:clickable="false" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -822,9 +779,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -845,9 +802,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -868,9 +825,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
+ app:switchPadding="@dimen/medium_margin" />
+ android:text="@string/manage_extended_details" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -1013,9 +956,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -1036,9 +979,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -1099,9 +1035,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -1122,9 +1058,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -1185,9 +1114,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ android:text="@string/manage_bottom_actions" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ app:switchPadding="@dimen/medium_margin" />
@@ -1246,9 +1168,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -1269,9 +1191,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ app:switchPadding="@dimen/medium_margin" />
@@ -1292,9 +1214,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/bigger_margin">
+ android:paddingStart="@dimen/medium_margin"
+ android:paddingEnd="@dimen/medium_margin"
+ android:text="@string/empty_recycle_bin" />
+ android:clickable="false" />
-
-
+ android:textSize="@dimen/smaller_text_size" />
+ android:text="@string/export_settings" />
@@ -1362,9 +1277,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
- android:paddingLeft="@dimen/normal_margin"
+ android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
- android:paddingRight="@dimen/normal_margin"
+ android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
+ android:text="@string/import_settings" />
diff --git a/app/src/main/res/layout/bottom_video_time_holder.xml b/app/src/main/res/layout/bottom_video_time_holder.xml
index 53701119c..3a7b6a477 100644
--- a/app/src/main/res/layout/bottom_video_time_holder.xml
+++ b/app/src/main/res/layout/bottom_video_time_holder.xml
@@ -16,7 +16,7 @@
android:layout_marginTop="@dimen/activity_margin"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/normal_margin"
- android:src="@drawable/ic_prev_outline"
+ android:src="@drawable/ic_prev_outline_vector"
android:visibility="invisible"/>
-
@@ -8,17 +7,18 @@
+ android:layout_height="match_parent" />
+ android:background="@drawable/gradient_background_flipped"
+ android:contentDescription="@null" />
+ layout="@layout/bottom_actions"
+ android:visibility="gone" />
diff --git a/app/src/main/res/layout/pager_video_item.xml b/app/src/main/res/layout/pager_video_item.xml
index 405f15026..144e53972 100644
--- a/app/src/main/res/layout/pager_video_item.xml
+++ b/app/src/main/res/layout/pager_video_item.xml
@@ -41,7 +41,7 @@
android:layout_height="@dimen/play_outline_size_big"
android:layout_centerInParent="true"
android:padding="20dp"
- android:src="@drawable/ic_play_outline"/>
+ android:src="@drawable/ic_play_outline_vector"/>
-
-
-
- إلغاء تثبيت المجلد
تثبيت في الأعلى
إظهار كل محتويات المجلدات
- كل المحلات
+ كل المجلدات
التبديل إلى عرض المجلد
مجلد آخر
عرض علي الخريطة
موقع غير معروف
- ذيادة عدد الأعمدة
+ زيادة عدد الأعمدة
تقليل عدد الأعمدة
تغيير صورة الغلاف
تحديد صورة
الصوت
- السبوع
+ السطوع
قفل الاتجاه
فتح الاتجاه
تغيير الاتجاه
@@ -30,7 +30,7 @@
إصلاح تاريخ إلتقاط القيمة
جارٍ الإصلاح…
تم إصلاح التواريخ بنجاح
- No Date Taken values have been found
+ لم يتم العثور على تاريخ التقاط القيم
مشاركة الصورة الذي تم تغيير حجمها
مرحباً,\n\nيبدو أنك قمت بترقية التطبيق المجاني القديم. يمكنك الآن إلغاء تثبيت الإصدار القديم، الذي يحتوي على زر \'الترقية إلى Pro\' في أعلي إعدادات التطبيق.\n\nسيتم حذف عناصر سلة المحذوفات فقط، كما سيتم حذف العناصر المفضلة، كما سيتعين عليك إعادة ضبط إعدادات التطبيق .\n\nشكراً!
التبديل إلي البحث فى الملفات عبر كافة المجلدات المرئية
@@ -80,8 +80,8 @@
تدوير
مسار الصورة غير صحيح
فشل تعديل الصورة
- Image editing cancelled
- File edited successfully
+ تم إلغاء تعديل الصورة
+ تم تعديل الملف بنجاح
تعديل الصورة باستخدام:
لم يتم العثور على أي محرر للصور
موقع الملف غير معروف
@@ -189,6 +189,7 @@
إختيار وسط
تجنب إظهار الملفات غير الصالحة
إظهار أنواع ملفات الصور
+ Allow zooming videos with double tapping them
الصور المصغرة
@@ -202,85 +203,85 @@
تبديل رؤية الملف
- Custom
- Reset
- Square
- Transform
- Filter
- None
- Adjust
- Shadows
- Exposure
- Highlights
- Brightness
- Contrast
- Saturation
- Clarity
- Gamma
- Blacks
- Whites
- Temperature
- Sharpness
- Reset
- Focus
- None
- Radial
- Linear
- Mirrored
- Gaussian
- Text
- Text Options
- Text Color
- Font
- Add
- Edit
- Straighten
- Font
- Color
- BG Color
- Alignment
- To Front
- Delete
- Your text
- Brush
- Color
- Size
- Hardness
- To Front
- Delete
- Brush Color
- Editor
- Close Editor?
- Do you really want to discard the image?
- Yes
- No
- Cancel
- Accept
- Save
- Exporting image…
- Exporting image %s.
- Flip H
- Flip V
- Undo
- Redo
- Color Picker
- Transparent
- White
- Gray
- Black
- Light blue
- Blue
- Purple
- Orchid
- Pink
- Red
- Orange
- Gold
- Yellow
- Olive
- Green
- Aquamarin
- Pipettable color
+ مخصص
+ إعادة تعيين
+ مربع
+ تحويل
+ فلتر
+ لا شيء
+ ضبط
+ ظلال
+ التعرض
+ أكثر وضوحاً
+ السطوع
+ التباين
+ التشبع
+ الوضوح
+ جاما
+ دراجات الأسود
+ دراجات الأبيض
+ درجة الحرارة
+ الحدة
+ إعادة تعيين
+ تركيز
+ لا شيء
+ قطري
+ خطي
+ مرآة
+ جاوس
+ النص
+ خيارات النص
+ لون الخط
+ الخط
+ إضافة
+ تعديل
+ الصلابة
+ الخط
+ اللون
+ لون الخلفية
+ محاذاة
+ إلي الأمام
+ حذف
+ النص الخاص بك
+ الفرشاة
+ اللون
+ الحجم
+ الصلابة
+ إلي الأمام
+ حذف
+ لون الفرشاة
+ المحرر
+ هل تريد إغلاق المحرر؟
+ هل تريد فعلاً تجاهل الصورة؟
+ نعم
+ لا
+ إلغاء
+ موافق
+ حفظ
+ جارٍ تصدير الصورة…
+ جارٍ تصدير الصورة %s.
+ أنعكاس أفقي
+ أنعكاس رأسي
+ تراجع
+ إعادة
+ لاقط اللون
+ شفاف
+ أبيض
+ رمادي
+ أسود
+ أزرق فاتح
+ أزرق
+ بنفسجي
+ أرجواني
+ وردي
+ أحمر
+ برتقالي
+ ذهبي
+ أصفر
+ زيتوني
+ أخضر
+ زبرجد
+ Pipettable لون
كيف يمكنني جعل تطبيق الاستديو معرض الجهاز الإفتراضي ؟
@@ -290,9 +291,9 @@
كيف يمكنني جعل ألبوماً يظهر دائماً في الأعلى ؟
يمكنك الضغط مطولاً علي الألبوم المطلوب وحدد أيقونة "التثبيت" في قائمة الإجراءات، التي ستقوم بتثبيته في الأعلي. يمكنك تثبيت مجلدات متعددة أيضا، سيتم فرز العناصر المثبتة حسب طريقة الفرز الإفتراضية.
كيف يمكنني تسريع مقاطع الفيديو؟
- You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.
+ يمكنك القيام بذلك عن طريق النقر المزدوج على جانب الشاشة, أو النقر على نصوص المدة الحالية أو القصوى بالقرب من شريط التمرير. إذا قمت بتمكين فتح مقاطع الفيديو على شاشة منفصلة في إعدادات التطبيق، يمكنك استخدام الإيماءات الأفقية أيضاً.
ما هو الفرق بين إخفاء المجلد وإستبعاده ؟
- Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. الإستبعاد يمنع عرض المجلد فقط في الاستديو، بينما الإخفاء يعمل على مستوى النظام ويخفي المجلد من المعارض الأخرى أيضاً. يعمل عن طريق إنشاء ملف فارغ \ ".nomedia \" في المجلد المحدد ، والذي يمكنك إزالته بعد ذلك بواسطة أي مدير ملفات أيضًا.
+ لاحظ أن بعض الأجهزة لا تسمح بإخفاء المجلدات مثل الكاميرا ولقطات الشاشة والتنزيلات. الإستبعاد يمنع عرض المجلد فقط في الاستديو، بينما الإخفاء يعمل على مستوى النظام ويخفي المجلد من المعارض الأخرى أيضاً. يعمل عن طريق إنشاء ملف فارغ \ ".nomedia \" في المجلد المحدد ، والذي يمكنك إزالته بعد ذلك بواسطة أي مدير ملفات أيضًا.
لماذا تظهر المجلدات مع صورة غلاف الموسيقى أو الملصقات؟
قد يحدث أن ترى بعض الألبومات غير العادية تظهر. يمكنك بسهولة إستبعادهم بالضغط مطولاً عليهم وأختر إستبعاد. في مربع الحوار التالي يمكنك بعد ذلك تحديد المجلد الاصل، من المحتمل ان يمنع ظهور الألبومات الأخري ذات الصلة أيضاً.
المجلد الذي به صور لا يظهر، أو لا يظهر كل العناصر. ماذا يمكنني أن أفعل؟
@@ -316,7 +317,7 @@
المعرض البسيط الـ Pro - محرر ومدير الصور
- Browse your memories without any interruptions with this photo and video gallery
+ أستعرض ذكرياتك دون أي انقطاع مع معرض الصور والفيديو هذا
(تطبيق المعرض البسيط الـ Pro) هو معرض بدون إنترنت قابل للتخصيص بدرجة كبيرة يتمتع بتنظيم الصور وتحريرها وإستعادة الملفات المحذوفة من خلال "سلة المحذوفات" وحماية الملفات وإخفاؤها وعرض مجموعة كبيرة من تنسيقات الصور والفيديو المختلفة بما في ذلك تنسيقات RAW و SVG وغير ذلك الكثير.
@@ -326,7 +327,7 @@
المعرض البسيط الـ Pro - الميزات
-------------------------------------------------
- معرض بدون إنترنت بدون إعلانات أو نوافذ منبثقة
+ معرض بدون إنترنت بدون إعلانات أو نوافذ منبثقة
• محرر صور (معرض البسيط) - قص، تدوير، تغيير حجم، رسم، فلاتر وغير ذلك
• لا حاجة للوصول إلى الإنترنت، مما يمنحك المزيد من الخصوصية والأمان
@@ -362,7 +363,7 @@
حماية وإخفاء الصور والفيديوهات والملفات
باستخدام رمز الـ PIN أو النمط أو الماسح الضوئي لبصمة الاصبع لجهازك يمكنك حماية الصور ومقاطع الفيديو والألبومات بأكملها وإخفائها. يمكنك حماية التطبيق نفسه أو وضع قفل الأمان علي وظائف معينة للتطبيق علي سبيل المثال، لا يمكنك حذف ملف دون إجراء مسح ضوئي لبصمة الاصبع، مما يساعد علي حماية ملفاتك من الحذف غير المقصود.
- أطلع على المجموعة الكاملة من الأدوات البسيطة هنا:
+ أطلع على المجموعة الكاملة من تطبيقات البسيط هنا:
https://www.simplemobiletools.com
موقع مستقل لتطبيق المعرض البسيط الـ Pro :
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index 0ff9c2c27..0345c3ee3 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -189,6 +189,7 @@
Compromise
Avoid showing invalid files
Show image file types
+ Allow zooming videos with double tapping them
Thumbnails
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index fc8d6ee71..e76b84883 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -189,6 +189,7 @@
Compromès
Eviteu mostrar fitxers no vàlids
Mostra els tipus de fitxers d\’imatges
+ Allow zooming videos with double tapping them
Miniatures
@@ -293,7 +294,7 @@
Com puc fer avançar els vídeos?
Podeu fer-ho tocant dues vegades el costat de la pantalla o tocant els textos de durada actual o màxima a prop de la barra de cerca. Si activeu l\’obertura de vídeos en una pantalla diferent a la configuració de l\’aplicació, també podeu fer servir gestos horitzontals.
Quina és la diferència entre ocultar i excloure una carpeta?
- Excloure impedeix mostrar la carpeta només a Simple Galery, mentre que Ocultar també amaga la carpeta a altres galeries. Funciona creant un fitxer \". Nomedia \" buit a la carpeta donada, que podeu eliminar amb qualsevol gestor de fitxers. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.
+ Excloure impedeix mostrar la carpeta només a Simple Galery, mentre que Ocultar també amaga la carpeta a altres galeries. Funciona creant un fitxer \". Nomedia \" buit a la carpeta donada, que podeu eliminar amb qualsevol gestor de fitxers. Tingueu en compte que alguns dispositius no permeten amagar carpetes com Càmera, Captures de pantalla i Descàrregues.
Per què apareixen les carpetes amb les portades de la música o adhesius?
Pot passar que veuràs que apareixen alguns àlbums inusuals. Podeu excloure’ls fàcilment prement-los i seleccionant Excloure. Al següent diàleg, podeu seleccionar la carpeta principal, és probable que impedeixi que apareguin altres àlbums relacionats.
Una carpeta amb imatges no apareix, què puc fer?
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index d54ebc69d..abfab3d00 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -189,6 +189,7 @@
Kompromis
Nezobrazovat neplatné soubory
Zobrazit typ obrázkových souborů
+ Allow zooming videos with double tapping them
Náhledy
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 06669b295..e36395aaa 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -189,6 +189,7 @@
Kompromis
Undgå at vise ugyldige filer
Vis billeders filtyper
+ Allow zooming videos with double tapping them
Miniaturer
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index c9306ce0c..83e28096f 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -189,6 +189,7 @@
Kompromiss
Das Anzeigen von ungültigen Dateien vermeiden
Bilddateitypen anzeigen
+ Allow zooming videos with double tapping them
Thumbnails
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index eb980f61b..c0e6b3725 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -189,6 +189,7 @@
Συμβιβασμός
Αποφυγή εμφάνισης μη έγκυρων αρχείων
Εμφάνιση τύπου αρχείου εικόνας
+ Allow zooming videos with double tapping them
Εικονίδια
@@ -294,7 +295,7 @@
Πώς μπορώ να τρέξω μπροστά (fast forward) τα βίντεο;
Μπορείτε να το κάνετε πατώντας δύο φορές την πλευρά της οθόνης ή πατώντας το κείμενο τρέχοντος ή μέγιστης διάρκειας κοντά στη γραμμή αναζήτησης. Αν ενεργοποιήσετε το άνοιγμα βίντεο σε ξεχωριστή οθόνη στις ρυθμίσεις εφαρμογής, μπορείτε επίσης να χρησιμοποιήσετε και τις οριζόντιες κινήσεις.
Ποια είναι διαφορά μεταξύ απόκρυψης και εξαίρεσης ενός φακέλου;
- Η εξαίρεση δεν επιτρέπει την εμφάνιση του φακέλου μόνο στην Απλή Συλλογή, ενώ η απόκρυψη λειτουργεί σε επίπεδο συστήματος και θα αποκρύψει τον φάκελο και από άλλες εφαρμογές γκάλερι. Λειτουργεί δημιουργώντας ένα άδειο \".nomedia\" αρχείο στον επιλεγμένο φάκελο, το οποίο μπορείτε να το διαγράψετε και με οποιονδήποτε διαχειριστή αρχείων. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.
+ Η εξαίρεση δεν επιτρέπει την εμφάνιση του φακέλου μόνο στην Απλή Συλλογή, ενώ η απόκρυψη λειτουργεί σε επίπεδο συστήματος και θα αποκρύψει τον φάκελο και από άλλες εφαρμογές γκάλερι. Λειτουργεί δημιουργώντας ένα άδειο \".nomedia\" αρχείο στον επιλεγμένο φάκελο, το οποίο μπορείτε να το διαγράψετε και με οποιονδήποτε διαχειριστή αρχείων. Σημειώστε ότι μερικές συσκευές δεν αποδέχονται την απόκρυψη φακέλων όπως Κάμερας, Στιγμιοτύπων, και Λήψεων.
Γιατί εμφανίζονται φάκελοι με εξώφυλλο μουσικής ή αυτόκολλητα;
Είναι πιθανόν να δείτε κάποια περίεργα άλμπουμ να εμφανίζονται. Μπορείτε να τα εξαιρέσετε εύκολα με παρατεταμένο άγγιγμα και επιλογή του Εξαίρεση. Στον επόμενο διάλογο μπορείτε να επιλέξετε επάνω φάκελο. Είναι πιθανό να μην επιτρέψει την εμφάνιση και άλλων σχετικών άλμπουμ.
Ένας φάκελος με εικόνες δεν εμφανίζεται. Τι μπορώ να κάνω;
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 5ecfbf3a4..edcbc545c 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -189,6 +189,7 @@
Compromiso
Evita mostrar archivos inválidos
Mostrar tipos de archivo de imagen
+ Allow zooming videos with double tapping them
Miniaturas
@@ -293,7 +294,7 @@
¿Cómo puedo avanzar videos?
Puede hacerlo tocando dos veces el costado de la pantalla o tocando los textos de duración actual o máxima cerca de la barra de búsqueda. Si habilita la apertura de videos en una pantalla separada en la configuración de la aplicación, también puede usar gestos horizontales.
¿Cuál es la diferencia entre ocultar y excluir una carpeta?
- Excluir evita mostrar la carpeta solo en Simple Gallery, mientras que Ocultar funciona en el sistema y oculta la carpeta de otras galerías también. Funciona al crear un archivo \".nomedia \" vacío en la carpeta determinada, que luego puede eliminar también con cualquier administrador de archivos. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.
+ Excluir evita mostrar la carpeta solo en Simple Gallery, mientras que Ocultar funciona en el sistema y oculta la carpeta de otras galerías también. Funciona al crear un archivo \".nomedia \" vacío en la carpeta determinada, que luego puede eliminar también con cualquier administrador de archivos. Tenga en cuenta que algunos dispositivos no permiten ocultar carpetas como Cámara, Capturas de pantalla y Descargas.
¿Por qué aparecen las carpetas con la portada de la música o las pegatinas?
Puede suceder que veas aparecer algunos álbumes inusuales. Puede excluirlos fácilmente presionándolos durante mucho tiempo y seleccionando Excluir. En el siguiente cuadro de diálogo, puede seleccionar la carpeta principal, lo más probable es que evite que aparezcan otros álbumes relacionados.
Una carpeta con imágenes no aparece, ¿qué puedo hacer?
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 4d41db449..a534d0937 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -189,6 +189,7 @@
Compromise
Avoid showing invalid files
Show image file types
+ Allow zooming videos with double tapping them
Esikatselukuvat
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index fd39efd95..abfc0a3cd 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -80,9 +80,9 @@
Pivoter
Emplacement invalide
L\'édition de l\'image a échoué
- L\'édition de l\'image a été annulé
+ L\'édition de l\'image a été annulée
L\'image a été éditée avec succès
- Modifier l\'image avec:
+ Modifier l\'image avec :
Aucun éditeur d\'image trouvé
Emplacement du fichier inconnu
Impossible de remplacer le fichier source
@@ -99,7 +99,7 @@
Fond d\'écran simple
Définir comme fond d\'écran
Échec de la définition en tant que fond d\'écran
- Définir comme fond d\'écran avec:
+ Définir comme fond d\'écran avec :
Définition du fond d\'écran en cours…
Fond d\'écran défini
Rapport d\'affichage portrait
@@ -110,7 +110,7 @@
Diaporama
- Intervalle (secondes):
+ Intervalle (secondes) :
Inclure les images
Inclure les vidéos
Inclure les GIFs
@@ -145,7 +145,7 @@
\'Grouper par\' et \'Trier par\' sont 2 modes indépendants
- Dossier affiché sur le widget:
+ Dossier affiché sur le widget :
Afficher le nom du dossier
@@ -189,6 +189,7 @@
Compromis
Éviter l\'affichage de fichiers invalides
Afficher les types d\'image
+ Allow zooming videos with double tapping them
Miniatures
@@ -222,7 +223,7 @@
Température
Netteté
Réinitialiser
- Focus
+ Floutage
Aucun
Radial
Linéaire
@@ -288,11 +289,11 @@
J\'ai verrouillé l\'application avec un mot de passe et je ne m\'en rappelle plus. Que faire ?
Il y a deux façons de procéder. Soit vous réinstallez l\'application, soit vous recherchez l\'application dans les paramètres de l\'appareil et appuyez sur \"Effacer les données\". Cela va seulement réinitialiser les paramètres de l\'application et ne supprimera pas vos fichiers.
Comment faire pour qu\'un album soit toujours affiché tout en haut ?
- Vous devez simplement à effectuer un appui prolongé sur l\'album en question et choisir l\'icône \"Épingler\" dans le menu d\'actions. Vous pouvez en épingler plusieurs. Les éléments épinglés seront alors triés selon l\'ordre par défaut.
+ Vous devez simplement effectuer un appui prolongé sur l\'album en question et choisir l\'icône \"Épingler\" dans le menu d\'actions. Vous pouvez en épingler plusieurs. Les éléments épinglés seront alors triés selon l\'ordre par défaut.
Comment avancer rapidement dans les vidéos ?
- You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.
+ Appuyez deux fois sur le côté de l\'écran, ou appuyez sur la valeur de durée actuelle ou maximale près de la barre de recherche. Si vous activez l\'ouverture des vidéos sur un écran séparé dans les paramètres de l\'application, vous pouvez également utiliser des gestes horizontaux.
Quelle est la différence entre cacher et exclure un dossier ?
- \"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Cacher un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier caché, et peut être supprimé avec n\'importe quel explorateur de fichiers. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.
+ \"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Cacher un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris pour les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier caché, et peut être supprimé avec n\'importe quel explorateur de fichiers. Notez que certains appareils ne permettent pas de masquer certains dossiers tels qu\'Appareil photo, Captures d\'écran et Téléchargements.
Pourquoi des dossiers avec des pochettes d\'albums musicaux ou des miniatures d\'images sont affichés ?
Il est possible que des albums qui ne devraient pas être affichés le soient. Vous pouvez les exclure facilement en les sélectionnant par un appui prolongé, puis en choisissant l\'option \"Exclure\", après quoi vous pouvez aussi sélectionner le dossier parent, ce qui devrait éviter l\'apparition d\'albums similaires.
Un dossier avec des images n\'apparaît pas. Que faire ?
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 7b030b01e..2e29b592e 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -23,26 +23,26 @@
Brillo
Fixar orientación
Desbloquear orientación
- Change orientation
- Force portrait
- Force landscape
- Use default orientation
- Fix Date Taken value
- Fixing…
- Dates fixed successfully
- No Date Taken values have been found
- Share a resized version
- Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks!
- Switch to file search across all visible folders
+ Cambiar orientación
+ Forzar retrato
+ Forzar paisaxe
+ Usar a orientación predeterminada
+ Arranxar o valor da Data de Captura
+ Arranxando…
+ Datas arranxadas con éxito
+ Non se atoparon valores de Datas de Captura
+ Comparta unha versión reducida
+ Ola,\n\nsemella que actualizou desde a vella aplicación gratuita. Pode desinstalar a versión vella, que ten un botón \'Upgrade to Pro\' enriba da pantalla de configuración.\n\nSo terá os elementos borrados da Papeleira de reciclaxe, os elementos favoritos sen marcar e tamén terá que reiniciar os Axustes.\n\nGrazas!
+ Cambiar á procura de ficheiros en todolos cartafoles visibles.
Filtrar medios
Imaxes
Vídeos
GIFs
- RAW images
+ Imaxes RAW
SVGs
- Portraits
+ Retratos
Non se atoparon medios dos indicados polo filtro.
Cambiar filtro
@@ -65,7 +65,7 @@
Xestionar cartafoles incluídos
Engadir cartafol
Si ten algún cartafol con medios, mais non foi recoñecido polo aplicativo, pódeo engadir manualmente.\n\nEngadindo aquí elementos non eliminará outros.
- No media files have been found. You can solve it by adding the folders containing media files manually.
+ Non se atopou ningún ficheiro audiovisual. Pode solucionalo engadindo manualmente algúns cartafoles con eses ficheiros.
Redimensionar
@@ -80,8 +80,8 @@
Rotar
Ruta a imaxe non válida
Fallo na edición da imaxe
- Image editing cancelled
- File edited successfully
+ Cancelouse a edición da imaxe
+ Ficheiro editado con éxito
Editar imaxe con:
Non se atopou ningún editor
Localización do ficheiro descoñecida
@@ -92,8 +92,8 @@
Voltear
Voltear horizontalmente
Voltear verticalmente
- Free
- Other
+ Libre
+ Outro
Fondo de pantalla
@@ -117,10 +117,10 @@
Orde aleatoria
Mover atrás
Reproducir en bucle
- Animation
- None
- Fade
- Slide
+ Animación
+ Nengún
+ Esvaecemento
+ Deslizamento
Rematou a presentación
Non se atoparon medios para a presentación
@@ -135,28 +135,28 @@
Non agrupar ficheiros
Cartafol
Último modificado
- Last modified (daily)
- Last modified (monthly)
+ Último modificado (diario)
+ Último modificado (mensual)
Data de captura
- Date taken (daily)
- Date taken (monthly)
- Tipo de ficheior
+ Data de captura (diaria)
+ Data de captura (mensual)
+ Tipo de ficheiro
Extensión
- Please note that grouping and sorting are 2 independent fields
+ Por favor, teña en conta que agrupar e ordenar son dous campos diferentes
- Folder shown on the widget:
- Show folder name
+ Cartafol a mostrar no widget:
+ Amosar nome de cartafol
Reproducir vídeos automticamente
- Remember last video playback position
+ Lembrar a posición do vídeo na última vez
Mudar a visibilidade do ficheiro
videos en bucle
Animar os GIFs na icona
Brillo ao máximo cando mire medios
Recortar iconas a cadrados
- Show video durations
+ Amosar a duración dos vídeos
Rotar medios a pantalla completa a
Axuste do sistema
Rotación do dispositivo
@@ -172,113 +172,114 @@
Xestionar información polo miúdo
Permitir zoom con un dedo a pantalla completa
Permitir o cambio instantáneo de medios pulsando nos lados da pantalla
- Allow deep zooming images
+ Permitir ampliar moito as imaxes
Agochar detalles extendidos cando a barra de estado está oculta
- Show some action buttons at the bottom of the screen
- Show the Recycle Bin at the folders screen
- Deep zoomable images
- Show images in the highest possible quality
- Show the Recycle Bin as the last item on the main screen
- Allow closing the fullscreen view with a down gesture
- Allow 1:1 zooming in with two double taps
- Always open videos on a separate screen with new horizontal gestures
- Show a notch if available
- Allow rotating images with gestures
- File loading priority
- Speed
- Compromise
- Avoid showing invalid files
- Show image file types
+ Mostrar botóns para accións na parte baixa da pantalla
+ Mostrar a Papeleira de Reciclaxe na pantalla de cartafoles
+ Imaxes con moita ampliación
+ Mostrar imaxes na súa máxima calidade
+ Mostrar a Papeleira de Reciclaxe como no derradeiro posto da pantalla principal
+ Permitir pechar a visualización en pantalla completa deslizando cara abaixo
+ Permitir ampliar a 1:1 con dous toques
+ Abrir sempre os vídeos nunha pantalla diferente con novos xestos horizontais
+ Mostrar unha marca se a houbera
+ Permitir rotar unha imaxe con xestos
+ Prioridade de carga de ficheiro
+ Velocidade
+ Compromiso
+ Non mostrar ficheiros inválidos
+ Mostrar tipos de ficheiros de imaxe
+ Allow zooming videos with double tapping them
Iconas
Medios a pantalla completa
Detalles ampliados
- Bottom actions
+ Actions do fondo
- Manage visible bottom actions
- Toggle favorite
- Toggle file visibility
+ Xestionar accións visibles do fondo
+ Alternar favorito
+ Alternar visibilidade do ficheiro
- Custom
- Reset
- Square
- Transform
- Filter
- None
- Adjust
- Shadows
- Exposure
- Highlights
- Brightness
- Contrast
- Saturation
- Clarity
+ Personalizado
+ Reiniciar
+ Cadrado
+ Transformar
+ Filtrar
+ Nengún
+ Axustar
+ Sombras
+ Exposición
+ Resalte
+ Brillo
+ Contraste
+ Saturación
+ Claridade
Gamma
- Blacks
- Whites
- Temperature
- Sharpness
- Reset
- Focus
- None
+ Negros
+ Brancos
+ Temperatura
+ Nitidez
+ Reiniciar
+ Foco
+ Nengún
Radial
- Linear
- Mirrored
- Gaussian
- Text
- Text Options
- Text Color
- Font
- Add
- Edit
- Straighten
- Font
- Color
- BG Color
- Alignment
- To Front
- Delete
- Your text
- Brush
- Color
- Size
- Hardness
- To Front
- Delete
- Brush Color
+ Lineal
+ Reflectir
+ Gaussiano
+ Texto
+ Opcións de Texto
+ Cor de Texto
+ Fonte
+ Engadir
+ Editar
+ Endereitar
+ Fonte
+ Cor
+ Color Fondo
+ Aliñamento
+ Á Front
+ Borrar
+ Seu texto
+ Pincel
+ Cor
+ Tamaño
+ Dureza
+ Á Front
+ Borrar
+ Cor do Pincel
Editor
- Close Editor?
- Do you really want to discard the image?
- Yes
- No
- Cancel
- Accept
- Save
- Exporting image…
- Exporting image %s.
- Flip H
- Flip V
- Undo
- Redo
- Color Picker
- Transparent
- White
- Gray
- Black
- Light blue
- Blue
- Purple
- Orchid
- Pink
- Red
- Orange
- Gold
- Yellow
- Olive
- Green
+ Pechar o Editor?
+ Ten a certeza de desbotar a imaxe?
+ Si
+ Non
+ Cancelar
+ Aceptar
+ Gardar
+ Exportando imaxe…
+ Exportando imaxe %s.
+ Volteo H
+ Volteo V
+ Desfacer
+ Refacer
+ Escolla de Cor
+ Transparente
+ Branco
+ Gris
+ Negro
+ Azul claro
+ Azul
+ Púrpura
+ Rosa brillante
+ Rosa
+ Vermello
+ Laranxa
+ Dourado
+ Amarelo
+ Verde oliva
+ Verde
Aquamarin
Pipettable color
@@ -291,7 +292,7 @@
Cómo podo facer que un álbume apareza sempre arriba de todo?
Pode manter premido o álbume e escoller a icona de Fixar no menú de accións, esto fixarao arriba. Pode fixar varios cartafoles tambén, os elementos fixados estarán ordenados polo criterio por omisión.
Cómo podo aumentar a velocidade de reprodución de vídeo?
- You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.
+ Pode facelo tocando dúas veces o lateral da pantalla, ou tocando os textos de duración máxima ou actual preto da barra de avance. Se activa abrir os vídeos nunha pantalla separada, tamén pode usar xestos horizontais.
Cal é a diferenza entre agochar e excluír un cartafol?
A Exclusión prevén que se mostre o cartafol só en Simple Gallery, mentras Agochar funciona para todo o sistema e agocha o cartafol para outras galerías tamén. Esto funciona creando un ficheiro baldeiro de nome \".nomedia\" no cartafol, que tamén pode quitar con calquer xestor de ficheiros. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.
Por qué aparecen cartafoles de música con portadas ou pegatinas?
@@ -301,18 +302,18 @@
E qué pasa si só quero que sexan visibles certos cartafoles
Engadir un cartafol a Cartafoles incluídos non exclúe nada de xeito automático. O que pode facer é ir a Axustes -> Xestionar cartafoles incluídos, excluír o cartafol root \"/\", e despóis engadir os cartafoles desexados con Axustes -> Xestionar Cartafoles Incluídos.
Esto fará visibles só aos cartafoles escollidos, como tanto excluír e incluír son recursivos e si está excluído e logo incluído, será mostrado.
- Can I crop images with this app?
- Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.
- Can I somehow group media file thumbnails?
- Sure, just use the \"Group by\" menu item while at the thumbnails view. You can group files by multiple criteria, including Date Taken. If you use the \"Show all folders content\" function you can group them by folders too.
- Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?
- It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".
- I see some color banding on the images. How can I improve the quality?
- The current solution for displaying images works fine in the vast majority of cases, but if you want even better image quality, you can enable the \"Show images in the highest possible quality\" at the app settings, in the \"Deep zoomable images\" section.
- I have hidden a file/folder. How can I unhide it?
- You can either press the \"Temporarily show hidden items\" menu item at the main screen, or toggle \"Show hidden items\" in the app settings to see the hidden item. If you want to unhide it, just long press it and select \"Unhide\". Folders are hidden by adding a hidden \".nomedia\" file into them, you can delete the file with any file manager too.
- Why does the app take up so much space?
- App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days.
+ Podo recortar imaxes con esta aplicación?
+ Si, pode recortar imaxes no editor, arrastrando as esquinas das imaxes. Pode chegar ao editor tanto presionando na imaxe durante un anaco e seleccionando Editar, ou seleccionando Editar dende a vista de pantalla completa.
+ Podo agrupar as iconas de algún xeito?
+ Claro, use no menu \"Agrupar por\" na vista de iconas. Pode facelo por múltiples criterios, incluindo a data de captura. Se usa a función \"Mostrar o contido dos cartafoles\", tamén pode agruparlos por cartafoles.
+ Semella que Ordenar por Data non está a funcionar, como o amaño?
+ Seguramente foi causa de copiar os ficheiros de algures. Pode amañalo seleccionando as iconas e \"Arranxar o valor da Data de Captura\".
+ Vexo bandas de cor nas imaxes. Como podo mellorar a súa calidade?
+ A solución actual de mostra das imaxes funciona ben na maioría dos casos, pero se desexa unha calidade maior, active \"Mostrar imaxes na máxima calidade posible\" na configuración, na sección \"Imaxes con moita ampliación\".
+ Teño un ficheiro ou cartafol oculto. Como o amoso?
+ Pode ou ben activar \"Mostrar temporalmente ficheiros agochados\" no menu principal, ou activar \"Amosar obxectos ocultos\" na configuración. Se quere amosalo sempre, pode presionar uns intres e seleccionar \"Amosar\". Os cartafoles agóchanse engadindo un ficheiro oculto \".nomedia\" no seu interior; tamén pode borrar ese ficheiro con calquera xestor de ficheiros.
+ Por que consume tanto espacio esta aplicación?
+ Os ficheiros temporais poden chegar aos 250MB e server para cargar máis rápido. Se a aplicación está a consumir máis espazo, o máis probable é que teña ficheiros nam Papeleira de Reciclaxe. Estes ficheiros contan no tamaño da aplicación. Pode baleirala abríndoa e borrando os ficheiros, ou dende a configuración. Cada ficheiro da Papeleira bórrase automáticamente tras 30 días.
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 268b17aba..791ccca05 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -189,6 +189,7 @@
Compromise
Avoid showing invalid files
Show image file types
+ Allow zooming videos with double tapping them
Sličice
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index a19a97886..6f58b1bbf 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -1,4 +1,4 @@
-
+
Simple Gallery
Galéria
@@ -20,7 +20,7 @@
Borítókép változtatása
Válasszon fotót
Hangerő
- Fényerő
+ Fényesség
Tájolás zárolása
Tájolás feloldása
Tájolás változtatása
@@ -80,7 +80,7 @@
Forgatás
Érvénytelen kép elérési útvonal
Sikertelen kép szerkesztés
- Image editing cancelled
+ A képszerkesztés megszakítva
A fájl szerkesztése sikerült
Kép szerkesztés ezzel:
Nem található kép szerkesztő
@@ -92,12 +92,9 @@
Tükrözés
Tükrözés vízszintesen
Tükrözés függőlegesen
- Szabad
+ Szabad
+ Egyéb
-
- Egyéb
-
-
Simple Wallpaper
Beállítás háttérképként
@@ -192,6 +189,7 @@
Kiegyensúlyozott
Kerülje az érvénytelen fájlok mutatását
Mutassa a kép fájl típusokat
+ Allow zooming videos with double tapping them
Miniatűrök
@@ -207,7 +205,7 @@
Egyéni
Alaphelyzetbe
- Square
+ Négyzet
Transform
Szűrő
Nincs
@@ -215,7 +213,7 @@
Árnyékok
Exposure
Highlights
- Fényesség
+ Fényerő
Kontraszt
Színtelítettség
Világosság
@@ -378,6 +376,7 @@ Ezzel csak a kiválasztott mappák láthatók, mivel a kizárás és a befoglal
Reddit:
https://www.reddit.com/r/SimpleMobileTools
+
Thumbnail
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 551518bb2..78a0371b9 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -189,6 +189,7 @@
Kompromi
Hindari menampilkan berkas yang tidak valid
Tampilkan tipe berkas gambar
+ Allow zooming videos with double tapping them
Thumbnail
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index a256242d3..4ff38eea8 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -189,6 +189,7 @@
Compromesso
Evita di mostrare file non validi
Mostra i tipi di file immagine
+ Allow zooming videos with double tapping them
Anteprime
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 0c3136efb..3e23a8359 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -189,6 +189,7 @@
Compromise
Avoid showing invalid files
Show image file types
+ Allow zooming videos with double tapping them
サムネイル設定
diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml
index d89965a64..e5d6b2bcc 100644
--- a/app/src/main/res/values-ko-rKR/strings.xml
+++ b/app/src/main/res/values-ko-rKR/strings.xml
@@ -189,6 +189,7 @@
균형
잘못된 파일 보이지 않기
사진 파일 종류 표시
+ Allow zooming videos with double tapping them
섬네일
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index aea953c84..3af9c6ee8 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -189,6 +189,7 @@
Compromise
Avoid showing invalid files
Show image file types
+ Allow zooming videos with double tapping them
Miniatiūros
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 2bde23e73..fc2b8a968 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -189,6 +189,7 @@
Kompromiss
Unngå visning av ugyldige filer
Vis bildefiltyper
+ Allow zooming videos with double tapping them
Minibilder
diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml
index 9316bd49f..bbe309c2c 100644
--- a/app/src/main/res/values-ne/strings.xml
+++ b/app/src/main/res/values-ne/strings.xml
@@ -189,6 +189,7 @@
Compromise
Avoid showing invalid files
तस्बिरको फाईल किसिम देखाउनुहोस
+ Allow zooming videos with double tapping them
Thumbnails
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index e2673cd7d..212416f44 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -189,6 +189,7 @@
Compromis
Ongeldige bestanden verbergen
Bestandstypen tonen
+ Allow zooming videos with double tapping them
Miniatuurvoorbeelden
@@ -293,7 +294,7 @@
Hoe kan ik terug- of vooruitspoelen in video’s?
Dubbelklik op de zijkant van het scherm, of tik op de cijfers die de voortgang of de lengte van de video weergeven om resp. terug of vooruit te springen. Als de instelling om video\'s in een apart scherm te openen is ingeschakeld, dan kunnen ook horizontale veeggebaren worden gebruikt.
Wat is het verschil tussen het verbergen en het uitsluiten van mappen?
- Met \"Uitsluiten\" wordt het tonen van de map alleen binnen deze app voorkomen, terwijl \"Verbergen\" de map ook zal verbergen voor andere galerij-apps. Met \"Verbergen\" wordt een bestand genaamd \".nomedia\" in de te verbergen map aangemaakt (het verwijderen van dit bestand uit de map maakt het verbergen ongedaan). Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.
+ Met \"Uitsluiten\" wordt het tonen van de map alleen binnen deze app voorkomen, terwijl \"Verbergen\" de map ook zal verbergen voor andere galerij-apps. Met \"Verbergen\" wordt een bestand genaamd \".nomedia\" in de te verbergen map aangemaakt (het verwijderen van dit bestand uit de map maakt het verbergen ongedaan). Op sommige apparaten is het echter niet mogelijk om specifieke mappen, zoals Camera, Screenshots en Downloads, te verbergen.
Waarom zie ik mappen met stickers of covers van muziekalbums?
Soms worden er wat ongebruikelijke afbeeldingen van andere apps getoond. Deze zijn gemakkelijk uit het overzicht te halen door lang te drukken op de map en vervolgens te kiezen voor \"Uitsluiten\". In het daaropvolgende venster is ook de bovenliggende map te kiezen; dit zou het tonen van soortgelijke ongewenste items kunnen voorkomen.
Een bepaalde map met afbeeldingen wordt niet getoond. Wat kan ik doen?
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 1fdc0f456..53cf557e2 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -189,6 +189,7 @@
Kompromis
Unikaj pokazywania niewłaściwych plików
Pokazuj rozszerzenia zdjęć
+ Allow zooming videos with double tapping them
Miniatury
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index eedcd71f4..06c052feb 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -189,6 +189,7 @@
Meio termo
Evitar a exibição de arquivos inválidos
Exibir tipos de arquivo de imagem
+ Allow zooming videos with double tapping them
Miniaturas
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index da94ecd5b..33f0306fd 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -189,6 +189,7 @@
Qualidade
Não mostrar ficheiros inválidos
Mostrar o tipo de imagem
+ Allow zooming videos with double tapping them
Miniaturas
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 467d57d4d..a096930d9 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -189,6 +189,7 @@
Компромисс
Пропускать файлы с ошибками
Показывать типы файлов изображений
+ Allow zooming videos with double tapping them
Миниатюры
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index e8a835b0f..f27104046 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -189,6 +189,7 @@
Kompromis
Nezobrazovať neplatné súbory
Zobraziť typ obrázkových súborov
+ Povoliť približovanie videí dvojitým ťuknutím
Náhľady
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index a4a8f4c11..e8ce195da 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -189,6 +189,7 @@
Kompromis
Izogni se prikazovanju napačnih datotek
Show image file types
+ Allow zooming videos with double tapping them
Sličice
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index f1313700f..83d4cbffd 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -189,6 +189,7 @@
Компромис
Не приказуј оштећене датотеке
Show image file types
+ Allow zooming videos with double tapping them
Сличице
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 456a94d2d..885d15451 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -189,6 +189,7 @@
Compromise
Avoid showing invalid files
Show image file types
+ Allow zooming videos with double tapping them
Miniatyrer
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index b5a5d49b8..4ec982e38 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -189,6 +189,7 @@
Ödünsüz
Geçersiz dosyaları göstermekten kaçın
Resim dosyası türlerini göster
+ Allow zooming videos with double tapping them
Küçük resimler
@@ -293,7 +294,7 @@
Videoları nasıl hızlıca ileri sarabilirim?
Ekranın yan tarafına iki kez dokunarak veya arama çubuğunun yanındaki geçerli veya maksimum süre metinlerine dokunarak bunu yapabilirsiniz. Videoları uygulama ayarlarından ayrı bir ekranda açmayı etkinleştirirseniz yatay hareketleri de kullanabilirsiniz.
Klasörün gizlenmesi ve hariç tutulması arasındaki fark nedir?
- Hariç tut, klasörü yalnızca Basit Galeri\'de görüntülemeyi engellerken, Gizle sistem genelinde çalışır ve klasörü diğer galerilerden de gizler. Verilen klasörde boş bir \".nomedia\" dosyası oluşturarak çalışır, daha sonra herhangi bir dosya yöneticisi ile kaldırabilirsiniz. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.
+ Hariç tut, klasörü yalnızca Basit Galeri\'de görüntülemeyi engellerken, Gizle sistem genelinde çalışır ve klasörü diğer galerilerden de gizler. Verilen klasörde boş bir \".nomedia\" dosyası oluşturarak çalışır, daha sonra herhangi bir dosya yöneticisi ile kaldırabilirsiniz. Bazı cihazların Kamera, Ekran Görüntüleri ve İndirilenler gibi klasörlerin gizlenmesine izin vermediğini unutmayın.
Neden albüm resimlerini içeren klasörler görünüyor?
Bazı olağandışı albümlerin ortaya çıktığını göreceksiniz. Onları uzun süre basarak ve Hariç tut\'u seçerek kolayca hariç tutabilirsiniz. Bir sonraki iletişim kutusunda, üst klasörü seçebilirsiniz, ancak diğer ilgili albümlerin de gösterilmesini önleyecektir.
Resimler içeren bir klasör görünmüyor, ne yapabilirim?
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 759dbc849..4bddcc824 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -189,6 +189,7 @@
Компроміс
Запобігати показу пошкоджених файлів
Показувати типи файлів зображень
+ Allow zooming videos with double tapping them
Ескізи
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index b03d4bc6f..a5355a365 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -189,6 +189,7 @@
Thỏa hiệp
Tránh hiển thị các tệp không hợp lệ
Hiển thị các loại tệp hình ảnh
+ Allow zooming videos with double tapping them
Hình thu nhỏ
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 4e4bfd448..2a995dc06 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -189,6 +189,7 @@
折中
避免显示无效的文件
显示图片文件类型
+ Allow zooming videos with double tapping them
缩略图
@@ -292,7 +293,7 @@
如何快进/快退视频?
您可以双击屏幕边缘或点击搜索栏附近的当前或总时长的文字。 如果您在应用设置中启用了在独立页面播放视频,则也可以使用水平手势。
文件夹的隐藏和排除有什么区别?
- 排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,你可以使用任何文件管理器删除它。Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.
+ 排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,你可以使用任何文件管理器删除它。请注意,某些设备不允许隐藏\"Camera\",\"Screenshots\"和\"Downloads\"等文件夹。
为什么会出现音乐艺术家封面或贴纸文件夹?
你可能会看到一些不寻常的相册出现。你可以通过长按它们并选择“排除”来排除它们。在之后的对话框中,你可以选择父文件夹,这样也许就会阻止其他相关的相册出现。
有的图片文件夹没有显示,怎么回事?
@@ -364,7 +365,7 @@
查看简约系列的所有应用:
https://www.simplemobiletools.com
- 简约图库 Pro的独立网站:
+ 简约图库 Pro 的独立网站:
https://www.simplemobiletools.com/gallery
Facebook:
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index b759be2e0..0e322d4d2 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -189,6 +189,7 @@
折衷
避免顯示無效的檔案
Show image file types
+ Allow zooming videos with double tapping them
縮圖
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 8b212341e..c3d2593a0 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -189,6 +189,7 @@
妥協
避免顯示無效的檔案
顯示圖片檔案類型
+ Allow zooming videos with double tapping them
縮圖
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ddf7f34e1..6b9af0098 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -189,6 +189,7 @@
Compromise
Avoid showing invalid files
Show image file types
+ Allow zooming videos with double tapping them
Thumbnails
diff --git a/build.gradle b/build.gradle
index 7c3d47b8e..bdcacf2cc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -13,10 +13,10 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.6.2'
+ classpath 'com.android.tools.build:gradle:3.6.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
if (is_proprietary) {
- classpath 'ly.img.android.pesdk:plugin:7.2.0'
+ classpath 'ly.img.android.pesdk:plugin:7.2.2'
}
// NOTE: Do not place your application dependencies here; they belong
diff --git a/fastlane/metadata/android/en-US/changelogs/302.txt b/fastlane/metadata/android/en-US/changelogs/302.txt
new file mode 100644
index 000000000..7e687a795
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/302.txt
@@ -0,0 +1,6 @@
+ * Fixed some Photo Editor bugs
+ * Properly handle locked folders at opening from widgets and shortcuts
+ * Open the map at clicking the coordinates at the Properties window
+ * Properly sort items at the Other Folder dialog at copy/move
+ * Fixed some folder un/hiding related glitches
+ * A couple other translation and UX improvements
diff --git a/fastlane/metadata/android/en-US/changelogs/303.txt b/fastlane/metadata/android/en-US/changelogs/303.txt
new file mode 100644
index 000000000..c18baadc7
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/303.txt
@@ -0,0 +1,3 @@
+ * Use the selected date format grouped thumbnail section titles too
+ * Fixed a glitch related to locked folders asking authentication too often
+ * Refresh the UI here and there a bit
diff --git a/fastlane/metadata/android/en-US/changelogs/305.txt b/fastlane/metadata/android/en-US/changelogs/305.txt
new file mode 100644
index 000000000..f0b9651e1
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/305.txt
@@ -0,0 +1,4 @@
+ * Improved the performance on multiple places
+ * Removed some unnecessary permissions added recently
+ * Fixed some photo editor glitches
+ * Show Portrait images by default only on Android 9+
diff --git a/fastlane/metadata/android/en-US/changelogs/306.txt b/fastlane/metadata/android/en-US/changelogs/306.txt
new file mode 100644
index 000000000..777329cff
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/306.txt
@@ -0,0 +1,2 @@
+ * Disable Portrait photo showing by default, until it gets improved
+ * Added a couple other performance improvements here and there
diff --git a/fastlane/metadata/android/en-US/changelogs/307.txt b/fastlane/metadata/android/en-US/changelogs/307.txt
new file mode 100644
index 000000000..c04bf610a
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/307.txt
@@ -0,0 +1 @@
+ * Added a few more stability and performance improvements
diff --git a/fastlane/metadata/android/en-US/changelogs/308.txt b/fastlane/metadata/android/en-US/changelogs/308.txt
new file mode 100644
index 000000000..50ef5a7fd
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/308.txt
@@ -0,0 +1,4 @@
+ * Fixed a glitch with some favorite items disappearing
+ * Improve folder hiding, add the new .nomedia file into MediaStore
+ * Improve the performance of getting video file duration
+ * A few other improvements here and there
diff --git a/fastlane/metadata/android/en-US/changelogs/309.txt b/fastlane/metadata/android/en-US/changelogs/309.txt
new file mode 100644
index 000000000..4e56a31f9
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/309.txt
@@ -0,0 +1 @@
+ * Added some crashfixes