fix media store crash on deletion on android 12

- MediaStore crashed on deletion because the ViewPagerActivity got finish before the MediaStore.createDeleteRequest executes
- To fix, we apply the same approach in the MediaActivity and finish explicitly after deletion completes, if the media list is empty
- also, only refresh the UI when the media list is not empty to avoid UI glitches
- fix slideshow bug by resetting mAreSlideShowMediaVisible back to false when the slideshow ends
This commit is contained in:
darthpaul 2022-05-14 03:51:52 +01:00
parent b3ad40739f
commit 3571fcd3ab

View file

@ -591,6 +591,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
showSystemUI(true) showSystemUI(true)
mSlideshowHandler.removeCallbacksAndMessages(null) mSlideshowHandler.removeCallbacksAndMessages(null)
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
mAreSlideShowMediaVisible = false
} }
} }
@ -1128,16 +1129,21 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
} }
mIgnoredPaths.add(fileDirItem.path) mIgnoredPaths.add(fileDirItem.path)
val media = mMediaFiles.filter { !mIgnoredPaths.contains(it.path) } as ArrayList<ThumbnailItem> val media = mMediaFiles.filter { !mIgnoredPaths.contains(it.path) } as ArrayList<Medium>
if (media.isNotEmpty()) {
runOnUiThread { runOnUiThread {
gotMedia(media, true, false) refreshUI(media, true)
}
} }
movePathsInRecycleBin(arrayListOf(path)) { movePathsInRecycleBin(arrayListOf(path)) {
if (it) { if (it) {
tryDeleteFileDirItem(fileDirItem, false, false) { tryDeleteFileDirItem(fileDirItem, false, false) {
mIgnoredPaths.remove(fileDirItem.path) mIgnoredPaths.remove(fileDirItem.path)
if (media.isEmpty()) {
deleteDirectoryIfEmpty() deleteDirectoryIfEmpty()
finish()
}
} }
} else { } else {
toast(R.string.unknown_error_occurred) toast(R.string.unknown_error_occurred)
@ -1156,14 +1162,19 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
} }
mIgnoredPaths.add(fileDirItem.path) mIgnoredPaths.add(fileDirItem.path)
val media = mMediaFiles.filter { !mIgnoredPaths.contains(it.path) } as ArrayList<ThumbnailItem> val media = mMediaFiles.filter { !mIgnoredPaths.contains(it.path) } as ArrayList<Medium>
if (media.isNotEmpty()) {
runOnUiThread { runOnUiThread {
gotMedia(media, true, false) refreshUI(media, true)
}
} }
tryDeleteFileDirItem(fileDirItem, false, true) { tryDeleteFileDirItem(fileDirItem, false, true) {
mIgnoredPaths.remove(fileDirItem.path) mIgnoredPaths.remove(fileDirItem.path)
if (media.isEmpty()) {
deleteDirectoryIfEmpty() deleteDirectoryIfEmpty()
finish()
}
} }
} }
} }
@ -1227,6 +1238,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
return return
} }
refreshUI(media, refetchViewPagerPosition)
}
private fun refreshUI(media: ArrayList<Medium>, refetchViewPagerPosition: Boolean) {
mPrevHashcode = media.hashCode() mPrevHashcode = media.hashCode()
mMediaFiles = media mMediaFiles = media