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