Loading src/com/android/settings/spa/app/catalyst/AppsStorageScreen.kt +31 −36 Original line number Diff line number Diff line Loading @@ -19,23 +19,22 @@ package com.android.settings.spa.app.catalyst import android.content.Context import android.content.Intent import android.os.Bundle import com.android.settings.Settings.StorageUseActivity import com.android.settings.flags.Flags import com.android.settings.spa.app.storage.StorageType import com.android.settingslib.metadata.PreferenceHierarchy import com.android.settingslib.metadata.PreferenceHierarchyGenerator import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.asyncPreferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceFragment import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.spaprivileged.model.app.AppListRepositoryImpl import com.android.settings.flags.Flags import com.android.settings.spa.app.storage.StorageType import com.android.settingslib.metadata.PreferenceMetadata import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.runBlocking // future improvement = parameterize this to support apps (default) and games @ProvidePreferenceScreen(AppStorageAppListScreen.KEY, parameterized = true) class AppStorageAppListScreen( override val arguments: Bundle ) : PreferenceScreenCreator { @ProvidePreferenceScreen(AppStorageAppListScreen.KEY) class AppStorageAppListScreen : PreferenceScreenCreator, PreferenceHierarchyGenerator<Boolean> { override val key: String get() = KEY Loading @@ -48,35 +47,31 @@ class AppStorageAppListScreen( override fun fragmentClass() = PreferenceFragment::class.java override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?): Intent? { return Intent("com.android.settings.APP_STORAGE_SETTINGS") .setPackage(context.packageName) override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?): Intent? = when (metadata) { null -> Intent(context, StorageUseActivity::class.java) else -> null // not yet support highlight on specific app } override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { val repo = AppListRepositoryImpl(context) val apps = runBlocking { repo.loadAndFilterApps( context.userId, arguments.getBoolean(KEY_INCLUDE_SYSTEM_APPS) ) }.filter { app -> StorageType.Apps.filter(app) } for (app in apps) { addParameterizedScreen( AppInfoStorageScreen.KEY, Bundle(1).apply { putString("app", app.packageName) } ) override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {} override val defaultType: Boolean get() = true // include system apps override suspend fun generatePreferenceHierarchy( context: Context, type: Boolean, // whether to include system apps ): PreferenceHierarchy = asyncPreferenceHierarchy(context, this) { AppListRepositoryImpl(context).loadAndFilterApps(context.userId, type).forEach { app -> if (StorageType.Apps.filter(app)) { val arguments = Bundle(1).apply { putString("app", app.packageName) } +(AppInfoStorageScreen.KEY args arguments) } } } companion object { const val KEY = "app_storage_app_list" const val KEY_INCLUDE_SYSTEM_APPS = "include_system" @JvmStatic fun parameters(context: Context): Flow<Bundle> { return flowOf(Bundle(1).apply { putBoolean(KEY_INCLUDE_SYSTEM_APPS, true) }) } const val KEY = "device_state_apps_storage" } } Loading
src/com/android/settings/spa/app/catalyst/AppsStorageScreen.kt +31 −36 Original line number Diff line number Diff line Loading @@ -19,23 +19,22 @@ package com.android.settings.spa.app.catalyst import android.content.Context import android.content.Intent import android.os.Bundle import com.android.settings.Settings.StorageUseActivity import com.android.settings.flags.Flags import com.android.settings.spa.app.storage.StorageType import com.android.settingslib.metadata.PreferenceHierarchy import com.android.settingslib.metadata.PreferenceHierarchyGenerator import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.asyncPreferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceFragment import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.spaprivileged.model.app.AppListRepositoryImpl import com.android.settings.flags.Flags import com.android.settings.spa.app.storage.StorageType import com.android.settingslib.metadata.PreferenceMetadata import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.runBlocking // future improvement = parameterize this to support apps (default) and games @ProvidePreferenceScreen(AppStorageAppListScreen.KEY, parameterized = true) class AppStorageAppListScreen( override val arguments: Bundle ) : PreferenceScreenCreator { @ProvidePreferenceScreen(AppStorageAppListScreen.KEY) class AppStorageAppListScreen : PreferenceScreenCreator, PreferenceHierarchyGenerator<Boolean> { override val key: String get() = KEY Loading @@ -48,35 +47,31 @@ class AppStorageAppListScreen( override fun fragmentClass() = PreferenceFragment::class.java override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?): Intent? { return Intent("com.android.settings.APP_STORAGE_SETTINGS") .setPackage(context.packageName) override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?): Intent? = when (metadata) { null -> Intent(context, StorageUseActivity::class.java) else -> null // not yet support highlight on specific app } override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { val repo = AppListRepositoryImpl(context) val apps = runBlocking { repo.loadAndFilterApps( context.userId, arguments.getBoolean(KEY_INCLUDE_SYSTEM_APPS) ) }.filter { app -> StorageType.Apps.filter(app) } for (app in apps) { addParameterizedScreen( AppInfoStorageScreen.KEY, Bundle(1).apply { putString("app", app.packageName) } ) override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {} override val defaultType: Boolean get() = true // include system apps override suspend fun generatePreferenceHierarchy( context: Context, type: Boolean, // whether to include system apps ): PreferenceHierarchy = asyncPreferenceHierarchy(context, this) { AppListRepositoryImpl(context).loadAndFilterApps(context.userId, type).forEach { app -> if (StorageType.Apps.filter(app)) { val arguments = Bundle(1).apply { putString("app", app.packageName) } +(AppInfoStorageScreen.KEY args arguments) } } } companion object { const val KEY = "app_storage_app_list" const val KEY_INCLUDE_SYSTEM_APPS = "include_system" @JvmStatic fun parameters(context: Context): Flow<Bundle> { return flowOf(Bundle(1).apply { putBoolean(KEY_INCLUDE_SYSTEM_APPS, true) }) } const val KEY = "device_state_apps_storage" } }