stop media fetching on the calling activity pause
This commit is contained in:
parent
7cc1a9ce17
commit
5c7dfb87be
5 changed files with 32 additions and 9 deletions
|
@ -61,7 +61,6 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
private var mLoadedInitialPhotos = false
|
private var mLoadedInitialPhotos = false
|
||||||
private var mLatestMediaId = 0L
|
private var mLatestMediaId = 0L
|
||||||
private var mLastMediaHandler = Handler()
|
private var mLastMediaHandler = Handler()
|
||||||
|
|
||||||
private var mCurrAsyncTask: GetDirectoriesAsynctask? = null
|
private var mCurrAsyncTask: GetDirectoriesAsynctask? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
@ -164,6 +163,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
mStoredTextColor = config.textColor
|
mStoredTextColor = config.textColor
|
||||||
directories_grid.listener = null
|
directories_grid.listener = null
|
||||||
mLastMediaHandler.removeCallbacksAndMessages(null)
|
mLastMediaHandler.removeCallbacksAndMessages(null)
|
||||||
|
mCurrAsyncTask?.stopFetching()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
|
|
@ -55,6 +55,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
private var mLastDrawnHashCode = 0
|
private var mLastDrawnHashCode = 0
|
||||||
private var mLatestMediaId = 0L
|
private var mLatestMediaId = 0L
|
||||||
private var mLastMediaHandler = Handler()
|
private var mLastMediaHandler = Handler()
|
||||||
|
private var mCurrAsyncTask: GetMediaAsynctask? = null
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
var mMedia = ArrayList<Medium>()
|
var mMedia = ArrayList<Medium>()
|
||||||
|
@ -122,6 +123,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
mStoredTextColor = config.textColor
|
mStoredTextColor = config.textColor
|
||||||
media_grid.listener = null
|
media_grid.listener = null
|
||||||
mLastMediaHandler.removeCallbacksAndMessages(null)
|
mLastMediaHandler.removeCallbacksAndMessages(null)
|
||||||
|
mCurrAsyncTask?.stopFetching()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
@ -344,9 +346,10 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
mLoadedInitialPhotos = true
|
mLoadedInitialPhotos = true
|
||||||
GetMediaAsynctask(applicationContext, mPath, mIsGetVideoIntent, mIsGetImageIntent, mShowAll) {
|
mCurrAsyncTask = GetMediaAsynctask(applicationContext, mPath, mIsGetVideoIntent, mIsGetImageIntent, mShowAll) {
|
||||||
gotMedia(it)
|
gotMedia(it)
|
||||||
}.execute()
|
}
|
||||||
|
mCurrAsyncTask!!.execute()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isDirEmpty(): Boolean {
|
private fun isDirEmpty(): Boolean {
|
||||||
|
|
|
@ -18,13 +18,14 @@ import java.io.File
|
||||||
|
|
||||||
class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, val isPickImage: Boolean,
|
class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, val isPickImage: Boolean,
|
||||||
val callback: (dirs: ArrayList<Directory>) -> Unit) : AsyncTask<Void, Void, ArrayList<Directory>>() {
|
val callback: (dirs: ArrayList<Directory>) -> Unit) : AsyncTask<Void, Void, ArrayList<Directory>>() {
|
||||||
|
val mediaFetcher = MediaFetcher(context)
|
||||||
|
|
||||||
override fun doInBackground(vararg params: Void): ArrayList<Directory> {
|
override fun doInBackground(vararg params: Void): ArrayList<Directory> {
|
||||||
if (!context.hasWriteStoragePermission())
|
if (!context.hasWriteStoragePermission())
|
||||||
return ArrayList()
|
return ArrayList()
|
||||||
|
|
||||||
val config = context.config
|
val config = context.config
|
||||||
val groupedMedia = MediaFetcher(context).getMediaByDirectories(isPickVideo, isPickImage)
|
val groupedMedia = mediaFetcher.getMediaByDirectories(isPickVideo, isPickImage)
|
||||||
val directories = ArrayList<Directory>()
|
val directories = ArrayList<Directory>()
|
||||||
val hidden = context.resources.getString(R.string.hidden)
|
val hidden = context.resources.getString(R.string.hidden)
|
||||||
val albumCovers = config.parseAlbumCovers()
|
val albumCovers = config.parseAlbumCovers()
|
||||||
|
@ -66,4 +67,9 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
||||||
super.onPostExecute(dirs)
|
super.onPostExecute(dirs)
|
||||||
callback(dirs)
|
callback(dirs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun stopFetching() {
|
||||||
|
mediaFetcher.shouldStop = true
|
||||||
|
cancel(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,11 @@ import java.util.*
|
||||||
class GetMediaAsynctask(val context: Context, val mPath: String, val isPickVideo: Boolean = false, val isPickImage: Boolean = false,
|
class GetMediaAsynctask(val context: Context, val mPath: String, val isPickVideo: Boolean = false, val isPickImage: Boolean = false,
|
||||||
val showAll: Boolean, val callback: (media: ArrayList<Medium>) -> Unit) :
|
val showAll: Boolean, val callback: (media: ArrayList<Medium>) -> Unit) :
|
||||||
AsyncTask<Void, Void, ArrayList<Medium>>() {
|
AsyncTask<Void, Void, ArrayList<Medium>>() {
|
||||||
|
val mediaFetcher = MediaFetcher(context)
|
||||||
|
|
||||||
override fun doInBackground(vararg params: Void): ArrayList<Medium> {
|
override fun doInBackground(vararg params: Void): ArrayList<Medium> {
|
||||||
return if (showAll) {
|
return if (showAll) {
|
||||||
val mediaMap = MediaFetcher(context).getMediaByDirectories(isPickVideo, isPickImage)
|
val mediaMap = mediaFetcher.getMediaByDirectories(isPickVideo, isPickImage)
|
||||||
val media = ArrayList<Medium>()
|
val media = ArrayList<Medium>()
|
||||||
for ((path, curMedia) in mediaMap) {
|
for ((path, curMedia) in mediaMap) {
|
||||||
media.addAll(curMedia)
|
media.addAll(curMedia)
|
||||||
|
@ -23,7 +24,7 @@ class GetMediaAsynctask(val context: Context, val mPath: String, val isPickVideo
|
||||||
media.sort()
|
media.sort()
|
||||||
media
|
media
|
||||||
} else {
|
} else {
|
||||||
MediaFetcher(context).getFilesFrom(mPath, isPickImage, isPickVideo)
|
mediaFetcher.getFilesFrom(mPath, isPickImage, isPickVideo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,4 +32,9 @@ class GetMediaAsynctask(val context: Context, val mPath: String, val isPickVideo
|
||||||
super.onPostExecute(media)
|
super.onPostExecute(media)
|
||||||
callback(media)
|
callback(media)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun stopFetching() {
|
||||||
|
mediaFetcher.shouldStop = true
|
||||||
|
cancel(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package com.simplemobiletools.gallery.helpers
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.util.Log
|
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
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
|
||||||
|
@ -19,6 +18,8 @@ import kotlin.collections.component1
|
||||||
import kotlin.collections.component2
|
import kotlin.collections.component2
|
||||||
|
|
||||||
class MediaFetcher(val context: Context) {
|
class MediaFetcher(val context: Context) {
|
||||||
|
var shouldStop = false
|
||||||
|
|
||||||
fun getMediaByDirectories(isPickVideo: Boolean, isPickImage: Boolean): HashMap<String, ArrayList<Medium>> {
|
fun getMediaByDirectories(isPickVideo: Boolean, isPickImage: Boolean): HashMap<String, ArrayList<Medium>> {
|
||||||
val media = getFilesFrom("", isPickImage, isPickVideo)
|
val media = getFilesFrom("", isPickImage, isPickVideo)
|
||||||
val excludedPaths = context.config.excludedFolders
|
val excludedPaths = context.config.excludedFolders
|
||||||
|
@ -96,9 +97,10 @@ class MediaFetcher(val context: Context) {
|
||||||
if (cur.moveToFirst()) {
|
if (cur.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
try {
|
try {
|
||||||
val path = cur.getStringValue(MediaStore.Images.Media.DATA)
|
if (shouldStop)
|
||||||
|
break
|
||||||
|
|
||||||
Log.e("DEBUG", "checking $path")
|
val path = cur.getStringValue(MediaStore.Images.Media.DATA)
|
||||||
var filename = cur.getStringValue(MediaStore.Images.Media.DISPLAY_NAME) ?: ""
|
var filename = cur.getStringValue(MediaStore.Images.Media.DISPLAY_NAME) ?: ""
|
||||||
if (filename.isEmpty())
|
if (filename.isEmpty())
|
||||||
filename = path.getFilenameFromPath()
|
filename = path.getFilenameFromPath()
|
||||||
|
@ -189,6 +191,9 @@ class MediaFetcher(val context: Context) {
|
||||||
private fun groupDirectories(media: ArrayList<Medium>): HashMap<String, ArrayList<Medium>> {
|
private fun groupDirectories(media: ArrayList<Medium>): HashMap<String, ArrayList<Medium>> {
|
||||||
val directories = LinkedHashMap<String, ArrayList<Medium>>()
|
val directories = LinkedHashMap<String, ArrayList<Medium>>()
|
||||||
for (medium in media) {
|
for (medium in media) {
|
||||||
|
if (shouldStop)
|
||||||
|
break
|
||||||
|
|
||||||
val parentDir = File(medium.path).parent?.toLowerCase() ?: continue
|
val parentDir = File(medium.path).parent?.toLowerCase() ?: continue
|
||||||
if (directories.containsKey(parentDir)) {
|
if (directories.containsKey(parentDir)) {
|
||||||
directories[parentDir]!!.add(medium)
|
directories[parentDir]!!.add(medium)
|
||||||
|
@ -236,6 +241,9 @@ class MediaFetcher(val context: Context) {
|
||||||
private fun getMediaInFolder(folder: String, curMedia: ArrayList<Medium>, isPickImage: Boolean, isPickVideo: Boolean, filterMedia: Int) {
|
private fun getMediaInFolder(folder: String, curMedia: ArrayList<Medium>, isPickImage: Boolean, isPickVideo: Boolean, filterMedia: Int) {
|
||||||
val files = File(folder).listFiles() ?: return
|
val files = File(folder).listFiles() ?: return
|
||||||
for (file in files) {
|
for (file in files) {
|
||||||
|
if (shouldStop)
|
||||||
|
break
|
||||||
|
|
||||||
val filename = file.name
|
val filename = file.name
|
||||||
val isImage = filename.isImageFast()
|
val isImage = filename.isImageFast()
|
||||||
val isVideo = if (isImage) false else filename.isVideoFast()
|
val isVideo = if (isImage) false else filename.isVideoFast()
|
||||||
|
|
Loading…
Reference in a new issue