fix #656, separate Images and Raws at filtering

This commit is contained in:
tibbi 2018-06-16 23:48:12 +02:00
parent d2bac07abb
commit 5062d3f087
11 changed files with 61 additions and 18 deletions

View file

@ -87,7 +87,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
val type = when { val type = when {
file.isImageFast() -> TYPE_IMAGES file.isImageFast() -> TYPE_IMAGES
file.isVideoFast() -> TYPE_VIDEOS file.isVideoFast() -> TYPE_VIDEOS
else -> TYPE_GIFS file.isGif() -> TYPE_GIFS
else -> TYPE_RAWS
} }
mMedium = Medium(null, getFilenameFromUri(mUri!!), mUri.toString(), mUri!!.path.getParentPath(), 0, 0, file.length(), type) mMedium = Medium(null, getFilenameFromUri(mUri!!), mUri.toString(), mUri!!.path.getParentPath(), 0, 0, file.length(), type)

View file

@ -444,7 +444,8 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
val thumbnailType = when { val thumbnailType = when {
directory.tmb.isImageFast() -> TYPE_IMAGES directory.tmb.isImageFast() -> TYPE_IMAGES
directory.tmb.isVideoFast() -> TYPE_VIDEOS directory.tmb.isVideoFast() -> TYPE_VIDEOS
else -> TYPE_GIFS directory.tmb.isGif() -> TYPE_GIFS
else -> TYPE_RAWS
} }
activity.loadImage(thumbnailType, directory.tmb, dir_thumbnail, scrollHorizontally, animateGifs, cropThumbnails) activity.loadImage(thumbnailType, directory.tmb, dir_thumbnail, scrollHorizontally, animateGifs, cropThumbnails)

View file

@ -7,6 +7,7 @@ import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.extensions.config import com.simplemobiletools.gallery.extensions.config
import com.simplemobiletools.gallery.helpers.TYPE_GIFS import com.simplemobiletools.gallery.helpers.TYPE_GIFS
import com.simplemobiletools.gallery.helpers.TYPE_IMAGES import com.simplemobiletools.gallery.helpers.TYPE_IMAGES
import com.simplemobiletools.gallery.helpers.TYPE_RAWS
import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS
import kotlinx.android.synthetic.main.dialog_filter_media.view.* import kotlinx.android.synthetic.main.dialog_filter_media.view.*
@ -19,10 +20,11 @@ class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result:
filter_media_images.isChecked = filterMedia and TYPE_IMAGES != 0 filter_media_images.isChecked = filterMedia and TYPE_IMAGES != 0
filter_media_videos.isChecked = filterMedia and TYPE_VIDEOS != 0 filter_media_videos.isChecked = filterMedia and TYPE_VIDEOS != 0
filter_media_gifs.isChecked = filterMedia and TYPE_GIFS != 0 filter_media_gifs.isChecked = filterMedia and TYPE_GIFS != 0
filter_media_raws.isChecked = filterMedia and TYPE_RAWS != 0
} }
AlertDialog.Builder(activity) AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok, { dialog, which -> dialogConfirmed() }) .setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.create().apply { .create().apply {
activity.setupDialogStuff(view, this, R.string.filter_media) activity.setupDialogStuff(view, this, R.string.filter_media)
@ -37,6 +39,8 @@ class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result:
result += TYPE_VIDEOS result += TYPE_VIDEOS
if (view.filter_media_gifs.isChecked) if (view.filter_media_gifs.isChecked)
result += TYPE_GIFS result += TYPE_GIFS
if (view.filter_media_raws.isChecked)
result += TYPE_RAWS
activity.config.filterMedia = result activity.config.filterMedia = result
callback(result) callback(result)

View file

@ -2,6 +2,7 @@ package com.simplemobiletools.gallery.extensions
import com.simplemobiletools.gallery.helpers.TYPE_GIFS import com.simplemobiletools.gallery.helpers.TYPE_GIFS
import com.simplemobiletools.gallery.helpers.TYPE_IMAGES import com.simplemobiletools.gallery.helpers.TYPE_IMAGES
import com.simplemobiletools.gallery.helpers.TYPE_RAWS
import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS
import com.simplemobiletools.gallery.models.Medium import com.simplemobiletools.gallery.models.Medium
@ -19,5 +20,9 @@ fun ArrayList<Medium>.getDirMediaTypes(): Int {
types += TYPE_GIFS types += TYPE_GIFS
} }
if (any { it.isRaw() }) {
types += TYPE_RAWS
}
return types return types
} }

