From 362e34be8a803f514690d89aadf320c9c3337165 Mon Sep 17 00:00:00 2001 From: juntao Date: Wed, 11 May 2022 15:06:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BF=AB=E9=80=9F=E8=BF=9B?= =?UTF-8?q?=E5=87=BA=E8=AE=BE=E7=BD=AE=E7=95=8C=E9=9D=A2=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E7=9A=84=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assistant/fragment/SettingsFragment.kt | 103 ++++++++++-------- 1 file changed, 58 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt index 4d6cc03a70..176f2ce339 100644 --- a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt @@ -1,13 +1,17 @@ package com.halo.assistant.fragment import android.annotation.SuppressLint +import android.app.Application import android.app.Dialog +import android.content.Context import android.content.Intent import android.graphics.Color import android.os.Build import android.os.Bundle import android.provider.Settings import android.view.View +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModelProvider import com.airbnb.lottie.LottieAnimationView import com.gh.common.constant.Config @@ -51,6 +55,8 @@ class SettingsFragment : NormalFragment() { private var loadingDialog: Dialog? = null private var mUsageStatus = false + private val mViewModel: SettingViewModel by lazy { viewModelProvider() } + override fun getLayoutId() = 0 override fun getInflatedLayout() = FragmentSettingBinding.inflate(layoutInflater).apply { mBinding = this }.root @@ -94,13 +100,12 @@ class SettingsFragment : NormalFragment() { //判断隐私政策是否有更新 mBinding.privacyPolicyItem.redDot.visibility = if (checkPrivacyIsSame()) View.GONE else View.VISIBLE - runOnIoThread { - val cacheSize = getCacheSize() - runOnUiThread { - mBinding.cacheItem.contentTv.text = cacheSize - } + mViewModel.cacheSizeLiveData.observe(this) { + mBinding.cacheItem.contentTv.text = it } + mViewModel.getCacheSize() + mBinding.personalRecommendItem.switchLottie.setSwitchAnimation(SPUtils.getBoolean(PERSONAL_RECOMMEND_SP_KEY, true)) checkSizeIndex = SPUtils.getInt(FONT_SIZE_SP_KEY, 1) @@ -377,7 +382,7 @@ class SettingsFragment : NormalFragment() { if (loadingDialog != null) { loadingDialog!!.dismiss() } - mBinding.cacheItem.contentTv.text = getCacheSize() + mViewModel.getCacheSize() Utils.toast(context, "缓存清除成功") } @@ -446,45 +451,6 @@ class SettingsFragment : NormalFragment() { return currentMd5 == privacyMd5 } - // 获取缓存大小 - private fun getCacheSize(): String { - val ecDir = requireContext().externalCacheDir - var cacheLength: Long = getFolderSize(requireContext().cacheDir) - if (ecDir != null) { - cacheLength += getFolderSize(ecDir) - } - return long2Size(cacheLength) - } - - private fun getFolderSize(folder: File): Long { - var size: Long = 0 - //忽略视频缓存 - if (folder.name == "video-cache" || folder.name == "exo") return size - size += folder.length() - if (folder.isDirectory) { - val files = folder.listFiles() - if (files == null || files.isEmpty()) return size - for (file in files) { - size += if (file.isDirectory) { - getFolderSize(file) - } else { - file.length() - } - } - } - return size - } - - private fun long2Size(length: Long): String { - val m = length / 1024f / 1024f - var str = m.toString() - val index = str.lastIndexOf(".") - if (index != -1 && str.length > index + 3) { - str = str.substring(0, index + 3) - } - return str + "M" - } - companion object { const val AUTO_INSTALL_SP_KEY = "autoinstall" const val CONCERN_GAME_SP_KEY = "concerngame" @@ -494,4 +460,51 @@ class SettingsFragment : NormalFragment() { const val INSERT_MOBILE_CODE = 411 } + + class SettingViewModel(application: Application): AndroidViewModel(application) { + val cacheSizeLiveData = MutableLiveData() + + // 获取缓存大小 + fun getCacheSize() { + runOnIoThread { + val ecDir = getApplication().externalCacheDir + var cacheLength: Long = getFolderSize(getApplication().cacheDir) + if (ecDir != null) { + cacheLength += getFolderSize(ecDir) + } + cacheSizeLiveData.postValue(long2Size(cacheLength)) + } + } + + private fun long2Size(length: Long): String { + val m = length / 1024f / 1024f + var str = m.toString() + val index = str.lastIndexOf(".") + if (index != -1 && str.length > index + 3) { + str = str.substring(0, index + 3) + } + return str + "M" + } + + private fun getFolderSize(folder: File): Long { + var size: Long = 0 + //忽略视频缓存 + if (folder.name == "video-cache" || folder.name == "exo") return size + size += folder.length() + if (folder.isDirectory) { + val files = folder.listFiles() + if (files == null || files.isEmpty()) return size + for (file in files) { + size += if (file.isDirectory) { + getFolderSize(file) + } else { + file.length() + } + } + } + return size + } + + } + } \ No newline at end of file