From ecaf79afc55a7479a72d56b99f921ee485423305 Mon Sep 17 00:00:00 2001 From: HuanCheng65 <22636177+HuanCheng65@users.noreply.github.com> Date: Fri, 21 Jul 2023 14:38:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=BE=E7=89=87=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E6=B8=85=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activities/TranslucentThemeActivity.kt | 2 +- .../post/fragments/PreferencesFragment.kt | 4 +- .../ui/page/settings/more/MoreSettingsPage.kt | 9 +- .../tieba/post/utils/GlideCacheUtil.java | 172 ----------------- .../tieba/post/utils/ImageCacheUtil.kt | 181 ++++++++++++++++++ 5 files changed, 190 insertions(+), 178 deletions(-) delete mode 100644 app/src/main/java/com/huanchengfly/tieba/post/utils/GlideCacheUtil.java create mode 100644 app/src/main/java/com/huanchengfly/tieba/post/utils/ImageCacheUtil.kt diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/TranslucentThemeActivity.kt b/app/src/main/java/com/huanchengfly/tieba/post/activities/TranslucentThemeActivity.kt index 51f27f94..1ed626a5 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/activities/TranslucentThemeActivity.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/TranslucentThemeActivity.kt @@ -471,7 +471,7 @@ class TranslucentThemeActivity : BaseActivity(), View.OnClickListener, OnSeekBar } override fun finish() { - GlideCacheUtil.getInstance().clearImageMemoryCache(this) + ImageCacheUtil.clearImageMemoryCache(this) super.finish() } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/PreferencesFragment.kt b/app/src/main/java/com/huanchengfly/tieba/post/fragments/PreferencesFragment.kt index cf1db485..d97f43fc 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/PreferencesFragment.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/PreferencesFragment.kt @@ -212,11 +212,11 @@ class PreferencesFragment : PreferencesFragment() { val clearCache = findPreference("clear_cache") clearCache!!.summary = attachContext.getString( R.string.tip_cache, - GlideCacheUtil.getInstance().getCacheSize(attachContext) + ImageCacheUtil.getCacheSize(attachContext) ) clearCache.onPreferenceClickListener = Preference.OnPreferenceClickListener { preference: Preference -> - GlideCacheUtil.getInstance().clearImageAllCache(attachContext) + ImageCacheUtil.clearImageAllCache(attachContext) if (view != null) Util.createSnackbar( requireView(), R.string.toast_clear_picture_cache_success, diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/more/MoreSettingsPage.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/more/MoreSettingsPage.kt index b8ee1410..7bce00ce 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/more/MoreSettingsPage.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/more/MoreSettingsPage.kt @@ -27,10 +27,11 @@ import com.huanchengfly.tieba.post.ui.common.prefs.widgets.TextPref import com.huanchengfly.tieba.post.ui.page.destinations.AboutPageDestination import com.huanchengfly.tieba.post.ui.page.settings.LeadingIcon import com.huanchengfly.tieba.post.ui.widgets.compose.* -import com.huanchengfly.tieba.post.utils.GlideCacheUtil +import com.huanchengfly.tieba.post.utils.ImageCacheUtil import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator import kotlinx.coroutines.launch +import kotlin.concurrent.thread @OptIn(ExperimentalMaterialApi::class) @Destination @@ -54,7 +55,9 @@ fun MoreSettingsPage( val context = LocalContext.current var cacheSize by remember { mutableStateOf("0.0B") } LaunchedEffect(Unit) { - cacheSize = GlideCacheUtil.getInstance().getCacheSize(context) + thread { + cacheSize = ImageCacheUtil.getCacheSize(context) + } } PrefsScreen( dataStore = LocalContext.current.dataStore, @@ -156,7 +159,7 @@ fun MoreSettingsPage( title = stringResource(id = R.string.title_clear_picture_cache), onClick = { coroutineScope.launch { - GlideCacheUtil.getInstance().clearImageAllCache(context) + ImageCacheUtil.clearImageAllCache(context) cacheSize = "0.0B" snackbarHostState.showSnackbar(context.getString(R.string.toast_clear_picture_cache_success)) } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/GlideCacheUtil.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/GlideCacheUtil.java deleted file mode 100644 index ed1b337d..00000000 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/GlideCacheUtil.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.huanchengfly.tieba.post.utils; - -import android.content.Context; -import android.os.Looper; -import android.text.TextUtils; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.cache.ExternalPreferredCacheDiskCacheFactory; -import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory; - -import java.io.File; -import java.math.BigDecimal; - -/** - * Glide缓存工具类 - * Created by Trojx on 2016/10/10 0010. - */ - -public class GlideCacheUtil { - private static GlideCacheUtil inst; - - public static GlideCacheUtil getInstance() { - if (inst == null) { - inst = new GlideCacheUtil(); - } - return inst; - } - - /** - * 格式化单位 - * - * @param size size - * @return size - */ - private static String getFormatSize(double size) { - - double kiloByte = size / 1024; - if (kiloByte < 1) { - return size + "B"; - } - - double megaByte = kiloByte / 1024; - if (megaByte < 1) { - BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); - return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB"; - } - - double gigaByte = megaByte / 1024; - if (gigaByte < 1) { - BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); - return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB"; - } - - double teraBytes = gigaByte / 1024; - if (teraBytes < 1) { - BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); - return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB"; - } - BigDecimal result4 = new BigDecimal(teraBytes); - - return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB"; - } - - /** - * 清除图片磁盘缓存 - */ - public void clearImageDiskCache(Context context) { - try { - if (Looper.myLooper() == Looper.getMainLooper()) { - new Thread(() -> Glide.get(context).clearDiskCache()).start(); - } else { - Glide.get(context).clearDiskCache(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 清除图片内存缓存 - */ - public void clearImageMemoryCache(Context context) { - try { - if (Looper.myLooper() == Looper.getMainLooper()) { //只能在主线程执行 - Glide.get(context).clearMemory(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 清除图片所有缓存 - */ - public void clearImageAllCache(Context context) { - clearImageDiskCache(context); - clearImageMemoryCache(context); - String imageExternalCacheDir = context.getExternalCacheDir() + File.separator + ExternalPreferredCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR; - deleteFolderFile(imageExternalCacheDir, false); - deleteFolderFile(context.getCacheDir() + File.separator + ".shareTemp", false); - } - - /** - * 获取Glide造成的缓存大小 - * - * @return CacheSize - */ - public String getCacheSize(Context context) { - try { - double glideCacheSize = getFolderSize(new File(context.getCacheDir(), InternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR)); - double shareCacheSize = getFolderSize(new File(context.getCacheDir(), ".shareTemp")); - return getFormatSize(glideCacheSize + shareCacheSize); - } catch (Exception e) { - e.printStackTrace(); - } - return ""; - } - - /** - * 获取指定文件夹内所有文件大小的和 - * - * @param file file - * @return size - */ - private long getFolderSize(File file) { - long size = 0; - try { - File[] fileList = file.listFiles(); - for (File aFileList : fileList) { - if (aFileList.isDirectory()) { - size = size + getFolderSize(aFileList); - } else { - size = size + aFileList.length(); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return size; - } - - /** - * 删除指定目录下的文件,这里用于缓存的删除 - * - * @param filePath filePath - * @param deleteThisPath deleteThisPath - */ - private void deleteFolderFile(String filePath, boolean deleteThisPath) { - if (!TextUtils.isEmpty(filePath)) { - try { - File file = new File(filePath); - if (file.isDirectory()) { - File[] files = file.listFiles(); - for (File file1 : files) { - deleteFolderFile(file1.getAbsolutePath(), true); - } - } - if (deleteThisPath) { - if (!file.isDirectory()) { - file.delete(); - } else { - if (file.listFiles().length == 0) { - file.delete(); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/ImageCacheUtil.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/ImageCacheUtil.kt new file mode 100644 index 00000000..8a5a1656 --- /dev/null +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/ImageCacheUtil.kt @@ -0,0 +1,181 @@ +package com.huanchengfly.tieba.post.utils + +import android.content.Context +import android.os.Looper +import android.text.TextUtils +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.cache.ExternalPreferredCacheDiskCacheFactory +import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory +import com.github.panpf.sketch.sketch +import java.io.File +import java.math.BigDecimal +import kotlin.concurrent.thread + +/** + * Glide缓存工具类 + * Created by Trojx on 2016/10/10 0010. + */ +object ImageCacheUtil { + /** + * 清除图片磁盘缓存 + */ + fun clearImageDiskCache(context: Context) { + try { + if (Looper.myLooper() == Looper.getMainLooper()) { + thread { + Glide.get(context).clearDiskCache() + context.sketch + .downloadCache + .clear() + context.sketch + .resultCache + .clear() + } + } else { + Glide.get(context).clearDiskCache() + context.sketch + .downloadCache + .clear() + context.sketch + .resultCache + .clear() + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 清除图片内存缓存 + */ + fun clearImageMemoryCache(context: Context) { + try { + if (Looper.myLooper() == Looper.getMainLooper()) { //只能在主线程执行 + Glide.get(context).clearMemory() + context.sketch + .memoryCache + .clear() + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 清除图片所有缓存 + */ + fun clearImageAllCache(context: Context) { + clearImageDiskCache(context) + clearImageMemoryCache(context) + val imageExternalCacheDir = + context.externalCacheDir.toString() + File.separator + ExternalPreferredCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR + deleteFolderFile(imageExternalCacheDir, false) + deleteFolderFile(context.cacheDir.toString() + File.separator + ".shareTemp", false) + } + + /** + * 获取Glide造成的缓存大小 + * + * @return CacheSize + */ + fun getCacheSize(context: Context): String { + try { + val glideCacheSize = getFolderSize( + File( + context.cacheDir, + InternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR + ) + ).toDouble() + val shareCacheSize = getFolderSize(File(context.cacheDir, ".shareTemp")).toDouble() + val sketchCacheSize = context.sketch.run { downloadCache.size + resultCache.size } + return getFormatSize(glideCacheSize + shareCacheSize + sketchCacheSize) + } catch (e: Exception) { + e.printStackTrace() + } + return "" + } + + /** + * 获取指定文件夹内所有文件大小的和 + * + * @param file file + * @return size + */ + private fun getFolderSize(file: File): Long { + var size: Long = 0 + try { + val fileList = file.listFiles() + for (aFileList in fileList) { + size = if (aFileList.isDirectory) { + size + getFolderSize(aFileList) + } else { + size + aFileList.length() + } + } + } catch (e: Exception) { + e.printStackTrace() + } + return size + } + + /** + * 删除指定目录下的文件,这里用于缓存的删除 + * + * @param filePath filePath + * @param deleteThisPath deleteThisPath + */ + private fun deleteFolderFile(filePath: String, deleteThisPath: Boolean) { + if (!TextUtils.isEmpty(filePath)) { + try { + val file = File(filePath) + if (file.isDirectory) { + val files = file.listFiles() + for (file1 in files) { + deleteFolderFile(file1.absolutePath, true) + } + } + if (deleteThisPath) { + if (!file.isDirectory) { + file.delete() + } else { + if (file.listFiles().size == 0) { + file.delete() + } + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + /** + * 格式化单位 + * + * @param size size + * @return size + */ + fun getFormatSize(size: Double): String { + val kiloByte = size / 1024 + if (kiloByte < 1) { + return size.toString() + "B" + } + val megaByte = kiloByte / 1024 + if (megaByte < 1) { + val result1 = BigDecimal(java.lang.Double.toString(kiloByte)) + return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB" + } + val gigaByte = megaByte / 1024 + if (gigaByte < 1) { + val result2 = BigDecimal(java.lang.Double.toString(megaByte)) + return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB" + } + val teraBytes = gigaByte / 1024 + if (teraBytes < 1) { + val result3 = BigDecimal(java.lang.Double.toString(gigaByte)) + return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB" + } + val result4 = BigDecimal(teraBytes) + return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB" + } +} \ No newline at end of file