View file

@ -203,7 +203,7 @@ fun Context.checkAppendingHidden(path: String, hidden: String, includedFolders:
fun Context.loadImage(type: Int, path: String, target: MySquareImageView, horizontalScroll: Boolean, animateGifs: Boolean, cropThumbnails: Boolean) { fun Context.loadImage(type: Int, path: String, target: MySquareImageView, horizontalScroll: Boolean, animateGifs: Boolean, cropThumbnails: Boolean) {
target.isHorizontalScrolling = horizontalScroll target.isHorizontalScrolling = horizontalScroll
if (type == TYPE_IMAGES || type == TYPE_VIDEOS) { if (type == TYPE_IMAGES || type == TYPE_VIDEOS || type == TYPE_RAWS) {
if (type == TYPE_IMAGES && path.isPng()) { if (type == TYPE_IMAGES && path.isPng()) {
loadPng(path, target, cropThumbnails) loadPng(path, target, cropThumbnails)
} else { } else {
@ -289,7 +289,8 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
else -> filteredDirectories.filter { else -> filteredDirectories.filter {
(filterMedia and TYPE_IMAGES != 0 && it.types and TYPE_IMAGES != 0) || (filterMedia and TYPE_IMAGES != 0 && it.types and TYPE_IMAGES != 0) ||
(filterMedia and TYPE_VIDEOS != 0 && it.types and TYPE_VIDEOS != 0) || (filterMedia and TYPE_VIDEOS != 0 && it.types and TYPE_VIDEOS != 0) ||
(filterMedia and TYPE_GIFS != 0 && it.types and TYPE_GIFS != 0) (filterMedia and TYPE_GIFS != 0 && it.types and TYPE_GIFS != 0) ||
(filterMedia and TYPE_RAWS != 0 && it.types and TYPE_RAWS != 0)
} }
}) as ArrayList<Directory> }) as ArrayList<Directory>
@ -331,7 +332,8 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag
else -> media.filter { else -> media.filter {
(filterMedia and TYPE_IMAGES != 0 && it.type == TYPE_IMAGES) || (filterMedia and TYPE_IMAGES != 0 && it.type == TYPE_IMAGES) ||
(filterMedia and TYPE_VIDEOS != 0 && it.type == TYPE_VIDEOS) || (filterMedia and TYPE_VIDEOS != 0 && it.type == TYPE_VIDEOS) ||
(filterMedia and TYPE_GIFS != 0 && it.type == TYPE_GIFS) (filterMedia and TYPE_GIFS != 0 && it.type == TYPE_GIFS) ||
(filterMedia and TYPE_RAWS != 0 && it.type == TYPE_RAWS)
} }
}) as ArrayList<Medium> }) as ArrayList<Medium>

View file

