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
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 5fc1972..626c913 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.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<String> {
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? {