mirror of
				https://github.com/SimpleMobileTools/Simple-Gallery.git
				synced 2025-06-05 21:59:19 +02:00 
			
		
		
		
	fix #972, use GifTextureView for displaying gifs, do not pause/resume them
This commit is contained in:
		@@ -45,7 +45,7 @@ import it.sephiroth.android.library.exif2.ExifInterface
 | 
			
		||||
import kotlinx.android.synthetic.main.pager_photo_item.view.*
 | 
			
		||||
import org.apache.sanselan.common.byteSources.ByteSourceInputStream
 | 
			
		||||
import org.apache.sanselan.formats.jpeg.JpegImageParser
 | 
			
		||||
import pl.droidsonroids.gif.GifDrawable
 | 
			
		||||
import pl.droidsonroids.gif.InputSource
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.io.FileOutputStream
 | 
			
		||||
import java.util.*
 | 
			
		||||
@@ -66,7 +66,6 @@ class PhotoFragment : ViewPagerFragment() {
 | 
			
		||||
    private var isPanorama = false
 | 
			
		||||
    private var isSubsamplingVisible = false    // checking view.visibility is unreliable, use an extra variable for it
 | 
			
		||||
    private var imageOrientation = -1
 | 
			
		||||
    private var gifDrawable: GifDrawable? = null
 | 
			
		||||
    private var loadZoomableViewHandler = Handler()
 | 
			
		||||
 | 
			
		||||
    private var storedShowExtendedDetails = false
 | 
			
		||||
@@ -187,9 +186,7 @@ class PhotoFragment : ViewPagerFragment() {
 | 
			
		||||
        super.setMenuVisibility(menuVisible)
 | 
			
		||||
        isFragmentVisible = menuVisible
 | 
			
		||||
        if (wasInit) {
 | 
			
		||||
            if (medium.isGIF()) {
 | 
			
		||||
                gifFragmentVisibilityChanged(menuVisible)
 | 
			
		||||
            } else {
 | 
			
		||||
            if (!medium.isGIF()) {
 | 
			
		||||
                photoFragmentVisibilityChanged(menuVisible)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -220,14 +217,6 @@ class PhotoFragment : ViewPagerFragment() {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun gifFragmentVisibilityChanged(isVisible: Boolean) {
 | 
			
		||||
        if (isVisible) {
 | 
			
		||||
            gifDrawable?.start()
 | 
			
		||||
        } else {
 | 
			
		||||
            gifDrawable?.stop()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun photoFragmentVisibilityChanged(isVisible: Boolean) {
 | 
			
		||||
        if (isVisible) {
 | 
			
		||||
            scheduleZoomableView()
 | 
			
		||||
@@ -269,22 +258,18 @@ class PhotoFragment : ViewPagerFragment() {
 | 
			
		||||
    private fun loadGif() {
 | 
			
		||||
        try {
 | 
			
		||||
            val pathToLoad = getPathToLoad(medium)
 | 
			
		||||
            gifDrawable = if (pathToLoad.startsWith("content://") || pathToLoad.startsWith("file://")) {
 | 
			
		||||
                GifDrawable(context!!.contentResolver, Uri.parse(pathToLoad))
 | 
			
		||||
            val source = if (pathToLoad.startsWith("content://") || pathToLoad.startsWith("file://")) {
 | 
			
		||||
                InputSource.UriSource(context!!.contentResolver, Uri.parse(pathToLoad))
 | 
			
		||||
            } else {
 | 
			
		||||
                GifDrawable(pathToLoad)
 | 
			
		||||
                InputSource.FileSource(pathToLoad)
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!isFragmentVisible) {
 | 
			
		||||
                gifDrawable!!.stop()
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            view.photo_view.setImageDrawable(gifDrawable)
 | 
			
		||||
            view.photo_view.beGone()
 | 
			
		||||
            view.gif_view.beVisible()
 | 
			
		||||
            view.gif_view.setInputSource(source)
 | 
			
		||||
        } catch (e: Exception) {
 | 
			
		||||
            gifDrawable = null
 | 
			
		||||
            loadBitmap()
 | 
			
		||||
        } catch (e: OutOfMemoryError) {
 | 
			
		||||
            gifDrawable = null
 | 
			
		||||
            loadBitmap()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,12 @@
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
        android:layout_height="match_parent"/>
 | 
			
		||||
 | 
			
		||||
    <pl.droidsonroids.gif.GifTextureView
 | 
			
		||||
        android:id="@+id/gif_view"
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
        android:layout_height="match_parent"
 | 
			
		||||
        android:visibility="gone"/>
 | 
			
		||||
 | 
			
		||||
    <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
 | 
			
		||||
        android:id="@+id/subsampling_view"
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
@@ -45,8 +51,8 @@
 | 
			
		||||
        android:id="@+id/photo_brightness_controller"
 | 
			
		||||
        android:layout_width="@dimen/media_side_slider_width"
 | 
			
		||||
        android:layout_height="match_parent"
 | 
			
		||||
        android:layout_alignParentLeft="true"
 | 
			
		||||
        android:layout_alignParentStart="true"/>
 | 
			
		||||
        android:layout_alignParentStart="true"
 | 
			
		||||
        android:layout_alignParentLeft="true"/>
 | 
			
		||||
 | 
			
		||||
    <TextView
 | 
			
		||||
        android:id="@+id/slide_info"
 | 
			
		||||
@@ -58,10 +64,10 @@
 | 
			
		||||
        android:alpha="0"
 | 
			
		||||
        android:background="@drawable/black_rounded_background"
 | 
			
		||||
        android:gravity="center"
 | 
			
		||||
        android:paddingBottom="@dimen/medium_margin"
 | 
			
		||||
        android:paddingLeft="@dimen/activity_margin"
 | 
			
		||||
        android:paddingRight="@dimen/activity_margin"
 | 
			
		||||
        android:paddingTop="@dimen/medium_margin"
 | 
			
		||||
        android:paddingRight="@dimen/activity_margin"
 | 
			
		||||
        android:paddingBottom="@dimen/medium_margin"
 | 
			
		||||
        android:textColor="@android:color/white"
 | 
			
		||||
        android:textSize="@dimen/extra_big_text_size"/>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user