@ -151,7 +151,7 @@ class Config(context: Context) : BaseConfig(context) {
set(darkBackground) = prefs.edit().putBoolean(DARK_BACKGROUND, darkBackground).apply() set(darkBackground) = prefs.edit().putBoolean(DARK_BACKGROUND, darkBackground).apply()
var filterMedia: Int var filterMedia: Int
get() = prefs.getInt(FILTER_MEDIA, TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS) get() = prefs.getInt(FILTER_MEDIA, TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS)
set(filterMedia) = prefs.edit().putInt(FILTER_MEDIA, filterMedia).apply() set(filterMedia) = prefs.edit().putInt(FILTER_MEDIA, filterMedia).apply()
var dirColumnCnt: Int var dirColumnCnt: Int

View file

@ -104,6 +104,7 @@ const val EXT_ALBUM = 1024
const val TYPE_IMAGES = 1 const val TYPE_IMAGES = 1
const val TYPE_VIDEOS = 2 const val TYPE_VIDEOS = 2
const val TYPE_GIFS = 4 const val TYPE_GIFS = 4
const val TYPE_RAWS = 8
const val LOCAITON_INTERNAL = 1 const val LOCAITON_INTERNAL = 1
const val LOCATION_SD = 2 const val LOCATION_SD = 2

View file

@ -70,6 +70,12 @@ class MediaFetcher(val context: Context) {
query.append("${MediaStore.Images.Media.DATA} LIKE ?") query.append("${MediaStore.Images.Media.DATA} LIKE ?")
} }
if (filterMedia and TYPE_RAWS != 0) {
rawExtensions.forEach {
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
}
}
var selectionQuery = query.toString().trim().removeSuffix("OR") var selectionQuery = query.toString().trim().removeSuffix("OR")
selectionQuery += ") AND " selectionQuery += ") AND "
return selectionQuery return selectionQuery
@ -93,6 +99,12 @@ class MediaFetcher(val context: Context) {
args.add("%.gif") args.add("%.gif")
} }
if (filterMedia and TYPE_RAWS != 0) {
rawExtensions.forEach {
args.add("%$it")
}
}
return args return args
} }
@ -160,8 +172,9 @@ class MediaFetcher(val context: Context) {
val isImage = filename.isImageFast() val isImage = filename.isImageFast()
val isVideo = if (isImage) false else filename.isVideoFast() val isVideo = if (isImage) false else filename.isVideoFast()
val isGif = if (isImage || isVideo) false else filename.isGif() val isGif = if (isImage || isVideo) false else filename.isGif()
val isRaw = if (isImage || isVideo || isGif) false else filename.isRaw()
if (!isImage && !isVideo && !isGif) if (!isImage && !isVideo && !isGif && !isRaw)
continue continue
if (isVideo && (isPickImage || filterMedia and TYPE_VIDEOS == 0)) if (isVideo && (isPickImage || filterMedia and TYPE_VIDEOS == 0))
@ -173,6 +186,9 @@ class MediaFetcher(val context: Context) {
if (isGif && filterMedia and TYPE_GIFS == 0) if (isGif && filterMedia and TYPE_GIFS == 0)
continue continue
if (isRaw && filterMedia and TYPE_RAWS == 0)
continue
if (!showHidden && filename.startsWith('.')) if (!showHidden && filename.startsWith('.'))
continue continue
@ -190,7 +206,8 @@ class MediaFetcher(val context: Context) {
val type = when { val type = when {
isImage -> TYPE_IMAGES isImage -> TYPE_IMAGES
isVideo -> TYPE_VIDEOS isVideo -> TYPE_VIDEOS
else -> TYPE_GIFS isGif -> TYPE_GIFS
else -> TYPE_RAWS
} }
val medium = Medium(null, filename, file.absolutePath, folder, lastModified, dateTaken, size, type) val medium = Medium(null, filename, file.absolutePath, folder, lastModified, dateTaken, size, type)
@ -214,8 +231,9 @@ class MediaFetcher(val context: Context) {
val isImage = filename.isImageFast() val isImage = filename.isImageFast()
val isVideo = if (isImage) false else filename.isVideoFast() val isVideo = if (isImage) false else filename.isVideoFast()
val isGif = if (isImage || isVideo) false else filename.isGif() val isGif = if (isImage || isVideo) false else filename.isGif()
val isRaw = if (isImage || isVideo || isGif) false else filename.isRaw()
if (!isImage && !isVideo && !isGif) if (!isImage && !isVideo && !isGif || !isRaw)
continue continue
if (isVideo && (isPickImage || filterMedia and TYPE_VIDEOS == 0)) if (isVideo && (isPickImage || filterMedia and TYPE_VIDEOS == 0))
@ -227,6 +245,9 @@ class MediaFetcher(val context: Context) {
if (isGif && filterMedia and TYPE_GIFS == 0) if (isGif && filterMedia and TYPE_GIFS == 0)
continue continue
if (isRaw && filterMedia and TYPE_RAWS == 0)
continue
if (!showHidden && filename.startsWith('.')) if (!showHidden && filename.startsWith('.'))
continue continue
@ -240,7 +261,8 @@ class MediaFetcher(val context: Context) {
val type = when { val type = when {
isImage -> TYPE_IMAGES isImage -> TYPE_IMAGES
isVideo -> TYPE_VIDEOS isVideo -> TYPE_VIDEOS
else -> TYPE_GIFS isGif -> TYPE_GIFS
else -> TYPE_RAWS
} }
val path = Uri.decode(file.uri.toString().replaceFirst("${context.config.OTGTreeUri}/document/${context.config.OTGPartition}%3A", OTG_PATH)) val path = Uri.decode(file.uri.toString().replaceFirst("${context.config.OTGTreeUri}/document/${context.config.OTGPartition}%3A", OTG_PATH))

View file

@ -6,13 +6,13 @@ import android.arch.persistence.room.Index
import android.arch.persistence.room.PrimaryKey import android.arch.persistence.room.PrimaryKey
import com.simplemobiletools.commons.extensions.formatDate import com.simplemobiletools.commons.extensions.formatDate
import com.simplemobiletools.commons.extensions.formatSize import com.simplemobiletools.commons.extensions.formatSize
import com.simplemobiletools.commons.extensions.isRaw
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
import com.simplemobiletools.commons.helpers.SORT_BY_NAME import com.simplemobiletools.commons.helpers.SORT_BY_NAME
import com.simplemobiletools.commons.helpers.SORT_BY_PATH import com.simplemobiletools.commons.helpers.SORT_BY_PATH
import com.simplemobiletools.commons.helpers.SORT_BY_SIZE import com.simplemobiletools.commons.helpers.SORT_BY_SIZE
import com.simplemobiletools.gallery.helpers.TYPE_GIFS import com.simplemobiletools.gallery.helpers.TYPE_GIFS
import com.simplemobiletools.gallery.helpers.TYPE_IMAGES import com.simplemobiletools.gallery.helpers.TYPE_IMAGES
import com.simplemobiletools.gallery.helpers.TYPE_RAWS
import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS
import java.io.Serializable import java.io.Serializable
@ -37,7 +37,7 @@ data class Medium(
fun isVideo() = type == TYPE_VIDEOS fun isVideo() = type == TYPE_VIDEOS
fun isRaw() = path.isRaw() fun isRaw() = type == TYPE_RAWS
fun getBubbleText(sorting: Int) = when { fun getBubbleText(sorting: Int) = when {
sorting and SORT_BY_NAME != 0 -> name sorting and SORT_BY_NAME != 0 -> name

View file

@ -3,14 +3,12 @@ package com.simplemobiletools.gallery.receivers
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.simplemobiletools.commons.extensions.getFilenameFromPath import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.extensions.getParentPath
import com.simplemobiletools.commons.extensions.isImageFast
import com.simplemobiletools.commons.extensions.isVideoFast
import com.simplemobiletools.commons.helpers.REFRESH_PATH import com.simplemobiletools.commons.helpers.REFRESH_PATH
import com.simplemobiletools.gallery.extensions.galleryDB import com.simplemobiletools.gallery.extensions.galleryDB
import com.simplemobiletools.gallery.helpers.TYPE_GIFS import com.simplemobiletools.gallery.helpers.TYPE_GIFS
import com.simplemobiletools.gallery.helpers.TYPE_IMAGES import com.simplemobiletools.gallery.helpers.TYPE_IMAGES
import com.simplemobiletools.gallery.helpers.TYPE_RAWS
import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS
import com.simplemobiletools.gallery.models.Medium import com.simplemobiletools.gallery.models.Medium
import java.io.File import java.io.File
@ -29,6 +27,7 @@ class RefreshMediaReceiver : BroadcastReceiver() {
private fun getFileType(path: String) = when { private fun getFileType(path: String) = when {
path.isImageFast() -> TYPE_IMAGES path.isImageFast() -> TYPE_IMAGES
path.isVideoFast() -> TYPE_VIDEOS path.isVideoFast() -> TYPE_VIDEOS
else -> TYPE_GIFS path.isGif() -> TYPE_GIFS
else -> TYPE_RAWS
} }
} }

View file

@ -33,4 +33,12 @@
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:text="@string/gifs"/> android:text="@string/gifs"/>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/filter_media_raws"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:text="@string/raw_images"/>
</LinearLayout> </LinearLayout>