diff --git a/app/build.gradle b/app/build.gradle index 4b5446f43..0bd65828a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,13 +37,13 @@ android { } dependencies { - compile 'com.simplemobiletools:commons:2.32.5' + compile 'com.simplemobiletools:commons:2.32.6' 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' compile 'com.google.code.gson:gson:2.8.0' - compile 'com.github.chrisbanes:PhotoView:2.1.2' compile 'it.sephiroth.android.exif:library:1.0.1' + compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.8' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1' 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 513aaca5d..7d76be8a3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/activity.kt @@ -130,7 +130,7 @@ fun Activity.launchCamera() { fun SimpleActivity.launchAbout() { startAboutActivity(R.string.app_name, LICENSE_KOTLIN or LICENSE_GLIDE or LICENSE_CROPPER or LICENSE_MULTISELECT or LICENSE_RTL - or LICENSE_PHOTOVIEW or LICENSE_SUBSAMPLING or LICENSE_PATTERN, BuildConfig.VERSION_NAME) + or LICENSE_SUBSAMPLING or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GIF_DRAWABLE, BuildConfig.VERSION_NAME) } fun AppCompatActivity.showSystemUI() { 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 c1d9090d7..20037228e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt @@ -13,12 +13,10 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.bumptech.glide.Glide -import com.bumptech.glide.Priority import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.DecodeFormat import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.GlideException -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.Target @@ -33,6 +31,7 @@ import com.simplemobiletools.gallery.helpers.MEDIUM import com.simplemobiletools.gallery.models.Medium import it.sephiroth.android.library.exif2.ExifInterface import kotlinx.android.synthetic.main.pager_photo_item.view.* +import pl.droidsonroids.gif.GifDrawable import java.io.File import java.io.FileOutputStream @@ -41,6 +40,7 @@ class PhotoFragment : ViewPagerFragment() { private var wasInit = false private var storedShowExtendedDetails = false private var storedExtendedDetails = 0 + private var gifDrawable: GifDrawable? = null lateinit var view: ViewGroup lateinit var medium: Medium @@ -80,18 +80,8 @@ class PhotoFragment : ViewPagerFragment() { } } - view.subsampling_view.setOnClickListener({ photoClicked() }) - view.photo_view.apply { - maximumScale = 8f - mediumScale = 3f - setOnOutsidePhotoTapListener { - photoClicked() - } - - setOnPhotoTapListener { view, x, y -> - photoClicked() - } - } + view.subsampling_view.setOnClickListener { photoClicked() } + view.gif_view.setOnClickListener { photoClicked() } loadImage() checkExtendedDetails() @@ -117,14 +107,30 @@ class PhotoFragment : ViewPagerFragment() { super.setMenuVisibility(menuVisible) isFragmentVisible = menuVisible if (wasInit) { - if (menuVisible) { - addZoomableView() + if (medium.isGif()) { + gifFragmentVisibilityChanged(menuVisible) } else { - view.subsampling_view.apply { - recycle() - beGone() - background = ColorDrawable(Color.TRANSPARENT) - } + photoFragmentVisibilityChanged(menuVisible) + } + } + } + + private fun gifFragmentVisibilityChanged(isVisible: Boolean) { + if (isVisible) { + gifDrawable?.start() + } else { + gifDrawable?.stop() + } + } + + private fun photoFragmentVisibilityChanged(isVisible: Boolean) { + if (isVisible) { + addZoomableView() + } else { + view.subsampling_view.apply { + recycle() + beGone() + background = ColorDrawable(Color.TRANSPARENT) } } } @@ -149,16 +155,11 @@ class PhotoFragment : ViewPagerFragment() { private fun loadImage() { if (medium.isGif()) { - val options = RequestOptions() - .priority(if (isFragmentVisible) Priority.IMMEDIATE else Priority.LOW) - .diskCacheStrategy(DiskCacheStrategy.DATA) + gifDrawable = GifDrawable(medium.path) + if (!isFragmentVisible) + gifDrawable!!.stop() - Glide.with(this) - .asGif() - .load(medium.path) - .transition(DrawableTransitionOptions.withCrossFade()) - .apply(options) - .into(view.photo_view) + view.gif_view.setImageDrawable(gifDrawable) } else { loadBitmap() } @@ -187,7 +188,7 @@ class PhotoFragment : ViewPagerFragment() { addZoomableView() return false } - }).into(view.photo_view) + }).into(view.gif_view) } else { val options = RequestOptions() .diskCacheStrategy(DiskCacheStrategy.NONE) @@ -198,7 +199,7 @@ class PhotoFragment : ViewPagerFragment() { .load(medium.path) .thumbnail(0.2f) .apply(options) - .into(view.photo_view) + .into(view.gif_view) } } @@ -286,7 +287,7 @@ class PhotoFragment : ViewPagerFragment() { super.onDestroyView() context.isKitkatPlus() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && !activity.isDestroyed) { - Glide.with(context).clear(view.photo_view) + Glide.with(context).clear(view.gif_view) } } diff --git a/app/src/main/res/layout/pager_photo_item.xml b/app/src/main/res/layout/pager_photo_item.xml index e48b6b90a..5f170ca80 100644 --- a/app/src/main/res/layout/pager_photo_item.xml +++ b/app/src/main/res/layout/pager_photo_item.xml @@ -6,8 +6,8 @@ android:layout_width="match_parent" android:layout_height="match_parent"> -