diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1484fbfc..f789d7bb4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,28 @@
Changelog
==========
+Version 3.2.2 *(2018-01-09)*
+----------------------------
+
+ * Some scrolling issues fixed
+ * Improve new media file discovery
+
+Version 3.2.1 *(2018-01-08)*
+----------------------------
+
+ * Adding a crashfix
+ * Couple scrollbar glitch fixes
+
+Version 3.2.0 *(2018-01-07)*
+----------------------------
+
+ * Rewrote scrolling to improve the performance
+ * Disable "Delete empty folders" by default
+ * Added initial Search to media thumbnails screen
+ * Apply the hidden folder password protection to "Manage hidden folders"
+ * Replace Move with Copy/Delete on Android 7+
+ * Improve SD card file support
+
Version 3.1.2 *(2017-12-30)*
----------------------------
diff --git a/app/build.gradle b/app/build.gradle
index 3c49e690e..f27660636 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
applicationId "com.simplemobiletools.gallery"
minSdkVersion 16
targetSdkVersion 27
- versionCode 152
- versionName "3.1.2"
+ versionCode 155
+ versionName "3.2.2"
multiDexEnabled true
setProperty("archivesBaseName", "gallery")
}
@@ -42,8 +42,7 @@ ext {
}
dependencies {
- implementation 'com.simplemobiletools:commons:3.5.0'
- implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.9.0'
+ implementation 'com.simplemobiletools:commons:3.6.15'
implementation 'com.theartofdev.edmodo:android-image-cropper:2.6.0'
implementation 'com.android.support:multidex:1.0.2'
implementation 'com.google.code.gson:gson:2.8.2'
@@ -51,6 +50,9 @@ dependencies {
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.8'
implementation 'com.github.chrisbanes:PhotoView:2.1.3'
+ //implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.9.0'
+ implementation 'com.github.tibbi:subsampling-scale-image-view:v3.9.0-fork'
+
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion"
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4c50f0162..c49d7cf4d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -55,7 +55,17 @@
+ android:parentActivityName=".activities.MainActivity">
+
+
+
+
+
+
+
+
, isFromCache: Boolean) {
- Thread {
- mLatestMediaId = getLatestMediaId()
- }.start()
+ if (!isFromCache) {
+ Thread {
+ mLatestMediaId = getLatestMediaId()
+ }.start()
+ }
val dirs = getSortedDirectories(newDirs)
directories_refresh_layout.isRefreshing = false
@@ -533,6 +541,11 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
directories_empty_text_label.beVisibleIf(dirs.isEmpty() && !isFromCache)
directories_empty_text.beVisibleIf(dirs.isEmpty() && !isFromCache)
+ directories_grid.beVisibleIf(directories_empty_text_label.isGone())
+
+ val allowHorizontalScroll = config.scrollHorizontally && config.viewTypeFiles == VIEW_TYPE_GRID
+ directories_vertical_fastscroller.beVisibleIf(directories_grid.isVisible() && !allowHorizontalScroll)
+ directories_horizontal_fastscroller.beVisibleIf(directories_grid.isVisible() && allowHorizontalScroll)
checkLastMediaChanged()
if (dirs.hashCode() == mDirs.hashCode()) {
@@ -559,7 +572,8 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
val currAdapter = directories_grid.adapter
if (currAdapter == null) {
initZoomListener()
- DirectoryAdapter(this, mDirs, this, directories_grid, isPickIntent(intent) || isGetAnyContentIntent(intent)) {
+ val fastscroller = if (config.scrollHorizontally) directories_horizontal_fastscroller else directories_vertical_fastscroller
+ DirectoryAdapter(this, mDirs, this, directories_grid, isPickIntent(intent) || isGetAnyContentIntent(intent), fastscroller) {
itemClicked((it as Directory).path)
}.apply {
setupZoomListener(mZoomListener)
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt
index 5f0ab42fa..e4aaa8ad2 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt
@@ -1,13 +1,17 @@
package com.simplemobiletools.gallery.activities
import android.app.Activity
+import android.app.SearchManager
import android.app.WallpaperManager
+import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.os.Handler
+import android.support.v4.view.MenuItemCompat
import android.support.v7.widget.GridLayoutManager
+import android.support.v7.widget.SearchView
import android.view.Menu
import android.view.MenuItem
import android.view.ViewGroup
@@ -60,6 +64,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
private var mLastMediaHandler = Handler()
private var mCurrAsyncTask: GetMediaAsynctask? = null
private var mZoomListener: MyRecyclerView.MyZoomListener? = null
+ private var mSearchMenuItem: MenuItem? = null
companion object {
var mMedia = ArrayList()
@@ -130,6 +135,13 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
}
}
+ override fun onStop() {
+ super.onStop()
+ if (mSearchMenuItem != null) {
+ MenuItemCompat.collapseActionView(mSearchMenuItem)
+ }
+ }
+
override fun onDestroy() {
super.onDestroy()
if (config.showAll)
@@ -138,6 +150,53 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
mMedia.clear()
}
+ override fun onCreateOptionsMenu(menu: Menu): Boolean {
+ menuInflater.inflate(R.menu.menu_media, menu)
+
+ val isFolderHidden = File(mPath).containsNoMedia()
+ menu.apply {
+ findItem(R.id.hide_folder).isVisible = !isFolderHidden && !mShowAll
+ findItem(R.id.unhide_folder).isVisible = isFolderHidden && !mShowAll
+
+ findItem(R.id.folder_view).isVisible = mShowAll
+ findItem(R.id.open_camera).isVisible = mShowAll
+ findItem(R.id.about).isVisible = mShowAll
+
+ findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
+ findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden
+
+ findItem(R.id.increase_column_count).isVisible = config.viewTypeFiles == VIEW_TYPE_GRID && config.mediaColumnCnt < MAX_COLUMN_COUNT
+ findItem(R.id.reduce_column_count).isVisible = config.viewTypeFiles == VIEW_TYPE_GRID && config.mediaColumnCnt > 1
+
+ findItem(R.id.toggle_filename).isVisible = config.viewTypeFiles == VIEW_TYPE_GRID
+ }
+
+ setupSearch(menu)
+ return true
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ R.id.sort -> showSortingDialog()
+ R.id.filter -> showFilterMediaDialog()
+ R.id.toggle_filename -> toggleFilenameVisibility()
+ R.id.open_camera -> launchCamera()
+ R.id.folder_view -> switchToFolderView()
+ R.id.change_view_type -> changeViewType()
+ R.id.hide_folder -> tryHideFolder()
+ R.id.unhide_folder -> unhideFolder()
+ R.id.exclude_folder -> tryExcludeFolder()
+ R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden()
+ R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden()
+ R.id.increase_column_count -> increaseColumnCount()
+ R.id.reduce_column_count -> reduceColumnCount()
+ R.id.settings -> launchSettings()
+ R.id.about -> launchAbout()
+ else -> return super.onOptionsItemSelected(item)
+ }
+ return true
+ }
+
private fun storeStateVariables() {
config.apply {
mStoredUseEnglish = useEnglish
@@ -150,6 +209,33 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
}
}
+ private fun setupSearch(menu: Menu) {
+ val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
+ mSearchMenuItem = menu.findItem(R.id.search)
+ (mSearchMenuItem!!.actionView as SearchView).apply {
+ setSearchableInfo(searchManager.getSearchableInfo(componentName))
+ isSubmitButtonEnabled = false
+ setOnQueryTextListener(object : SearchView.OnQueryTextListener {
+ override fun onQueryTextSubmit(query: String) = false
+
+ override fun onQueryTextChange(newText: String): Boolean {
+ searchQueryChanged(newText)
+ return true
+ }
+ })
+ }
+ }
+
+ private fun searchQueryChanged(text: String) {
+ Thread {
+ val filtered = mMedia.filter { it.name.contains(text, true) } as ArrayList
+ filtered.sortBy { !it.name.startsWith(text, true) }
+ runOnUiThread {
+ (media_grid.adapter as? MediaAdapter)?.updateMedia(filtered)
+ }
+ }.start()
+ }
+
private fun tryloadGallery() {
handlePermission(PERMISSION_WRITE_STORAGE) {
if (it) {
@@ -176,13 +262,15 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
}
private fun setupAdapter() {
- if (isDirEmpty())
+ if (isDirEmpty()) {
return
+ }
val currAdapter = media_grid.adapter
if (currAdapter == null) {
initZoomListener()
- MediaAdapter(this, mMedia, this, mIsGetImageIntent || mIsGetVideoIntent || mIsGetAnyIntent, mAllowPickingMultiple, media_grid) {
+ val fastscroller = if (config.scrollHorizontally) media_horizontal_fastscroller else media_vertical_fastscroller
+ MediaAdapter(this, mMedia, this, mIsGetImageIntent || mIsGetVideoIntent || mIsGetAnyIntent, mAllowPickingMultiple, media_grid, fastscroller) {
itemClicked((it as Medium).path)
}.apply {
setupZoomListener(mZoomListener)
@@ -238,52 +326,6 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
}, LAST_MEDIA_CHECK_PERIOD)
}
- override fun onCreateOptionsMenu(menu: Menu): Boolean {
- menuInflater.inflate(R.menu.menu_media, menu)
-
- val isFolderHidden = File(mPath).containsNoMedia()
- menu.apply {
- findItem(R.id.hide_folder).isVisible = !isFolderHidden && !mShowAll
- findItem(R.id.unhide_folder).isVisible = isFolderHidden && !mShowAll
-
- findItem(R.id.folder_view).isVisible = mShowAll
- findItem(R.id.open_camera).isVisible = mShowAll
- findItem(R.id.about).isVisible = mShowAll
-
- findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
- findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden
-
- findItem(R.id.increase_column_count).isVisible = config.viewTypeFiles == VIEW_TYPE_GRID && config.mediaColumnCnt < MAX_COLUMN_COUNT
- findItem(R.id.reduce_column_count).isVisible = config.viewTypeFiles == VIEW_TYPE_GRID && config.mediaColumnCnt > 1
-
- findItem(R.id.toggle_filename).isVisible = config.viewTypeFiles == VIEW_TYPE_GRID
- }
-
- return true
- }
-
- override fun onOptionsItemSelected(item: MenuItem): Boolean {
- when (item.itemId) {
- R.id.sort -> showSortingDialog()
- R.id.filter -> showFilterMediaDialog()
- R.id.toggle_filename -> toggleFilenameVisibility()
- R.id.open_camera -> launchCamera()
- R.id.folder_view -> switchToFolderView()
- R.id.change_view_type -> changeViewType()
- R.id.hide_folder -> tryHideFolder()
- R.id.unhide_folder -> unhideFolder()
- R.id.exclude_folder -> tryExcludeFolder()
- R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden()
- R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden()
- R.id.increase_column_count -> increaseColumnCount()
- R.id.reduce_column_count -> reduceColumnCount()
- R.id.settings -> launchSettings()
- R.id.about -> launchAbout()
- else -> return super.onOptionsItemSelected(item)
- }
- return true
- }
-
private fun showSortingDialog() {
ChangeSortingDialog(this, false, !config.showAll, mPath) {
getMedia()
@@ -367,8 +409,9 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
}
private fun getMedia() {
- if (mIsGettingMedia)
+ if (mIsGettingMedia) {
return
+ }
mIsGettingMedia = true
val media = getCachedMedia(mPath)
@@ -466,12 +509,16 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
}
private fun increaseColumnCount() {
+ media_vertical_fastscroller.measureRecyclerViewOnRedraw()
+ media_horizontal_fastscroller.measureRecyclerViewOnRedraw()
config.mediaColumnCnt = ++(media_grid.layoutManager as GridLayoutManager).spanCount
invalidateOptionsMenu()
media_grid.adapter?.notifyDataSetChanged()
}
private fun reduceColumnCount() {
+ media_vertical_fastscroller.measureRecyclerViewOnRedraw()
+ media_horizontal_fastscroller.measureRecyclerViewOnRedraw()
config.mediaColumnCnt = --(media_grid.layoutManager as GridLayoutManager).spanCount
invalidateOptionsMenu()
media_grid.adapter?.notifyDataSetChanged()
@@ -506,12 +553,11 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
.load(File(path))
.apply(options)
.into(object : SimpleTarget() {
- override fun onResourceReady(resource: Bitmap?, transition: Transition?) {
+ override fun onResourceReady(resource: Bitmap, transition: Transition?) {
try {
WallpaperManager.getInstance(applicationContext).setBitmap(resource)
setResult(Activity.RESULT_OK)
} catch (ignored: IOException) {
-
}
finish()
@@ -548,13 +594,17 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
media_empty_text_label.beVisibleIf(media.isEmpty() && !isFromCache)
media_empty_text.beVisibleIf(media.isEmpty() && !isFromCache)
+ media_grid.beVisibleIf(media_empty_text_label.isGone())
+
+ val allowHorizontalScroll = config.scrollHorizontally && config.viewTypeFiles == VIEW_TYPE_GRID
+ media_vertical_fastscroller.beVisibleIf(media_grid.isVisible() && !allowHorizontalScroll)
+ media_horizontal_fastscroller.beVisibleIf(media_grid.isVisible() && allowHorizontalScroll)
checkLastMediaChanged()
- if (mLastDrawnHashCode == 0)
- mLastDrawnHashCode = media.hashCode()
- if (media.hashCode() == mMedia.hashCode() && media.hashCode() == mLastDrawnHashCode)
+ if (media.hashCode() == mMedia.hashCode() && media.hashCode() == mLastDrawnHashCode) {
return
+ }
mLastDrawnHashCode = media.hashCode()
mMedia = media
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt
index 18cbad383..6a32c732a 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt
@@ -39,7 +39,7 @@ class SettingsActivity : SimpleActivity() {
setupManageIncludedFolders()
setupManageExcludedFolders()
setupManageHiddenFolders()
- setupShowHiddenFolders()
+ setupShowHiddenItems()
setupAutoplayVideos()
setupLoopVideos()
setupAnimateGifs()
@@ -92,26 +92,28 @@ class SettingsActivity : SimpleActivity() {
private fun setupManageHiddenFolders() {
settings_manage_hidden_folders_holder.setOnClickListener {
- startActivity(Intent(this, HiddenFoldersActivity::class.java))
+ handleHiddenFolderPasswordProtection {
+ startActivity(Intent(this, HiddenFoldersActivity::class.java))
+ }
}
}
- private fun setupShowHiddenFolders() {
- settings_show_hidden_folders.isChecked = config.showHiddenMedia
- settings_show_hidden_folders_holder.setOnClickListener {
+ private fun setupShowHiddenItems() {
+ settings_show_hidden_items.isChecked = config.showHiddenMedia
+ settings_show_hidden_items_holder.setOnClickListener {
if (config.showHiddenMedia) {
- toggleHiddenFolders()
+ toggleHiddenItems()
} else {
handleHiddenFolderPasswordProtection {
- toggleHiddenFolders()
+ toggleHiddenItems()
}
}
}
}
- private fun toggleHiddenFolders() {
- settings_show_hidden_folders.toggle()
- config.showHiddenMedia = settings_show_hidden_folders.isChecked
+ private fun toggleHiddenItems() {
+ settings_show_hidden_items.toggle()
+ config.showHiddenMedia = settings_show_hidden_items.isChecked
}
private fun setupAutoplayVideos() {
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/ViewPagerActivity.kt
index 84fd594f8..348b78881 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/ViewPagerActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/ViewPagerActivity.kt
@@ -177,6 +177,13 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
return
}
+ val file = File(mPath)
+ if (!file.exists()) {
+ deleteFromMediaStore(file)
+ finish()
+ return
+ }
+
if (intent.extras?.containsKey(IS_VIEW_INTENT) == true) {
if (isShowHiddenFlagNeeded()) {
if (!config.isPasswordProtectionOn) {
@@ -189,7 +196,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
showSystemUI()
- mDirectory = File(mPath).parent
+ mDirectory = file.parent
supportActionBar?.title = mPath.getFilenameFromPath()
view_pager.onGlobalLayout {
@@ -679,7 +686,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
} else {
- toast(R.string.no_map_application)
+ toast(R.string.no_app_found)
}
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt
index a8ee3f75f..e1e0def89 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt
@@ -11,6 +11,7 @@ import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.PropertiesDialog
import com.simplemobiletools.commons.dialogs.RenameItemDialog
import com.simplemobiletools.commons.extensions.*
+import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.dialogs.ExcludeFolderDialog
@@ -24,7 +25,8 @@ import java.io.File
import java.util.*
class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: MutableList, val listener: DirOperationsListener?, recyclerView: MyRecyclerView,
- val isPickIntent: Boolean, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
+ val isPickIntent: Boolean, fastScroller: FastScroller? = null, itemClick: (Any) -> Unit) :
+ MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
private val config = activity.config
private val isListViewType = config.viewTypeFolders == VIEW_TYPE_LIST
@@ -92,7 +94,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: MutableList, val isShowingExcludedFolders: Boolean, val listener: RefreshRecyclerViewListener?,
- recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
+ recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) {
private val config = activity.config
- override fun getActionMenuId() = R.menu.cab_delete_only
+ override fun getActionMenuId() = R.menu.cab_remove_only
override fun prepareActionMode(menu: Menu) {}
@@ -30,7 +29,7 @@ class ManageFoldersAdapter(activity: BaseSimpleActivity, var folders: ArrayList<
override fun actionItemPressed(id: Int) {
when (id) {
- R.id.cab_delete -> askConfirmDelete()
+ R.id.cab_remove -> removeSelection()
}
}
@@ -57,13 +56,7 @@ class ManageFoldersAdapter(activity: BaseSimpleActivity, var folders: ArrayList<
}
}
- private fun askConfirmDelete() {
- ConfirmationDialog(activity) {
- deleteSelection()
- }
- }
-
- private fun deleteSelection() {
+ private fun removeSelection() {
val removeFolders = ArrayList(selectedPositions.size)
selectedPositions.sortedDescending().forEach {
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/ManageHiddenFoldersAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/ManageHiddenFoldersAdapter.kt
index 4126a5c21..8bc51ea3a 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/ManageHiddenFoldersAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/ManageHiddenFoldersAdapter.kt
@@ -16,7 +16,7 @@ import java.io.File
import java.util.*
class ManageHiddenFoldersAdapter(activity: BaseSimpleActivity, var folders: ArrayList, val listener: RefreshRecyclerViewListener?,
- recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
+ recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) {
private val config = activity.config
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/MediaAdapter.kt
index f2c3dfb17..66df85b70 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/MediaAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/MediaAdapter.kt
@@ -1,6 +1,8 @@
package com.simplemobiletools.gallery.adapters
import android.net.Uri
+import android.os.Handler
+import android.os.Looper
import android.view.Menu
import android.view.View
import android.view.ViewGroup
@@ -12,28 +14,40 @@ import com.simplemobiletools.commons.dialogs.RenameItemDialog
import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.extensions.isActivityDestroyed
+import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.dialogs.DeleteWithRememberDialog
import com.simplemobiletools.gallery.extensions.*
import com.simplemobiletools.gallery.helpers.VIEW_TYPE_LIST
import com.simplemobiletools.gallery.models.Medium
-import kotlinx.android.synthetic.main.photo_video_item_list.view.*
+import kotlinx.android.synthetic.main.photo_video_item_grid.view.*
import java.io.File
import java.util.*
class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList, val listener: MediaOperationsListener?, val isAGetIntent: Boolean,
- val allowMultiplePicks: Boolean, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
+ val allowMultiplePicks: Boolean, recyclerView: MyRecyclerView, fastScroller: FastScroller? = null,
+ itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
+
+ private val INSTANT_LOAD_DURATION = 2000L
+ private val IMAGE_LOAD_DELAY = 100L
private val config = activity.config
private val isListViewType = config.viewTypeFiles == VIEW_TYPE_LIST
private var skipConfirmationDialog = false
+ private var visibleItemPaths = ArrayList()
+ private var loadImageInstantly = false
+ private var delayHandler = Handler(Looper.getMainLooper())
private var scrollHorizontally = config.scrollHorizontally
private var animateGifs = config.animateGifs
private var cropThumbnails = config.cropThumbnails
private var displayFilenames = config.displayFileNames
+ init {
+ enableInstantLoad()
+ }
+
override fun getActionMenuId() = R.menu.cab_media
override fun prepareItemSelection(view: View) {
@@ -51,6 +65,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList,
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val medium = media[position]
+ visibleItemPaths.add(medium.path)
val view = holder.bindView(medium, !allowMultiplePicks) { itemView, layoutPosition ->
setupView(itemView, medium)
}
@@ -92,7 +107,9 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList,
override fun onViewRecycled(holder: ViewHolder?) {
super.onViewRecycled(holder)
if (!activity.isActivityDestroyed()) {
- Glide.with(activity).clear(holder?.itemView?.medium_thumbnail)
+ val itemView = holder?.itemView
+ visibleItemPaths.remove(itemView?.photo_name?.tag)
+ Glide.with(activity).clear(itemView?.medium_thumbnail!!)
}
}
@@ -230,12 +247,14 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList,
fun updateMedia(newMedia: ArrayList) {
media = newMedia
+ enableInstantLoad()
notifyDataSetChanged()
finishActMode()
}
fun updateDisplayFilenames(displayFilenames: Boolean) {
this.displayFilenames = displayFilenames
+ enableInstantLoad()
notifyDataSetChanged()
}
@@ -254,12 +273,32 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList,
notifyDataSetChanged()
}
+ private fun enableInstantLoad() {
+ loadImageInstantly = true
+ delayHandler.postDelayed({
+ loadImageInstantly = false
+ }, INSTANT_LOAD_DURATION)
+ }
+
private fun setupView(view: View, medium: Medium) {
view.apply {
play_outline.beVisibleIf(medium.video)
photo_name.beVisibleIf(displayFilenames || isListViewType)
photo_name.text = medium.name
- activity.loadImage(medium.path, medium_thumbnail, scrollHorizontally, animateGifs, cropThumbnails)
+ photo_name.tag = medium.path
+
+ if (loadImageInstantly) {
+ activity.loadImage(medium.path, medium_thumbnail, scrollHorizontally, animateGifs, cropThumbnails)
+ } else {
+ medium_thumbnail.setImageDrawable(null)
+ medium_thumbnail.isHorizontalScrolling = scrollHorizontally
+ delayHandler.postDelayed({
+ val isVisible = visibleItemPaths.contains(medium.path)
+ if (isVisible) {
+ activity.loadImage(medium.path, medium_thumbnail, scrollHorizontally, animateGifs, cropThumbnails)
+ }
+ }, IMAGE_LOAD_DELAY)
+ }
if (isListViewType) {
photo_name.setTextColor(textColor)
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/Activity.kt
index ec99f9352..9d3cd9335 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/Activity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/Activity.kt
@@ -64,7 +64,7 @@ fun Activity.launchCamera() {
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
} else {
- toast(R.string.no_camera_app_found)
+ toast(R.string.no_app_found)
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt
index b99ac8867..eecaff05c 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt
@@ -246,6 +246,7 @@ class PhotoFragment : ViewPagerFragment() {
view.subsampling_view.apply {
maxScale = 10f
beVisible()
+ isQuickScaleEnabled = false
setImage(ImageSource.uri(medium.path))
orientation = if (orient == -1) SubsamplingScaleImageView.ORIENTATION_USE_EXIF else degreesForRotation(orient)
setOnImageEventListener(object : SubsamplingScaleImageView.OnImageEventListener {
@@ -325,7 +326,7 @@ class PhotoFragment : ViewPagerFragment() {
override fun onDestroyView() {
super.onDestroyView()
if (activity?.isActivityDestroyed() == false) {
- Glide.with(context).clear(view.gif_view)
+ Glide.with(context!!).clear(view.gif_view)
view.subsampling_view.recycle()
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/GlideRotateTransformation.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/GlideRotateTransformation.kt
index 8a48b23f4..aae7d66ca 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/GlideRotateTransformation.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/GlideRotateTransformation.kt
@@ -17,6 +17,6 @@ class GlideRotateTransformation(context: Context, val rotateRotationAngle: Float
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}
- override fun updateDiskCacheKey(messageDigest: MessageDigest?) {
+ override fun updateDiskCacheKey(messageDigest: MessageDigest) {
}
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index a01449b1a..033563bb1 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -36,7 +36,7 @@
@@ -48,7 +48,8 @@
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:paddingLeft="@dimen/normal_margin"
- android:paddingStart="@dimen/normal_margin">
+ android:paddingStart="@dimen/normal_margin"
+ android:visibility="gone">
@@ -61,7 +62,8 @@
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
- android:paddingTop="@dimen/normal_margin">
+ android:paddingTop="@dimen/normal_margin"
+ android:visibility="gone">
diff --git a/app/src/main/res/layout/activity_media.xml b/app/src/main/res/layout/activity_media.xml
index 918e39428..b4bcb9c16 100644
--- a/app/src/main/res/layout/activity_media.xml
+++ b/app/src/main/res/layout/activity_media.xml
@@ -36,7 +36,7 @@
@@ -48,7 +48,8 @@
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:paddingLeft="@dimen/normal_margin"
- android:paddingStart="@dimen/normal_margin">
+ android:paddingStart="@dimen/normal_margin"
+ android:visibility="gone">
@@ -61,7 +62,8 @@
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
- android:paddingTop="@dimen/normal_margin">
+ android:paddingTop="@dimen/normal_margin"
+ android:visibility="gone">
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 7e96f52dd..8ec33b33f 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -68,6 +68,25 @@
+
+
+
+
+
+
-
-
-
-
-
-
-
+ android:id="@+id/search"
+ android:icon="@drawable/ic_search"
+ android:title="@string/search"
+ app:actionViewClass="android.support.v7.widget.SearchView"
+ app:showAsAction="collapseActionView|ifRoom"/>
+
- مجلد آخر
عرض على الخريطة
موقع غير معروف
- لم يتم العثور على أي تطبيق مع الخرائط
- لم يتم العثور على تطبيق كاميرا
زيادة عدد الأعمدة
تقليل عدد الأعمدة
تغيير صورة الغلاف
@@ -91,7 +89,6 @@
تعيين كخلفية الشاشة
فشل الإعداد كخلفية
تعيين كخلفية بواسطة:
- لم يتم العثور على أي تطبيق لأداء المهمة
... جار تعيين الخلفية ...
تم تعيبن الخلفية بنجاح
صورة نسبة العرض إلى الارتفاع
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
new file mode 100644
index 000000000..6fbfd736d
--- /dev/null
+++ b/app/src/main/res/values-ca/strings.xml
@@ -0,0 +1,154 @@
+
+
+ Simple Gallery
+ Galeria
+ Editar
+ Obrir càmera
+ (ocult)
+ Fixar carpeta
+ No fixar carpeta
+ Ancorar a l\'inici
+ Mostrar el contingut de totes les carpetes
+ Tots els mitjans
+ Canviar a vista de carpeta
+ Un altre carpeta
+ Mostrar al mapa
+ Ubicació desconeguda
+ Augmentar el número de columnes
+ Reduir el número de columnes
+ Canviar imatge de portada
+ Sel·leccionar imatge
+ Us per defecte
+ Volum
+ Brillantor
+ No tornar a preguntar en aquesta sessió
+ Bloquejar orientació
+ Desbloquejar orientació
+
+
+ Filtre d\'arxius
+ Imatges
+ Vídeos
+ GIFs
+ No s\'han tronat arxius amb els filtres seleccionats.
+ Canviar filtres
+
+
+ Aquesta funció oculta les carpetes agregant un arxiu \'.nomedia\' dins d\'ella. També ocultarà les subcarpetes. Pots mostrar-les canviant la opció \'Mostrar carpetes ocultes\' als ajustaments. Continuar?
+ Excloure
+ Carpetes excloses
+ Gestionar carpetes excloses
+ Això exclou la selecció juntament amb les carpetes, només de Simple Gallery. Pots gestionar les carpetes excloses en els Ajustaments.
+ Excloure millor la carpeta superior?
+ Excloure les carpetes les ocultarà junt amb les seves subcarpetes, però només a Simple Gallery. Seguirant sent visibles a altres aplicacions.\\n\\nSi vols ocultar-les d'altres aplicacions fes servir la opció Ocultar.
+ Eliminar tot
+ Eliminar totes les carpetes de la llista d\'excloses? Això no eliminarà les carpetes.
+ Carpetes ocultes
+ Gestionar carpetes ocultes
+ Sembla que no tens cap carpeta amb l\'arxiu \".nomedia\".
+
+
+ Carpetes incloses
+ Gestionar carpetes incloses
+ Agregar carpeta
+ Si tens alguna carpeta que contingui multimèdia però no ha estat reconeguda per la aplicació, pots agregar-les manualment aquí.
+
+
+ Redimensionar
+ Redimensionar la selecció i desar
+ Ample
+ Alt
+ Mantenir proporcions
+ Si us plau, introdueix una resolució vàlida
+
+
+ Editor
+ Guardar
+ Rotar
+ Ruta
+ Ruta de imatge no vàlida
+ Ha fallat la edició de la imatge
+ Editar imatge utilitzant:
+ No s\'ha trobat cap editor d\'imatges
+ Ubicació de l\'arxiu desconeguda
+ No s\'ha pogut sobreescriure l\'arxiu d\'origen
+ Rotar a l\'esquerra
+ Rotar a la dreta
+ Rotar 180º
+ Girar
+ Horizontalment
+ Verticalment
+ Editar amb
+
+
+ Fons de pantalla de Simple Gallery
+ Establir com a fons de pantalla
+ Error a l\'establir com fons de pantalla
+ Establir com fons de pantalla amb:
+ Establint fons de pantalla…
+ Fons de pantalla establert correctament
+ Relació d\'aspecte tipus retrat
+ Relació d\'aspecte tipus paisatge
+ Pantalla principal
+ Pantalla de bloqueig
+ Pantalla principal i de bloqueig
+
+
+ Presentació de diapositives
+ Interval (segons):
+ Inclou imatges
+ Inclou vídeos
+ Inclou GIFs
+ Ordre aleatori
+ Utilitza animacions de desaparició
+ Moure cap enrere
+ Presentació de diapositives
+ S\'ha acabat la presentació de diapositives
+ No s\'han trobat mitjans per a la presentació de diapositives
+
+
+ Canviar el tipus de vista
+ Reixeta
+ Llista
+
+
+ Reproduir vídeos automàticament
+ Canviar la visibilitat del nom d\'arxiu
+ Reproducció continua de vídeos
+ Animar les miniatures dels GIFs
+ Brillantor màxima quan es mostra multimèdia
+ Retallar miniatures en quadrats
+ Gira els mitjans a pantalla completa segons
+ Configuració del sistema
+ Rotació del dispositiu
+ Relació d\'aspecte
+ Fons i barra d\'estat negre als mitjans de pantalla completa
+ Desplaçar miniatures horizontalment
+ Ocultar automàticament la interficie de usuari del sistema a pantalla complerta
+ Eliminar carpetes buides després d\'esborrar el seu contingut
+ Permet controlar el volum i la brillantor del vídeo amb gestos verticals
+ Mostrar el número de mitjans de les carpetes a la vista principal
+ Reemplaçar Compartir per Girar al menú de pantalla complerta
+ Mostrar detalls estesos sobre mitjans a pantalla complerta
+ Gestioneu els detalls ampliats
+
+
+
+ Una galeria per veure imatges i vídeos sense publicitat.
+
+ Una eina senzilla que es pot fer servir per veure imatges i vídeos. Els elements es poden ordenar per data, mida o nom, tant ascendent com descendent. Es pot fer zoom a les imatges. Els arxius de mitjans es mostren en múltiples columnes depenent de la mida de la pantalla i es pot canviar el número de columnes mitjançant gestos. Permet canviar el nom, compartir, esborrar, i moure. Les imatges també es poden retalla, rotar o utilitzar com a fons de pantalla directament des de l\'aplicació.
+
+ Gallery també s'ofereix per us de tercers, per visualitzar imatges/vídeos, agregar adjunts a clients de correu, etc. Es perfecta per l\'ús diari.
+
+ El permís d\'empremtes dactilars és necessari per bloquejar la visibilitat d'elements ocults o tota l\'aplicació.
+
+ No conté ni publicitat ni permisos innecessaris. Es totalment Lliure i proporciona colors personalitzables.
+
+ Aquesta aplicació es només una peça d'una sèrie més gran d'aplicacions. Pots trobar la resta a http://www.simplemobiletools.com
+
+
+
+
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index d3409cad7..e81d248ca 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -14,8 +14,6 @@
Jiná složka
Zobrazit na mapě
Neznámá poloha
- Nebyla nalezena žádná mapová aplikace
- Nebyla nalezena žádná fotografická aplikace
Zvýšit počet sloupců
Snížit počet sloupců
Change cover image
@@ -87,7 +85,6 @@
Nastavit jako tapetu
Nastavení tapety selhalo
Nastavit jako tapetu pomocí:
- Nebyla nalezena žádná vhodná aplikace
Nastavuje se tapeta…
Tapeta byla úspěšně změněna
Portrait aspect ratio
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 7bc1848a5..565eb25c2 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -14,8 +14,6 @@
Ordner wählen
Auf Karte zeigen
Unbekannter Pfad
- Keine Karten-App gefunden
- Keine Kamera-App gefunden
Kacheln verkleinern
Kacheln vergrößern
Coverbild ändern
@@ -37,12 +35,12 @@
Diese Funktion versteckt die ausgewählten Ordner (auch für andere Apps), indem dort im Dateisystem eine \'.nomedia\'-Datei abgelegt wird. Dadurch werden auch deren Unterordner versteckt. Solche Ordner werden nur gezeigt, wenn die Einstellung \'Versteckte Ordner zeigen\' aktiv ist (auch andere Apps bieten üblicherweise eine solche Option). Fortfahren?
- Ordner ausblenden
- Ausgeblendete Ordner
- Ausgeblendete Ordner verwalten
- Diese Funktion blendet die ausgewählten Ordner und deren Unterordner aus (nur in dieser App). Ausgeblendete Ordner können in den Einstellungen verwaltet werden.
- Möchten Sie stattdessen einen höherliegenden Ordner ausblenden?
- \'Ordner ausblenden\' wird ausgewählte Ordner und deren Unterordner nur in dieser App ausblenden. Andere Apps werden solche Ordner weiterhin anzeigen.\\n\\nWenn Sie Ordner auch für andere Apps verstecken wollen, verwenden Sie dafür die Funktion \'Ordner verstecken\'.
+ Ordner ausschließen
+ Ausgeschlossene Ordner
+ Ausgeschlossene Ordner verwalten
+ Diese Funktion blendet die ausgewählten Ordner und deren Unterordner nur in dieser App aus. Ausgeschlossene Ordner können in den Einstellungen verwaltet werden.
+ Möchtest du stattdessen einen höherliegenden Ordner ausschließen?
+ \'Ordner ausschließen\' wird ausgewählte Ordner und deren Unterordner nur in dieser App ausblenden. Andere Apps werden solche Ordner weiterhin anzeigen.\\n\\nWenn du Ordner auch für andere Apps verstecken willst, verwende dafür die Funktion \'Ordner verstecken\'.
Alle entfernen
Alle Ordner aus der Ausgeblendet-Liste entfernen? Die Ordner selbst werden nicht gelöscht.
Versteckte Ordner
@@ -53,7 +51,7 @@
Einbezogene Ordner
Einbezogene Ordner verwalten
Ordner hinzufügen
- Sollten Sie weitere Medienordner haben, die von der App nicht erkannt wurden, können Sie diese hier manuell hinzufügen.
+ Solltest du weitere Medienordner haben, die von der App nicht erkannt wurden, kannst du diese hier manuell hinzufügen.
Größe ändern
@@ -87,7 +85,6 @@
Als Hintergrund festlegen
Hintergrundbild festlegen fehlgeschlagen
Als Hintergrund festlegen mit
- Keine Hintergrundbild-App gefunden
Hintergrund festlegen…
Hintergrundbild erfolgreich festgelegt
Hochformat
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index f0e42eb02..ff2b8cc85 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -7,33 +7,31 @@
(oculto)
Fijar carpeta
No fijar carpeta
- Pin to the top
+ Anclar arriba
Mostrar el contenido de todas las carpetas
Todos los medios
Cambiar a vista de carpeta
Otra carpeta
Mostrar en el mapa
Ubicación desconocida
- No se encontró aplicación de mapas
- No se encontró aplicación de cámara
Aumentar el número de columnas
Reducir el número de columnas
Cambiar imagen de portada
Seleccionar imagen
Uso por defecto
- Volume
- Brightness
- Do not ask again in this session
- Lock orientation
- Unlock orientation
+ Volumen
+ Brillo
+ No volver a preguntar en esta sesión
+ Bloquear orientación
+ Desbloquear orientación
Filtro de medios
- Images
- Videos
+ Imágenes
+ Vídeos
GIFs
- No media files have been found with the selected filters.
- Change filters
+ No se han encontrado ficheros con los filtros seleccionados.
+ Ccambiar flitros
Esta función oculta la carpeta agregando un archivo \'.nomedia\' en ella, y ocultará también las subcarpetas. Puede mostrarlas cambiando la opción \'Mostrar carpetas ocultas\' en los Ajustes. ¿Continuar?
@@ -45,9 +43,9 @@
Excluir las carpetas las hará junto a sus subcarpetas ocultas sólo en Simple Gallery, estas seguirán siendo visibles en otras aplicaciones.\\n\\nSi desea ocultarlo de otras aplicaciones, utilice la función de Ocultar.
Eliminar todo
¿Eliminar todas las carpetas de la lista de excluidas? Esto no borrará las carpetas.
- Hidden folders
- Manage hidden folders
- Seems like you don\'t have any folders hidden with a \".nomedia\" file.
+ Carpetas ocultas
+ Gestionar carpetas ocultas
+ Parece que no tienes carpetas ocultas con \".nomedia\" ficheros.
Carpetas incluidas
@@ -87,32 +85,31 @@
Establecer como fondo de pantalla
Error al establecer fondo de pantalla
Establecer como fondo de pantalla con:
- No se encontró aplicación para ello
Estableciendo fondo de pantalla…
Fondo de pantalla establecido correctamente
Relación de aspecto tipo retrato
Relación de aspecto tipo paisaje
- Home screen
- Lock screen
- Home and lock screen
+ Pantalla de inicio
+ Pantalla de bloqueo
+ Pantalla de inicio y de bloqueo
- Slideshow
- Interval (seconds):
- Include photos
- Include videos
- Include GIFs
- Random order
- Use fade animations
- Move backwards
- Loop slideshow
- The slideshow ended
- No media for the slideshow have been found
+ Diapositivas
+ Intervalo (segundos):
+ Incluir fotos
+ Incluir vídeos
+ Incluir GIFs
+ Orden aleatorio
+ Usar animaciones de desvanecimiento
+ Mover hacia atrás
+ Presentación de diapositivas
+ La diapositiva terminó
+ No se han encontrado medios para la presentación de diapositivas
Cambiar tipo de vista
- Grid
- List
+ Cuadrícula
+ Lista
Reproducir vídeos automáticamente
@@ -125,7 +122,7 @@
Configuración del sistema
Rotación del dispositivo
Relación de aspecto
- Black background and status bar at fullscreen media
+ Fondo y barra de estado negra en medios de pantalla completa
Desplazar miniaturas horizontalmente
Ocultar automáticamente la interfaz de usuario del sistema en medios de pantalla completa
Eliminar carpetas vacias despues de borrar su contenido
@@ -133,7 +130,7 @@
Mostrar el conteo de medios de las carpetas en la vista principal
Reemplazar Compartir con Girar en el menú de pantalla completa
Mostrar detalles extendidos sobre medios en pantalla completa
- Manage extended details
+ Administrar detalles ampliados
@@ -143,7 +140,7 @@
Gallery también se ofrece para uso de terceros para previsualizar imágenes/vídeos, agregar adjuntos en clientes de correo, etc. Es perfecta para uso diario.
- The fingerprint permission is needed for locking either hidden item visibility, or the whole app.
+ El permiso de huella digital es necesario para bloquear la visibilidad de elementos ocultos o toda la aplicación.
No contiene publicidad ni permisos innecesarios. Es totalmente libre, proporciona colores personalizables.
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 5ffb8ac09..85e95f0bc 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -14,8 +14,6 @@
Muu kansio
Näytä kartalla
Tuntematon sijainti
- Karttasovellusta ei löytynyt
- Kamerasovellusta ei löytynyt
Increase column count
Reduce column count
Vaihda kansikuva
@@ -87,7 +85,6 @@
Aseta taustakuvaksi
Taustakuvan asetus epäonnistui
Aseta taustakuvaksi sovelluksella:
- Toimivaa sovellusta ei löydetty
Asetetaan taustakuvaa…
Taustakuva asetettu onnistuneesti
Kuvasuhde pystyssä
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 348478ac1..752ad5b36 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -7,15 +7,13 @@
(caché)
Épingler le dossier
Désépingler le dossier
- Pin to the top
+ Épingler en haut
Afficher le contenu de tous les dossiers
Tous les dossiers
Permuter vers la vue du dossier
Autre dossier
Afficher sur la carte
Position inconnue
- Aucune application de carte n\'a été trouvée
- Aucune application d\'appareil photo n\'a été trouvée
Augmenter le nombre de colonnes
Réduire le nombre de colonnes
Changer l\'image de couverture
@@ -24,8 +22,8 @@
Volume
Luminosité
Ne pas redemander pour cette session
- Lock orientation
- Unlock orientation
+ Verrouiller la rotation
+ Déverrouiller la rotation
Filtrer les médias
@@ -41,13 +39,13 @@
Dossiers exclus
Gérer les dossiers exclus
Cela va exclure la sélection ainsi que ses sous-dossiers depuis Simple Galerie uniquement. Vous pouvez gérer les dossiers exclus depuis les Paramètres.
- Exclure un parent plutôt ?
+ Exclure un dossier parent ?
Exclure des dossiers les masquera ainsi que leurs sous-dossiers uniquement dans Simple Galerie, ils seront toujours visibles depuis d\'autres applications.\\n\\nSi vous voulez aussi les masquer ailleurs, utilisez la fonction Masquer.
Tout supprimer
Supprimer tous les dossiers de la liste des exclusions ? Ceci n\'effacera pas les dossiers.
- Hidden folders
- Manage hidden folders
- Seems like you don\'t have any folders hidden with a \".nomedia\" file.
+ Dossiers masqués
+ Gérer les dossiers masqués
+ Il semblerait que vous n\'ayez pas de dossier cachés avec un fichier \".nomedia\".
Dossiers inclus
@@ -87,14 +85,13 @@
Définir comme fond d\'écran
Échec de la définition en tant que fond d\'écran.
Définir comme fond d\'écran avec :
- Aucune application trouvée pour continuer cette action
Paramètres de fond d\'écran…
Fond d\'écran défini avec succès
Ratio d\'aspect portrait
Ratio d\'aspect paysage
- Home screen
- Lock screen
- Home and lock screen
+ Page d\'accueil
+ Écran de verouillage
+ Page d\'accueil et écran de verrouillage
Diaporama
@@ -125,7 +122,7 @@
Paramètres système
Rotation de l\'appareil
Ratio d\'aspect
- Black background and status bar at fullscreen media
+ Fond et barre de statur noir en plein écran
Défilement des miniatures horizontalement
Masquer automatiquement l\'interface utilisateur si média plein écran
Supprimer les dossiers vides après avoir supprimé leur contenu
@@ -143,11 +140,11 @@
La galerie est également proposée pour une utilisation comme tierce partie pour la prévisualisation des images/vidéos, ajouter des pièces jointes aux clients email etc. C\'est parfait pour un usage au quotidien.
- The fingerprint permission is needed for locking either hidden item visibility, or the whole app.
+ L\'autorisation d\'empreinte digitale est nécessaire pour verrouiller les dossiers cachés et/ou l\'application.
L\'application ne contient ni publicité ni autorisation inutile. Elle est totalement opensource et est aussi fournie avec des couleurs personnalisables.
- Cette application est juste l\'une des applications d\'une plus grande suite. Vous pouvez trouver les autres sur http://www.simplemobiletools.com
+ Cette application fait partie d\'une plus grande suite. Vous pouvez trouver les autres applications sur http://www.simplemobiletools.com