From 1d39db9af8411892c00951720c1508baf2e8dfe7 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Wed, 17 Apr 2024 03:28:21 -0700 Subject: [PATCH] Fix: Make checksum computation cancellable. --- .../fileproperties/checksum/ChecksumInfoLiveData.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/me/zhanghai/android/files/fileproperties/checksum/ChecksumInfoLiveData.kt b/app/src/main/java/me/zhanghai/android/files/fileproperties/checksum/ChecksumInfoLiveData.kt index 317d1fc78..9426db68d 100644 --- a/app/src/main/java/me/zhanghai/android/files/fileproperties/checksum/ChecksumInfoLiveData.kt +++ b/app/src/main/java/me/zhanghai/android/files/fileproperties/checksum/ChecksumInfoLiveData.kt @@ -15,16 +15,21 @@ import me.zhanghai.android.files.util.Stateful import me.zhanghai.android.files.util.Success import me.zhanghai.android.files.util.toHexString import me.zhanghai.android.files.util.valueCompat +import java.util.concurrent.ExecutorService +import java.util.concurrent.Future class ChecksumInfoLiveData(path: Path) : PathObserverLiveData>(path) { + private var future: Future? = null + init { loadValue() observe() } override fun loadValue() { + future?.cancel(true) value = Loading(value?.value) - AsyncTask.THREAD_POOL_EXECUTOR.execute { + future = (AsyncTask.THREAD_POOL_EXECUTOR as ExecutorService).submit { val value = try { val messageDigests = ChecksumInfo.Algorithm.entries.associateWith { it.createMessageDigest() } @@ -48,4 +53,10 @@ class ChecksumInfoLiveData(path: Path) : PathObserverLiveData