use GifDrawables at thumbnails too
This commit is contained in:
parent
1c3aab82ff
commit
4fedc05571
6 changed files with 58 additions and 58 deletions
|
@ -125,11 +125,17 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
config.isThirdPartyIntent = false
|
config.isThirdPartyIntent = false
|
||||||
if (mStoredAnimateGifs != config.animateGifs) {
|
if (mStoredAnimateGifs != config.animateGifs) {
|
||||||
directories_grid.adapter?.notifyDataSetChanged()
|
(directories_grid.adapter as? DirectoryAdapter)?.apply {
|
||||||
|
animateGifs = config.animateGifs
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mStoredCropThumbnails != config.cropThumbnails) {
|
if (mStoredCropThumbnails != config.cropThumbnails) {
|
||||||
directories_grid.adapter?.notifyDataSetChanged()
|
(directories_grid.adapter as? DirectoryAdapter)?.apply {
|
||||||
|
cropThumbnails = config.cropThumbnails
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mStoredShowMediaCount != config.showMediaCount) {
|
if (mStoredShowMediaCount != config.showMediaCount) {
|
||||||
|
|
|
@ -89,12 +89,18 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (mShowAll && mStoredAnimateGifs != config.animateGifs) {
|
if (mStoredAnimateGifs != config.animateGifs) {
|
||||||
media_grid.adapter?.notifyDataSetChanged()
|
(media_grid.adapter as? MediaAdapter)?.apply {
|
||||||
|
animateGifs = config.animateGifs
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mStoredCropThumbnails != config.cropThumbnails) {
|
if (mStoredCropThumbnails != config.cropThumbnails) {
|
||||||
media_grid.adapter?.notifyDataSetChanged()
|
(media_grid.adapter as? MediaAdapter)?.apply {
|
||||||
|
cropThumbnails = config.cropThumbnails
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mStoredScrollHorizontally != config.scrollHorizontally) {
|
if (mStoredScrollHorizontally != config.scrollHorizontally) {
|
||||||
|
|
|
@ -30,11 +30,13 @@ import java.util.*
|
||||||
class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Directory>, val listener: DirOperationsListener?, val isPickIntent: Boolean,
|
class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Directory>, val listener: DirOperationsListener?, val isPickIntent: Boolean,
|
||||||
val itemClick: (Directory) -> Unit) : RecyclerView.Adapter<DirectoryAdapter.ViewHolder>() {
|
val itemClick: (Directory) -> Unit) : RecyclerView.Adapter<DirectoryAdapter.ViewHolder>() {
|
||||||
|
|
||||||
val config = activity.config
|
private val config = activity.config
|
||||||
var actMode: ActionMode? = null
|
var actMode: ActionMode? = null
|
||||||
var primaryColor = config.primaryColor
|
var primaryColor = config.primaryColor
|
||||||
var scrollVertically = !config.scrollHorizontally
|
var scrollVertically = !config.scrollHorizontally
|
||||||
var showMediaCount = config.showMediaCount
|
var showMediaCount = config.showMediaCount
|
||||||
|
var animateGifs = config.animateGifs
|
||||||
|
var cropThumbnails = config.cropThumbnails
|
||||||
|
|
||||||
private val multiSelector = MultiSelector()
|
private val multiSelector = MultiSelector()
|
||||||
private val isListViewType = config.viewTypeFolders == VIEW_TYPE_LIST
|
private val isListViewType = config.viewTypeFolders == VIEW_TYPE_LIST
|
||||||
|
@ -353,7 +355,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
val dir = dirs[position]
|
val dir = dirs[position]
|
||||||
itemViews.put(position, holder.bindView(dir, pinnedFolders.contains(dir.path), scrollVertically, isListViewType, textColor, showMediaCount))
|
itemViews.put(position, holder.bindView(dir, pinnedFolders.contains(dir.path), scrollVertically, isListViewType, textColor, showMediaCount, animateGifs, cropThumbnails))
|
||||||
toggleItemSelection(selectedPositions.contains(position), position)
|
toggleItemSelection(selectedPositions.contains(position), position)
|
||||||
holder.itemView.tag = holder
|
holder.itemView.tag = holder
|
||||||
}
|
}
|
||||||
|
@ -418,12 +420,13 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
class ViewHolder(val view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
|
class ViewHolder(val view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
|
||||||
val multiSelector: MultiSelector, val listener: DirOperationsListener?, val isPickIntent: Boolean, val itemClick: (Directory) -> (Unit)) :
|
val multiSelector: MultiSelector, val listener: DirOperationsListener?, val isPickIntent: Boolean, val itemClick: (Directory) -> (Unit)) :
|
||||||
SwappingHolder(view, MultiSelector()) {
|
SwappingHolder(view, MultiSelector()) {
|
||||||
fun bindView(directory: Directory, isPinned: Boolean, scrollVertically: Boolean, isListView: Boolean, textColor: Int, showMediaCount: Boolean): View {
|
fun bindView(directory: Directory, isPinned: Boolean, scrollVertically: Boolean, isListView: Boolean, textColor: Int, showMediaCount: Boolean,
|
||||||
|
animateGifs: Boolean, cropThumbnails: Boolean): View {
|
||||||
itemView.apply {
|
itemView.apply {
|
||||||
dir_name.text = directory.name
|
dir_name.text = directory.name
|
||||||
dir_path?.text = "${directory.path.substringBeforeLast("/")}/"
|
dir_path?.text = "${directory.path.substringBeforeLast("/")}/"
|
||||||
photo_cnt.text = directory.mediaCnt.toString()
|
photo_cnt.text = directory.mediaCnt.toString()
|
||||||
activity.loadImage(directory.tmb, dir_thumbnail, scrollVertically)
|
activity.loadImage(directory.tmb, dir_thumbnail, scrollVertically, animateGifs, cropThumbnails)
|
||||||
dir_pin.beVisibleIf(isPinned)
|
dir_pin.beVisibleIf(isPinned)
|
||||||
dir_sd_card.beVisibleIf(activity.isPathOnSD(directory.path))
|
dir_sd_card.beVisibleIf(activity.isPathOnSD(directory.path))
|
||||||
photo_cnt.beVisibleIf(showMediaCount)
|
photo_cnt.beVisibleIf(showMediaCount)
|
||||||
|
|
|
@ -28,18 +28,21 @@ import java.util.*
|
||||||
class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>, val listener: MediaOperationsListener?, val isPickIntent: Boolean,
|
class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>, val listener: MediaOperationsListener?, val isPickIntent: Boolean,
|
||||||
val allowMultiplePicks: Boolean, val itemClick: (Medium) -> Unit) : RecyclerView.Adapter<MediaAdapter.ViewHolder>() {
|
val allowMultiplePicks: Boolean, val itemClick: (Medium) -> Unit) : RecyclerView.Adapter<MediaAdapter.ViewHolder>() {
|
||||||
|
|
||||||
val multiSelector = MultiSelector()
|
private val config = activity.config
|
||||||
val config = activity.config
|
|
||||||
val isListViewType = config.viewTypeFiles == VIEW_TYPE_LIST
|
|
||||||
var skipConfirmationDialog = false
|
|
||||||
|
|
||||||
var actMode: ActionMode? = null
|
var actMode: ActionMode? = null
|
||||||
var itemViews = SparseArray<View>()
|
|
||||||
val selectedPositions = HashSet<Int>()
|
|
||||||
var primaryColor = config.primaryColor
|
var primaryColor = config.primaryColor
|
||||||
var textColor = config.textColor
|
|
||||||
var displayFilenames = config.displayFileNames
|
|
||||||
var scrollVertically = !config.scrollHorizontally
|
var scrollVertically = !config.scrollHorizontally
|
||||||
|
var animateGifs = config.animateGifs
|
||||||
|
var cropThumbnails = config.cropThumbnails
|
||||||
|
|
||||||
|
private val multiSelector = MultiSelector()
|
||||||
|
private val isListViewType = config.viewTypeFiles == VIEW_TYPE_LIST
|
||||||
|
private var skipConfirmationDialog = false
|
||||||
|
|
||||||
|
private var itemViews = SparseArray<View>()
|
||||||
|
private val selectedPositions = HashSet<Int>()
|
||||||
|
private var textColor = config.textColor
|
||||||
|
private var displayFilenames = config.displayFileNames
|
||||||
|
|
||||||
fun toggleItemSelection(select: Boolean, pos: Int) {
|
fun toggleItemSelection(select: Boolean, pos: Int) {
|
||||||
if (select) {
|
if (select) {
|
||||||
|
@ -284,7 +287,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
itemViews.put(position, holder.bindView(media[position], displayFilenames, scrollVertically, isListViewType, textColor))
|
itemViews.put(position, holder.bindView(media[position], displayFilenames, scrollVertically, isListViewType, textColor, animateGifs, cropThumbnails))
|
||||||
toggleItemSelection(selectedPositions.contains(position), position)
|
toggleItemSelection(selectedPositions.contains(position), position)
|
||||||
holder.itemView.tag = holder
|
holder.itemView.tag = holder
|
||||||
}
|
}
|
||||||
|
@ -355,12 +358,13 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
val multiSelector: MultiSelector, val listener: MediaOperationsListener?, val allowMultiplePicks: Boolean,
|
val multiSelector: MultiSelector, val listener: MediaOperationsListener?, val allowMultiplePicks: Boolean,
|
||||||
val itemClick: (Medium) -> (Unit)) :
|
val itemClick: (Medium) -> (Unit)) :
|
||||||
SwappingHolder(view, MultiSelector()) {
|
SwappingHolder(view, MultiSelector()) {
|
||||||
fun bindView(medium: Medium, displayFilenames: Boolean, scrollVertically: Boolean, isListViewType: Boolean, textColor: Int): View {
|
fun bindView(medium: Medium, displayFilenames: Boolean, scrollVertically: Boolean, isListViewType: Boolean, textColor: Int,
|
||||||
|
animateGifs: Boolean, cropThumbnails: Boolean): View {
|
||||||
itemView.apply {
|
itemView.apply {
|
||||||
play_outline.visibility = if (medium.video) View.VISIBLE else View.GONE
|
play_outline.visibility = if (medium.video) View.VISIBLE else View.GONE
|
||||||
photo_name.beVisibleIf(displayFilenames || isListViewType)
|
photo_name.beVisibleIf(displayFilenames || isListViewType)
|
||||||
photo_name.text = medium.name
|
photo_name.text = medium.name
|
||||||
activity.loadImage(medium.path, medium_thumbnail, scrollVertically)
|
activity.loadImage(medium.path, medium_thumbnail, scrollVertically, animateGifs, cropThumbnails)
|
||||||
|
|
||||||
if (isListViewType) {
|
if (isListViewType) {
|
||||||
photo_name.setTextColor(textColor)
|
photo_name.setTextColor(textColor)
|
||||||
|
|
|
@ -6,6 +6,7 @@ import android.net.Uri
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.ImageView
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.load.DecodeFormat
|
import com.bumptech.glide.load.DecodeFormat
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
@ -22,6 +23,7 @@ import com.simplemobiletools.gallery.helpers.*
|
||||||
import com.simplemobiletools.gallery.models.Directory
|
import com.simplemobiletools.gallery.models.Directory
|
||||||
import com.simplemobiletools.gallery.models.Medium
|
import com.simplemobiletools.gallery.models.Medium
|
||||||
import com.simplemobiletools.gallery.views.MySquareImageView
|
import com.simplemobiletools.gallery.views.MySquareImageView
|
||||||
|
import pl.droidsonroids.gif.GifDrawable
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -199,24 +201,28 @@ fun SimpleActivity.toggleFileVisibility(oldFile: File, hide: Boolean, callback:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.loadImage(path: String, target: MySquareImageView, verticalScroll: Boolean) {
|
fun Activity.loadImage(path: String, target: MySquareImageView, verticalScroll: Boolean, animateGifs: Boolean, cropThumbnails: Boolean) {
|
||||||
target.isVerticalScrolling = verticalScroll
|
target.isVerticalScrolling = verticalScroll
|
||||||
if (path.isImageFast() || path.isVideoFast()) {
|
if (path.isImageFast() || path.isVideoFast()) {
|
||||||
if (path.isPng()) {
|
if (path.isPng()) {
|
||||||
loadPng(path, target)
|
loadPng(path, target, cropThumbnails)
|
||||||
} else {
|
} else {
|
||||||
loadJpg(path, target)
|
loadJpg(path, target, cropThumbnails)
|
||||||
}
|
}
|
||||||
} else if (path.isGif()) {
|
} else if (path.isGif()) {
|
||||||
if (config.animateGifs) {
|
val gifDrawable = GifDrawable(path)
|
||||||
loadAnimatedGif(path, target)
|
target.setImageDrawable(gifDrawable)
|
||||||
|
if (animateGifs) {
|
||||||
|
gifDrawable.start()
|
||||||
} else {
|
} else {
|
||||||
loadStaticGif(path, target)
|
gifDrawable.stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
target.scaleType = if (cropThumbnails) ImageView.ScaleType.CENTER_CROP else ImageView.ScaleType.FIT_CENTER
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.loadPng(path: String, target: MySquareImageView) {
|
fun Activity.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boolean) {
|
||||||
val options = RequestOptions()
|
val options = RequestOptions()
|
||||||
.signature(path.getFileSignature())
|
.signature(path.getFileSignature())
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
|
@ -226,11 +232,11 @@ fun Activity.loadPng(path: String, target: MySquareImageView) {
|
||||||
.asBitmap()
|
.asBitmap()
|
||||||
.load(path)
|
.load(path)
|
||||||
|
|
||||||
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
if (cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||||
builder.apply(options).into(target)
|
builder.apply(options).into(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.loadJpg(path: String, target: MySquareImageView) {
|
fun Activity.loadJpg(path: String, target: MySquareImageView, cropThumbnails: Boolean) {
|
||||||
val options = RequestOptions()
|
val options = RequestOptions()
|
||||||
.signature(path.getFileSignature())
|
.signature(path.getFileSignature())
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
|
@ -238,36 +244,10 @@ fun Activity.loadJpg(path: String, target: MySquareImageView) {
|
||||||
val builder = Glide.with(applicationContext)
|
val builder = Glide.with(applicationContext)
|
||||||
.load(path)
|
.load(path)
|
||||||
|
|
||||||
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
if (cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||||
builder.apply(options).transition(DrawableTransitionOptions.withCrossFade()).into(target)
|
builder.apply(options).transition(DrawableTransitionOptions.withCrossFade()).into(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.loadAnimatedGif(path: String, target: MySquareImageView) {
|
|
||||||
val options = RequestOptions()
|
|
||||||
.signature(path.getFileSignature())
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
|
||||||
|
|
||||||
val builder = Glide.with(applicationContext)
|
|
||||||
.asGif()
|
|
||||||
.load(path)
|
|
||||||
|
|
||||||
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
|
||||||
builder.apply(options).transition(DrawableTransitionOptions.withCrossFade()).into(target)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Activity.loadStaticGif(path: String, target: MySquareImageView) {
|
|
||||||
val options = RequestOptions()
|
|
||||||
.signature(path.getFileSignature())
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
|
||||||
|
|
||||||
val builder = Glide.with(applicationContext)
|
|
||||||
.asBitmap()
|
|
||||||
.load(path)
|
|
||||||
|
|
||||||
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
|
||||||
builder.apply(options).into(target)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Activity.getCachedDirectories(): ArrayList<Directory> {
|
fun Activity.getCachedDirectories(): ArrayList<Directory> {
|
||||||
val token = object : TypeToken<List<Directory>>() {}.type
|
val token = object : TypeToken<List<Directory>>() {}.type
|
||||||
return Gson().fromJson<ArrayList<Directory>>(config.directories, token) ?: ArrayList<Directory>(1)
|
return Gson().fromJson<ArrayList<Directory>>(config.directories, token) ?: ArrayList<Directory>(1)
|
||||||
|
|
|
@ -9,7 +9,8 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/gif_view"
|
android:id="@+id/gif_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"/>
|
android:layout_height="match_parent"
|
||||||
|
android:scaleType="fitCenter"/>
|
||||||
|
|
||||||
<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||||
android:id="@+id/subsampling_view"
|
android:id="@+id/subsampling_view"
|
||||||
|
|
Loading…
Reference in a new issue