diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8d63e5505..e7657fb9e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,25 @@
Changelog
==========
+Version 2.10.10 *(2017-06-07)*
+----------------------------
+
+ * Some crashfixes
+
+Version 2.10.9 *(2017-06-06)*
+----------------------------
+
+ * Allow setting custom folder covers
+ * Properly handle manually included folders
+ * Improve the performance at opening fullscreen media
+
+Version 2.10.8 *(2017-06-02)*
+----------------------------
+
+ * Always properly show hidden files from third party intents
+ * Properly handle Crop intent used for example at selecting contact photos
+ * Couple smaller fixes and crashfixes
+
Version 2.10.7 *(2017-05-29)*
----------------------------
diff --git a/app/build.gradle b/app/build.gradle
index 786bb1d31..cd03e6b5f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,8 +10,8 @@ android {
applicationId "com.simplemobiletools.gallery"
minSdkVersion 16
targetSdkVersion 23
- versionCode 106
- versionName "2.10.7"
+ versionCode 109
+ versionName "2.10.10"
}
signingConfigs {
@@ -32,7 +32,7 @@ android {
}
dependencies {
- compile 'com.simplemobiletools:commons:2.19.0'
+ compile 'com.simplemobiletools:commons:2.20.1'
compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'
compile 'com.theartofdev.edmodo:android-image-cropper:2.4.0'
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index a9c0f371b..34de0fb81 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -1,2 +1,5 @@
-keep class com.simplemobiletools.** { *; }
-dontwarn com.simplemobiletools.**
+
+-renamesourcefileattribute SourceFile
+-keepattributes SourceFile, LineNumberTable
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f3cf094b3..8c640a923 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -145,6 +145,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
()
private var mPath = ""
private var mDirectory = ""
@@ -51,6 +51,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
private var mShowAll = false
private var mRotationDegrees = 0f
private var mLastHandledOrientation = 0
+ private var mPrevHashcode = 0
companion object {
var screenWidth = 0
@@ -73,10 +74,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
try {
val proj = arrayOf(MediaStore.Images.Media.DATA)
cursor = contentResolver.query(uri, proj, null, null, null)
- if (cursor != null) {
- val dataIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
- cursor.moveToFirst()
- mPath = cursor.getString(dataIndex)
+ if (cursor?.moveToFirst() == true) {
+ mPath = cursor.getStringValue(MediaStore.Images.Media.DATA)
}
} finally {
cursor?.close()
@@ -92,14 +91,18 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
return
}
- mMedia = ArrayList()
+ if (intent.extras?.containsKey(IS_VIEW_INTENT) == true) {
+ config.temporarilyShowHidden = true
+ }
+
showSystemUI()
mDirectory = File(mPath).parent
title = mPath.getFilenameFromPath()
- if (MediaActivity.mMedia.isNotEmpty())
- gotMedia(MediaActivity.mMedia)
+ if (mMedia.isNotEmpty()) {
+ gotMedia(mMedia)
+ }
reloadViewPager()
scanPath(mPath) {}
@@ -109,6 +112,13 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
view_pager.background = ColorDrawable(Color.BLACK)
}
+ override fun onDestroy() {
+ super.onDestroy()
+ if (intent.extras?.containsKey(IS_VIEW_INTENT) == true) {
+ config.temporarilyShowHidden = false
+ }
+ }
+
private fun setupOrientationEventListener() {
mOrientationEventListener = object : OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
override fun onOrientationChanged(orientation: Int) {
@@ -424,10 +434,11 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
private fun gotMedia(media: ArrayList) {
- if (isDirEmpty(media) || mMedia.hashCode() == media.hashCode()) {
+ if (isDirEmpty(media) || media.hashCode() == mPrevHashcode) {
return
}
+ mPrevHashcode = media.hashCode()
mMedia = media
if (mPos == -1) {
mPos = getProperPosition()
@@ -493,12 +504,14 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
private fun updateActionbarTitle() {
runOnUiThread {
- title = mMedia[mPos].path.getFilenameFromPath()
+ if (mPos < mMedia.size) {
+ title = mMedia[mPos].path.getFilenameFromPath()
+ }
}
}
private fun getCurrentMedium(): Medium? {
- return if (mMedia.isEmpty())
+ return if (mMedia.isEmpty() || mPos == -1)
null
else
mMedia[Math.min(mPos, mMedia.size - 1)]
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 4a5876a18..7b76fb7a9 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt
@@ -10,6 +10,7 @@ import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback
import com.bignerdranch.android.multiselector.MultiSelector
import com.bignerdranch.android.multiselector.SwappingHolder
import com.bumptech.glide.Glide
+import com.google.gson.Gson
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.PropertiesDialog
import com.simplemobiletools.commons.dialogs.RenameItemDialog
@@ -20,7 +21,9 @@ import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.activities.SimpleActivity
import com.simplemobiletools.gallery.dialogs.ExcludeFolderDialog
+import com.simplemobiletools.gallery.dialogs.PickMediumDialog
import com.simplemobiletools.gallery.extensions.*
+import com.simplemobiletools.gallery.models.AlbumCover
import com.simplemobiletools.gallery.models.Directory
import kotlinx.android.synthetic.main.directory_item.view.*
import kotlinx.android.synthetic.main.directory_tmb.view.*
@@ -111,6 +114,8 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList copyMoveTo(false)
R.id.cab_select_all -> selectAll()
R.id.cab_delete -> askConfirmDelete()
+ R.id.cab_select_photo -> changeAlbumCover(false)
+ R.id.cab_use_default -> changeAlbumCover(true)
else -> return false
}
return true
@@ -125,6 +130,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList()
if (selectedPositions.isEmpty())
return
+ val files = ArrayList()
selectedPositions.forEach {
val dir = File(dirs[it].path)
files.addAll(dir.listFiles().filter { it.isFile && it.isImageVideoGif() })
@@ -320,6 +326,31 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList) {
+ activity.config.albumCovers = Gson().toJson(albumCovers)
+ actMode?.finish()
+ listener?.refreshItems()
+ }
+
private fun getSelectedPaths(): HashSet {
val paths = HashSet(selectedPositions.size)
selectedPositions.forEach { paths.add(dirs[it].path) }
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/asynctasks/GetDirectoriesAsynctask.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/asynctasks/GetDirectoriesAsynctask.kt
index 2ba94ceee..539e78e1e 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/asynctasks/GetDirectoriesAsynctask.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/asynctasks/GetDirectoriesAsynctask.kt
@@ -35,6 +35,7 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
}
private fun groupDirectories(media: ArrayList): Map {
+ val albumCovers = config.parseAlbumCovers()
val hidden = context.resources.getString(R.string.hidden)
val directories = LinkedHashMap()
for ((name, path, isVideo, dateModified, dateTaken, size) in media) {
@@ -62,7 +63,14 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
continue
}
- val directory = Directory(parentDir, path, dirName, 1, dateModified, dateTaken, size)
+ var thumbnail = path
+ albumCovers.forEach {
+ if (it.path == parentDir && File(it.tmb).exists()) {
+ thumbnail = it.tmb
+ }
+ }
+
+ val directory = Directory(parentDir, thumbnail, dirName, 1, dateModified, dateTaken, size)
directories.put(parentDir, directory)
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickAlbumDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickDirectoryDialog.kt
similarity index 91%
rename from app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickAlbumDialog.kt
rename to app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickDirectoryDialog.kt
index 9318120bb..cf384829e 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickAlbumDialog.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickDirectoryDialog.kt
@@ -13,15 +13,15 @@ import com.simplemobiletools.gallery.asynctasks.GetDirectoriesAsynctask
import com.simplemobiletools.gallery.extensions.config
import com.simplemobiletools.gallery.extensions.getCachedDirectories
import com.simplemobiletools.gallery.models.Directory
-import kotlinx.android.synthetic.main.dialog_album_picker.view.*
+import kotlinx.android.synthetic.main.dialog_directory_picker.view.*
-class PickAlbumDialog(val activity: SimpleActivity, val sourcePath: String, val callback: (path: String) -> Unit) {
+class PickDirectoryDialog(val activity: SimpleActivity, val sourcePath: String, val callback: (path: String) -> Unit) {
var dialog: AlertDialog
var directoriesGrid: RecyclerView
var shownDirectories: ArrayList = ArrayList()
init {
- val view = LayoutInflater.from(activity).inflate(R.layout.dialog_album_picker, null)
+ val view = LayoutInflater.from(activity).inflate(R.layout.dialog_directory_picker, null)
directoriesGrid = view.directories_grid
dialog = AlertDialog.Builder(activity)
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickMediumDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickMediumDialog.kt
new file mode 100644
index 000000000..8d2bacf2b
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/dialogs/PickMediumDialog.kt
@@ -0,0 +1,56 @@
+package com.simplemobiletools.gallery.dialogs
+
+import android.support.v7.app.AlertDialog
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.simplemobiletools.commons.extensions.setupDialogStuff
+import com.simplemobiletools.gallery.R
+import com.simplemobiletools.gallery.activities.SimpleActivity
+import com.simplemobiletools.gallery.adapters.MediaAdapter
+import com.simplemobiletools.gallery.asynctasks.GetMediaAsynctask
+import com.simplemobiletools.gallery.extensions.config
+import com.simplemobiletools.gallery.models.Medium
+import kotlinx.android.synthetic.main.dialog_medium_picker.view.*
+
+class PickMediumDialog(val activity: SimpleActivity, val path: String, val callback: (path: String) -> Unit) {
+ var dialog: AlertDialog
+ var mediaGrid: RecyclerView
+ var shownMedia: ArrayList = ArrayList()
+
+ init {
+ val view = LayoutInflater.from(activity).inflate(R.layout.dialog_medium_picker, null)
+ mediaGrid = view.media_grid
+
+ dialog = AlertDialog.Builder(activity)
+ .setPositiveButton(R.string.ok, null)
+ .setNegativeButton(R.string.cancel, null)
+ .create().apply {
+ activity.setupDialogStuff(view, this, R.string.select_photo)
+
+ val token = object : TypeToken>() {}.type
+ val media = Gson().fromJson>(activity.config.loadFolderMedia(path), token) ?: ArrayList(1)
+
+ if (media.isNotEmpty()) {
+ gotMedia(media)
+ }
+
+ GetMediaAsynctask(activity, path, false, true, false) {
+ gotMedia(it)
+ }.execute()
+ }
+ }
+
+ private fun gotMedia(media: ArrayList) {
+ if (media.hashCode() == shownMedia.hashCode())
+ return
+
+ shownMedia = media
+ val adapter = MediaAdapter(activity, media, null) {
+ callback(it.path)
+ dialog.dismiss()
+ }
+ mediaGrid.adapter = adapter
+ }
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/context.kt
index 5c781f4df..b8f37cf99 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/context.kt
@@ -57,8 +57,12 @@ fun Context.getFilesFrom(curPath: String, isPickImage: Boolean, isPickVideo: Boo
val selection = if (curPath.isEmpty()) null else "(${MediaStore.Images.Media.DATA} LIKE ? AND ${MediaStore.Images.Media.DATA} NOT LIKE ?)"
val selectionArgs = if (curPath.isEmpty()) null else arrayOf("$curPath/%", "$curPath/%/%")
- val cur = contentResolver.query(uri, projection, selection, selectionArgs, getSortingForFolder(curPath))
- return parseCursor(this, cur, isPickImage, isPickVideo, curPath)
+ try {
+ val cur = contentResolver.query(uri, projection, selection, selectionArgs, getSortingForFolder(curPath))
+ return parseCursor(this, cur, isPickImage, isPickVideo, curPath)
+ } catch (e: Exception) {
+ return ArrayList()
+ }
}
private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isPickVideo: Boolean, curPath: String): ArrayList {
@@ -66,23 +70,15 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
val config = context.config
val showMedia = config.showMedia
val showHidden = config.shouldShowHidden
+ val excludedFolders = config.excludedFolders
+ val noMediaFolders = context.getNoMediaFolders()
cur.use { cur ->
if (cur.moveToFirst()) {
- var filename: String
- var path: String
- var dateTaken: Long
- var dateModified: Long
- var size: Long
- var isImage: Boolean
- var isVideo: Boolean
- val excludedFolders = config.excludedFolders
- val noMediaFolders = context.getNoMediaFolders()
-
do {
try {
- path = cur.getStringValue(MediaStore.Images.Media.DATA)
- size = cur.getLongValue(MediaStore.Images.Media.SIZE)
+ val path = cur.getStringValue(MediaStore.Images.Media.DATA)
+ var size = cur.getLongValue(MediaStore.Images.Media.SIZE)
if (size == 0L) {
size = File(path).length()
}
@@ -91,12 +87,12 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
continue
}
- filename = cur.getStringValue(MediaStore.Images.Media.DISPLAY_NAME) ?: ""
+ var filename = cur.getStringValue(MediaStore.Images.Media.DISPLAY_NAME) ?: ""
if (filename.isEmpty())
filename = path.getFilenameFromPath()
- isImage = filename.isImageFast() || filename.isGif()
- isVideo = if (isImage) false else filename.isVideoFast()
+ val isImage = filename.isImageFast() || filename.isGif()
+ val isVideo = if (isImage) false else filename.isVideoFast()
if (!isImage && !isVideo)
continue
@@ -130,8 +126,8 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
}
if (!isExcluded) {
- dateTaken = cur.getLongValue(MediaStore.Images.Media.DATE_TAKEN)
- dateModified = cur.getIntValue(MediaStore.Images.Media.DATE_MODIFIED) * 1000L
+ val dateTaken = cur.getLongValue(MediaStore.Images.Media.DATE_TAKEN)
+ val dateModified = cur.getIntValue(MediaStore.Images.Media.DATE_MODIFIED) * 1000L
val medium = Medium(filename, path, isVideo, dateModified, dateTaken, size)
curMedia.add(medium)
@@ -143,6 +139,38 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
}
}
+ if (curPath.isEmpty()) {
+ config.includedFolders.mapNotNull { File(it).listFiles() }.forEach {
+ for (file in it) {
+ val size = file.length()
+ if (size <= 0L) {
+ continue
+ }
+
+ val filename = file.name
+ val isImage = filename.isImageFast() || filename.isGif()
+ val isVideo = if (isImage) false else filename.isVideoFast()
+
+ if (!isImage && !isVideo)
+ continue
+
+ if (isVideo && (isPickImage || showMedia == IMAGES))
+ continue
+
+ if (isImage && (isPickVideo || showMedia == VIDEOS))
+ continue
+
+ val dateTaken = file.lastModified()
+ val dateModified = file.lastModified()
+
+ val medium = Medium(filename, file.absolutePath, isVideo, dateModified, dateTaken, size)
+ val isAlreadyAdded = curMedia.any { it.path == file.absolutePath }
+ if (!isAlreadyAdded)
+ curMedia.add(medium)
+ }
+ }
+ }
+
Medium.sorting = config.getFileSorting(curPath)
curMedia.sort()
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/VideoFragment.kt
index 3f894e8e8..5359bcc67 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/VideoFragment.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/VideoFragment.kt
@@ -302,7 +302,7 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
if (mSurfaceHolder == null)
mSurfaceHolder = mSurfaceView!!.holder
- if (activity == null || !mSurfaceHolder!!.surface.isValid)
+ if (activity == null || mSurfaceHolder == null || !mSurfaceHolder!!.surface.isValid)
return
initMediaPlayer()
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt
index e84570f46..424721c88 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt
@@ -1,10 +1,13 @@
package com.simplemobiletools.gallery.helpers
import android.content.Context
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.simplemobiletools.commons.helpers.BaseConfig
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
import com.simplemobiletools.gallery.R
+import com.simplemobiletools.gallery.models.AlbumCover
import java.util.*
class Config(context: Context) : BaseConfig(context) {
@@ -167,4 +170,13 @@ class Config(context: Context) : BaseConfig(context) {
var directories: String
get() = prefs.getString(DIRECTORIES, "")
set(directories) = prefs.edit().putString(DIRECTORIES, directories).apply()
+
+ var albumCovers: String
+ get() = prefs.getString(ALBUM_COVERS, "")
+ set(albumCovers) = prefs.edit().putString(ALBUM_COVERS, albumCovers).apply()
+
+ fun parseAlbumCovers(): ArrayList {
+ val listType = object : TypeToken>() {}.type
+ return Gson().fromJson>(albumCovers, listType) ?: ArrayList(1)
+ }
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt
index 5ebaa98a6..21dc7c6de 100644
--- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt
@@ -17,12 +17,13 @@ val DARK_BACKGROUND = "dark_background"
val PINNED_FOLDERS = "pinned_folders"
val DIR_COLUMN_CNT = "dir_column_cnt"
val MEDIA_COLUMN_CNT = "media_column_cnt"
-val SHOW_ALL = "show_all" // display images and videos from all folders together
+val SHOW_ALL = "show_all" // display images and videos from all folders together
val SHOW_MEDIA = "show_media"
val SAVE_FOLDER_PREFIX = "folder2_"
val HIDE_FOLDER_TOOLTIP_SHOWN = "hide_folder_tooltip_shown"
val EXCLUDED_FOLDERS = "excluded_folders"
val INCLUDED_FOLDERS = "included_folders"
+val ALBUM_COVERS = "album_covers"
val NOMEDIA = ".nomedia"
@@ -33,6 +34,7 @@ val GET_VIDEO_INTENT = "get_video_intent"
val GET_ANY_INTENT = "get_any_intent"
val SET_WALLPAPER_INTENT = "set_wallpaper_intent"
val DIRECTORIES = "directories2"
+val IS_VIEW_INTENT = "is_view_intent"
val REQUEST_EDIT_IMAGE = 1
val REQUEST_SET_WALLPAPER = 2
diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/models/AlbumCover.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/models/AlbumCover.kt
new file mode 100644
index 000000000..f5937ad08
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/gallery/models/AlbumCover.kt
@@ -0,0 +1,3 @@
+package com.simplemobiletools.gallery.models
+
+data class AlbumCover(val path: String, val tmb: String)
diff --git a/app/src/main/res/layout/dialog_album_picker.xml b/app/src/main/res/layout/dialog_directory_picker.xml
similarity index 90%
rename from app/src/main/res/layout/dialog_album_picker.xml
rename to app/src/main/res/layout/dialog_directory_picker.xml
index 079c72fa4..0feb6bf5a 100644
--- a/app/src/main/res/layout/dialog_album_picker.xml
+++ b/app/src/main/res/layout/dialog_directory_picker.xml
@@ -5,5 +5,6 @@
android:id="@+id/directories_grid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:paddingTop="@dimen/activity_margin"
app:layoutManager="android.support.v7.widget.GridLayoutManager"
app:spanCount="@integer/directory_columns"/>
diff --git a/app/src/main/res/layout/dialog_medium_picker.xml b/app/src/main/res/layout/dialog_medium_picker.xml
new file mode 100644
index 000000000..f2aebbd17
--- /dev/null
+++ b/app/src/main/res/layout/dialog_medium_picker.xml
@@ -0,0 +1,10 @@
+
+
diff --git a/app/src/main/res/menu/cab_directories.xml b/app/src/main/res/menu/cab_directories.xml
index 5900ba1e9..2267e4c6e 100644
--- a/app/src/main/res/menu/cab_directories.xml
+++ b/app/src/main/res/menu/cab_directories.xml
@@ -24,12 +24,12 @@
+ -
+
+
- Zvýšit počet sloupců
Snížit počet sloupců
Dočasně zobrazit skryté
+ Change cover image
+ Select photo
+ Use default
Tato funkce skryje složku, včetně podsložek, přidáním souboru \'.nomedia\'. Zobrazíte je zvolením možnosti \'Zobrazit skryté složky\' v nastavení. Pokračovat?
@@ -95,6 +98,7 @@
Device rotation
Aspect ratio
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 6740ea0d9..5e8f7e578 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -20,6 +20,9 @@
Kacheln verkleinern
Kacheln vergrößern
Verstecktes temporär zeigen
+ Change cover image
+ Select photo
+ Use default
Diese Funktion versteckt ausgewählte 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?
@@ -95,6 +98,7 @@
Gerätedrehung
Seitenverhältnis
Schwarzer Hintergrund im Vollbild
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 2f5f40426..feea9961a 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -20,6 +20,9 @@
Aumentar el número de columnas
Reducir el número de columnas
Mostrar ocultos temporalmente
+ Change cover image
+ Select photo
+ Use default
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?
@@ -95,6 +98,7 @@
Rotación del dispositivo
Relación de aspecto
Utilizar siempre fondo oscuro en pantalla completa
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 14b972ee6..e98176869 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -20,6 +20,9 @@
Augmenter le nombre de colonnes
Réduire le nombre de colonnes
Afficher temporairement les fichiers masqués
+ Change cover image
+ Select photo
+ Use default
Cette option masque le dossier en ajoutant un fichier \'.nomedia\' à l\'intérieur, cela masquera aussi tous les sous-dossiers. Vous pouvez les voir en modifiant l\'option \'Afficher les dossiers cachés\' dans les Paramètres. Continuer ?
@@ -95,6 +98,7 @@
Rotation de l\'appareil
Ratio d\'aspect
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 06fd2d48e..709a41f0d 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -20,6 +20,9 @@
Increase column count
Reduce column count
Temporarily show hidden
+ Change cover image
+ Select photo
+ Use default
This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?
@@ -95,6 +98,7 @@
Device rotation
Aspect ratio
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index fa72ec622..5087d0362 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -20,6 +20,9 @@
Aumenta numero colonne
Riduci numero colonne
Mostra temporaneamente nascosti
+ Change cover image
+ Select photo
+ Use default
Questa funzione nasconde la cartella aggiungendo un file \'.nomedia\' all\'interno, nasconderà anche tutte le sottocartelle. Puoi vederle attivando l\'opzione \'Mostra cartelle nascoste\' nelle impostazioni. Continuare?
@@ -95,6 +98,7 @@
Rotazione dispositivo
Proporzioni
Sfondo scuro a schermo intero
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 1a8f07151..d14c6d20f 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -20,6 +20,9 @@
Increase column count
Reduce column count
Temporarily show hidden
+ Change cover image
+ Select photo
+ Use default
This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?
@@ -95,6 +98,7 @@
Device rotation
Aspect ratio
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index f09badda8..e850a9af4 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -20,6 +20,9 @@
Zwiększ liczbę kolumn
Zmniejsz liczbę kolumn
Temporarily show hidden
+ Change cover image
+ Select photo
+ Use default
Ta funkcja ukrywa folder dodając \'. \' Nomedia plik do niego, można tak ukryć wszystkie podfoldery. Można je zobaczyć poprzez przełączanie \'Pokaż ukryte foldery \' opcję w ustawieniach. Kontyntynuj?
@@ -95,6 +98,7 @@
Device rotation
Aspect ratio
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 704b2ca4b..5fd798068 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -20,6 +20,9 @@
Aumentar número de colunas
Reduzir número de colunas
Mostrar pastas ocultas temporariamente
+ Change cover image
+ Select photo
+ Use default
Esta opção oculta uma pasta com a adição de um arquivo \'.nomedia\' dentro dela, e irá ocultar todas as subpastas que estejam dentro da mesma. Você poderá rever essas pastas com a opção \'Mostrar pastas ocultas\'. Continuar?
@@ -95,6 +98,7 @@
Sensor do aparelho
Proporção da mídia
Fundo de tela escuro em mídia tela cheia
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index fa5099f3f..89c7bfd08 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -20,6 +20,9 @@
Aumentar número de colunas
Reduzir número de colunas
Mostrar ocultas temporariamente
+ Change cover image
+ Select photo
+ Use default
Esta opção oculta uma pasta com a adição de um ficheiro \'.nomedia\' na pasta, e irá ocultar todas as subpastas existentes. Pode ver as pastas com a opção \'Mostrar pastas ocultas\'. Continuar?
@@ -95,6 +98,7 @@
Rotação do dispositivo
Proporção
Usar sempre um fundo escuro se em ecrã completo
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 70e652789..bd5fb9684 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -20,6 +20,9 @@
Добавить 1 столбец
Убрать 1 столбец
Временный показ скрытых
+ Change cover image
+ Select photo
+ Use default
Эта опция скрывает папку, добавляя в неё файл \'.nomedia\'; будут скрыты все подпапки. Можно показывать их, переключая \'Показать скрытые папки\' в настройках. Продолжить?
@@ -95,6 +98,7 @@
Поворот устройства
Соотношение сторон
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 08cdcd80c..cf7f93f41 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -20,6 +20,9 @@
Zvýšiť počet stĺpcov
Znížiť počet stĺpcov
Dočasne zobraziť skryté
+ Zmeniť obal albumu
+ Zvoliť foto
+ Použiť predvolený
Táto funkcia skryje priečinok pridaním súboru \'.nomedia\', skryté budú aj podpriečinky. Môžete ich vidieť zvolením možnosti \'Zobraziť skryté priečinky\' v nastaveniach. Pokračovať?
@@ -95,6 +98,7 @@
Otočenia zariadenia
Pomeru strán
Tmavé pozadie pri médiách na celú obrazovku
+ Prehliadať miniatúry vodorovne
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 844ac7150..a0c67d09e 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -20,6 +20,9 @@
Increase column count
Reduce column count
Temporarily show hidden
+ Change cover image
+ Select photo
+ Use default
This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?
@@ -95,6 +98,7 @@
Device rotation
Aspect ratio
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index d3e441d8a..61ef91e0d 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -20,6 +20,9 @@
Sütun sayısını artır
Sütun sayısını azalt
Geçici olarak gizli göster
+ Change cover image
+ Select photo
+ Use default
Bu işlev, klasöre\'.medya yok\'dosyası ekleyerek gizler; tüm alt klasörleri de gizler. Bunları Ayarlar\'da\'Gizli klasörleri göster\'seçeneğine basarak görebilirsiniz. Devam et?
@@ -95,6 +98,7 @@
Cihaz döndürme
En-boy oranı
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index aa0150eb8..42deb7bcc 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -20,6 +20,9 @@
增加一行
减少一行
显示/隐藏缓存内容
+ Change cover image
+ Select photo
+ Use default
通过添加一个 \'.nomedia\' 文件到目录下,该目录包括子目录下的所有媒体都不会被扫描。 你可以通过设置中的 \'Show hidden folders\' 选项改变设置, 继续?
@@ -95,6 +98,7 @@
设备方向
根据长宽比
全屏时黑色背景
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index a1f2f43c8..fdd431271 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -20,6 +20,9 @@
Increase column count
Reduce column count
Temporarily show hidden
+ Change cover image
+ Select photo
+ Use default
This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?
@@ -95,6 +98,7 @@
Device rotation
Aspect ratio
Dark background at fullscreen media
+ Scroll thumbnails horizontally
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 205206c16..d1487c62f 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -2,6 +2,7 @@
+ Allow setting custom folder covers
Allow selecting multiple items by finger dragging\n
Added an option to always use black background at fullscreen media
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fc650dc22..a65e48784 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -20,6 +20,9 @@
Increase column count
Reduce column count
Temporarily show hidden
+ Change cover image
+ Select photo
+ Use default
This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?
@@ -95,6 +98,7 @@
Device rotation
Aspect ratio
Dark background at fullscreen media
+ Scroll thumbnails horizontally