From ff617828dd22dde3f2967f9978a05bdadecdb26e Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Thu, 10 Aug 2023 16:10:32 +0800 Subject: [PATCH] Refresh App Storage Size Use flow + collectAsStateWithLifecycle to auto refresh data. Fix: 292579670 Test: manual - try clear app storage or cache data Test: unit test Change-Id: I70462fdcac3edc7cb36e745ea8f4240d9874a165 --- .../spaprivileged/template/app/AppStorageSize.kt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt index 5fc1972fc878f..626c913ac9e6b 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt @@ -22,25 +22,27 @@ import android.text.format.Formatter import android.util.Log import androidx.compose.runtime.Composable import androidx.compose.runtime.State -import androidx.compose.runtime.produceState +import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.settingslib.spaprivileged.framework.common.storageStatsManager import com.android.settingslib.spaprivileged.framework.compose.placeholder import com.android.settingslib.spaprivileged.model.app.userHandle import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOn private const val TAG = "AppStorageSize" @Composable fun ApplicationInfo.getStorageSize(): State { val context = LocalContext.current - return produceState(initialValue = placeholder()) { - withContext(Dispatchers.IO) { + return remember { + flow { val sizeBytes = calculateSizeBytes(context) - value = if (sizeBytes != null) Formatter.formatFileSize(context, sizeBytes) else "" - } - } + this.emit(if (sizeBytes != null) Formatter.formatFileSize(context, sizeBytes) else "") + }.flowOn(Dispatchers.IO) + }.collectAsStateWithLifecycle(initialValue = placeholder()) } fun ApplicationInfo.calculateSizeBytes(context: Context): Long? {