Use getStorageSize from SpaPrivilegedLib

Bug: 236346018
Test: Manual with "All App" App List
Change-Id: If05f334eea365f23e8fc7d7452aed4603c9cdc30
This commit is contained in:
Chaohui Wang
2022-10-12 14:47:28 +08:00
parent 246597c1ac
commit 4357589771

View File

@@ -16,13 +16,10 @@
package com.android.settings.spa.app
import android.app.usage.StorageStatsManager
import android.content.Context
import android.content.pm.ApplicationInfo
import android.os.Bundle
import android.text.format.Formatter
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringResource
import com.android.settings.R
import com.android.settings.spa.app.appsettings.AppSettingsProvider
@@ -30,16 +27,14 @@ import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.rememberContext
import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.util.asyncMapItem
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spaprivileged.model.app.AppListModel
import com.android.settingslib.spaprivileged.model.app.AppRecord
import com.android.settingslib.spaprivileged.model.app.userHandle
import com.android.settingslib.spaprivileged.template.app.AppListItem
import com.android.settingslib.spaprivileged.template.app.AppListPage
import com.android.settingslib.spaprivileged.template.app.getStorageSize
import kotlinx.coroutines.flow.Flow
object AllAppListPageProvider : SettingsPageProvider {
@@ -65,7 +60,7 @@ object AllAppListPageProvider : SettingsPageProvider {
private fun AllAppListPage() {
AppListPage(
title = stringResource(R.string.all_apps),
listModel = rememberContext(::AllAppListModel),
listModel = remember { AllAppListModel() },
showInstantApps = true,
) { itemModel ->
AppListItem(
@@ -77,11 +72,9 @@ private fun AllAppListPage() {
data class AppRecordWithSize(
override val app: ApplicationInfo,
var sizeBytes: Long? = null,
) : AppRecord
private class AllAppListModel(private val context: Context) : AppListModel<AppRecordWithSize> {
private val storageStatsManager = context.getSystemService(StorageStatsManager::class.java)!!
private class AllAppListModel : AppListModel<AppRecordWithSize> {
override fun transform(userIdFlow: Flow<Int>, appListFlow: Flow<List<ApplicationInfo>>) =
appListFlow.asyncMapItem { app ->
@@ -95,16 +88,5 @@ private class AllAppListModel(private val context: Context) : AppListModel<AppRe
) = recordListFlow
@Composable
override fun getSummary(option: Int, record: AppRecordWithSize): State<String> =
Formatter.formatFileSize(context, record.calculateSizeBytes()).toState()
private fun AppRecordWithSize.calculateSizeBytes(): Long {
sizeBytes?.let { return it }
val stats = storageStatsManager.queryStatsForPackage(
app.storageUuid, app.packageName, app.userHandle
)
return (stats.codeBytes + stats.dataBytes + stats.cacheBytes).also {
sizeBytes = it
}
}
override fun getSummary(option: Int, record: AppRecordWithSize) = record.app.getStorageSize()
}