Loading src/com/android/settings/appfunctions/DeviceStateAppFunctionService.kt +21 −88 Original line number Diff line number Diff line Loading @@ -38,11 +38,10 @@ import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PreferenceHierarchy import com.android.settingslib.metadata.PreferenceScreenCoordinate import com.android.settingslib.metadata.PreferenceHierarchyGenerator import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceScreenMetadata import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.PreferenceSummaryProvider import com.android.settingslib.metadata.PreferenceTitleProvider import com.android.settingslib.metadata.getPreferenceScreenTitle import com.android.settingslib.metadata.getPreferenceSummary import com.google.android.appfunctions.schema.common.v1.devicestate.DeviceStateItem import com.google.android.appfunctions.schema.common.v1.devicestate.DeviceStateResponse import com.google.android.appfunctions.schema.common.v1.devicestate.LocalizedString Loading Loading @@ -136,44 +135,23 @@ class DeviceStateAppFunctionService : AppFunctionService() { val screenMetaData = PreferenceScreenRegistry.create( applicationContext, PreferenceScreenCoordinate(screenKey, null) ) if (screenMetaData == null) { return null } PreferenceScreenCoordinate(screenKey, null), ) ?: return null val deviceStateItemList: MutableList<DeviceStateItem> = ArrayList() val hierarchy = (screenMetaData as? PreferenceHierarchyGenerator<*>) ?.asyncHierarchy(perScreenConfig) ?: screenMetaData.getPreferenceHierarchy(applicationContext) hierarchy.forEachRecursively { screenMetaData.getPreferenceHierarchy().forEachRecursively { val metadata = it.metadata val config = settingConfigMap[metadata.key] // skip over explicitly disabled preferences if (!(config?.enabled ?: true)) { return@forEachRecursively } val jsonValue = (metadata as? PersistentPreference<*>)?.let { when (metadata.valueType) { Int::class.javaObjectType -> metadata.storage(applicationContext) .getInt("") if (config?.enabled == false) return@forEachRecursively val jsonValue = when (metadata) { is PersistentPreference<*> -> metadata .storage(applicationContext) .getValue(metadata.key, metadata.valueType as Class<Any>) .toString() Boolean::class.javaObjectType -> metadata.storage(applicationContext) .getBoolean("").toString() Long::class.javaObjectType -> metadata.storage(applicationContext) .getLong("") .toString() Float::class.javaObjectType -> metadata.storage(applicationContext) .getLong("") .toString() String::class.javaObjectType -> metadata.storage(applicationContext) .getString("") else -> getSummary(applicationContext, metadata) else -> metadata.getPreferenceSummary(applicationContext)?.toString() } } ?: getSummary(applicationContext, metadata) deviceStateItemList.add( DeviceStateItem( key = metadata.key, Loading @@ -187,63 +165,18 @@ class DeviceStateAppFunctionService : AppFunctionService() { val launchingIntent = screenMetaData.getLaunchIntent(applicationContext, null) return PerScreenDeviceStates( description = getScreenTitle(screenMetaData) ?: "", description = screenMetaData.getPreferenceScreenTitle(applicationContext)?.toString() ?: "", deviceStateItems = deviceStateItemList, intentUri = launchingIntent?.toUri(Intent.URI_INTENT_SCHEME) ) } private suspend fun PreferenceHierarchyGenerator<*>.asyncHierarchy( config: PerScreenConfig ): PreferenceHierarchy { return when (config.defaultType) { Boolean::class.java -> (this as PreferenceHierarchyGenerator<Boolean>) .generatePreferenceHierarchy( applicationContext, config.defaultTypeValue as Boolean ) Int::class.java -> (this as PreferenceHierarchyGenerator<Int>) .generatePreferenceHierarchy( applicationContext, config.defaultTypeValue as Int ) else -> generatePreferenceHierarchy(applicationContext) } } private fun getScreenTitle(metadata: PreferenceScreenMetadata): String? { val screenTitleRes = metadata.screenTitle if (screenTitleRes != 0) { return tryGetStringRes(screenTitleRes) } metadata.getScreenTitle(applicationContext)?.let { return it.toString() } val dynamicTitle = (metadata as? PreferenceTitleProvider)?.getTitle(applicationContext) if (dynamicTitle != null) { return dynamicTitle.toString() } val titleRes = metadata.title if (titleRes != 0) { return tryGetStringRes(titleRes) } return null } private fun getSummary(context: Context, metadata: PreferenceMetadata): String? { return if (metadata.summary != 0) { tryGetStringRes(metadata.summary) } else { (metadata as? PreferenceSummaryProvider)?.getSummary(context).toString() } } private fun tryGetStringRes(resId: Int): String { return try { applicationContext.getString(resId) } catch (_: Resources.NotFoundException) { "" } private suspend fun PreferenceScreenMetadata.getPreferenceHierarchy(): PreferenceHierarchy = when (this) { is PreferenceHierarchyGenerator<*> -> generatePreferenceHierarchy(applicationContext, defaultType) else -> getPreferenceHierarchy(applicationContext) } private fun getLocalizedString(resId: Int): LocalizedString? { Loading src/com/android/settings/appfunctions/DeviceStateConfig.kt +0 −6 Original line number Diff line number Diff line Loading @@ -83,16 +83,12 @@ data class DeviceStateItemConfig( * @param enabled whether expose device states on this screen to App Functions. * @param screenKey the unique ID for the screen. * @param category the device state category of the screen. The default is UNCATEGORIZED. * @param defaultType class type associated with [PreferenceHierarchyGenerator] for PreferenceScreen * @param defaultTypeValue value to pass in to [PreferenceHierarchyGenerator.generatePreferenceHierarchy] */ data class PerScreenConfig( val enabled: Boolean, val screenKey: String, // TODO(b/405344827): map categories to PreferenceMetadata#tags val category: Set<DeviceStateCategory> = setOf(DeviceStateCategory.UNCATEGORIZED), val defaultType: Class<*>? = null, val defaultTypeValue: Any? = null ) fun getScreenConfigs() = listOf( Loading Loading @@ -223,8 +219,6 @@ fun getScreenConfigs() = listOf( enabled = true, screenKey = AppStorageAppListScreen.KEY, category = setOf(DeviceStateCategory.STORAGE), defaultType = Boolean::class.java, defaultTypeValue = false, // do not include system apps ), PerScreenConfig( enabled = true, Loading src/com/android/settings/spa/app/catalyst/AppInfoStorageScreen.kt +3 −6 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import com.android.settings.spa.app.storage.StorageType import com.android.settingslib.applications.StorageStatsSource import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.LongValuePreference import com.android.settingslib.metadata.PreferenceHierarchy import com.android.settingslib.metadata.PreferenceHierarchyGenerator import com.android.settingslib.metadata.PreferenceMetadata Loading @@ -54,10 +54,10 @@ class AppInfoStorageScreen( private val context: Context, override val arguments: Bundle ) : PreferenceScreenCreator, LongValuePreference, PreferenceHierarchyGenerator<Int>, PreferenceSummaryProvider, PreferenceTitleProvider, PersistentPreference<Long> { PreferenceTitleProvider { private val appInfo by lazy { Loading @@ -67,9 +67,6 @@ class AppInfoStorageScreen( override val key: String get() = KEY override val valueType: Class<Long> get() = Long::class.javaObjectType override val sensitivityLevel: @SensitivityLevel Int get() = SensitivityLevel.NO_SENSITIVITY Loading src/com/android/settings/spa/app/catalyst/AppsStorageScreen.kt +1 −1 Original line number Diff line number Diff line Loading @@ -59,7 +59,7 @@ class AppStorageAppListScreen : PreferenceScreenCreator, PreferenceHierarchyGene override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {} override val defaultType: Boolean get() = true // include system apps get() = false // do not include system apps override suspend fun generatePreferenceHierarchy( context: Context, Loading Loading
src/com/android/settings/appfunctions/DeviceStateAppFunctionService.kt +21 −88 Original line number Diff line number Diff line Loading @@ -38,11 +38,10 @@ import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PreferenceHierarchy import com.android.settingslib.metadata.PreferenceScreenCoordinate import com.android.settingslib.metadata.PreferenceHierarchyGenerator import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceScreenMetadata import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.PreferenceSummaryProvider import com.android.settingslib.metadata.PreferenceTitleProvider import com.android.settingslib.metadata.getPreferenceScreenTitle import com.android.settingslib.metadata.getPreferenceSummary import com.google.android.appfunctions.schema.common.v1.devicestate.DeviceStateItem import com.google.android.appfunctions.schema.common.v1.devicestate.DeviceStateResponse import com.google.android.appfunctions.schema.common.v1.devicestate.LocalizedString Loading Loading @@ -136,44 +135,23 @@ class DeviceStateAppFunctionService : AppFunctionService() { val screenMetaData = PreferenceScreenRegistry.create( applicationContext, PreferenceScreenCoordinate(screenKey, null) ) if (screenMetaData == null) { return null } PreferenceScreenCoordinate(screenKey, null), ) ?: return null val deviceStateItemList: MutableList<DeviceStateItem> = ArrayList() val hierarchy = (screenMetaData as? PreferenceHierarchyGenerator<*>) ?.asyncHierarchy(perScreenConfig) ?: screenMetaData.getPreferenceHierarchy(applicationContext) hierarchy.forEachRecursively { screenMetaData.getPreferenceHierarchy().forEachRecursively { val metadata = it.metadata val config = settingConfigMap[metadata.key] // skip over explicitly disabled preferences if (!(config?.enabled ?: true)) { return@forEachRecursively } val jsonValue = (metadata as? PersistentPreference<*>)?.let { when (metadata.valueType) { Int::class.javaObjectType -> metadata.storage(applicationContext) .getInt("") if (config?.enabled == false) return@forEachRecursively val jsonValue = when (metadata) { is PersistentPreference<*> -> metadata .storage(applicationContext) .getValue(metadata.key, metadata.valueType as Class<Any>) .toString() Boolean::class.javaObjectType -> metadata.storage(applicationContext) .getBoolean("").toString() Long::class.javaObjectType -> metadata.storage(applicationContext) .getLong("") .toString() Float::class.javaObjectType -> metadata.storage(applicationContext) .getLong("") .toString() String::class.javaObjectType -> metadata.storage(applicationContext) .getString("") else -> getSummary(applicationContext, metadata) else -> metadata.getPreferenceSummary(applicationContext)?.toString() } } ?: getSummary(applicationContext, metadata) deviceStateItemList.add( DeviceStateItem( key = metadata.key, Loading @@ -187,63 +165,18 @@ class DeviceStateAppFunctionService : AppFunctionService() { val launchingIntent = screenMetaData.getLaunchIntent(applicationContext, null) return PerScreenDeviceStates( description = getScreenTitle(screenMetaData) ?: "", description = screenMetaData.getPreferenceScreenTitle(applicationContext)?.toString() ?: "", deviceStateItems = deviceStateItemList, intentUri = launchingIntent?.toUri(Intent.URI_INTENT_SCHEME) ) } private suspend fun PreferenceHierarchyGenerator<*>.asyncHierarchy( config: PerScreenConfig ): PreferenceHierarchy { return when (config.defaultType) { Boolean::class.java -> (this as PreferenceHierarchyGenerator<Boolean>) .generatePreferenceHierarchy( applicationContext, config.defaultTypeValue as Boolean ) Int::class.java -> (this as PreferenceHierarchyGenerator<Int>) .generatePreferenceHierarchy( applicationContext, config.defaultTypeValue as Int ) else -> generatePreferenceHierarchy(applicationContext) } } private fun getScreenTitle(metadata: PreferenceScreenMetadata): String? { val screenTitleRes = metadata.screenTitle if (screenTitleRes != 0) { return tryGetStringRes(screenTitleRes) } metadata.getScreenTitle(applicationContext)?.let { return it.toString() } val dynamicTitle = (metadata as? PreferenceTitleProvider)?.getTitle(applicationContext) if (dynamicTitle != null) { return dynamicTitle.toString() } val titleRes = metadata.title if (titleRes != 0) { return tryGetStringRes(titleRes) } return null } private fun getSummary(context: Context, metadata: PreferenceMetadata): String? { return if (metadata.summary != 0) { tryGetStringRes(metadata.summary) } else { (metadata as? PreferenceSummaryProvider)?.getSummary(context).toString() } } private fun tryGetStringRes(resId: Int): String { return try { applicationContext.getString(resId) } catch (_: Resources.NotFoundException) { "" } private suspend fun PreferenceScreenMetadata.getPreferenceHierarchy(): PreferenceHierarchy = when (this) { is PreferenceHierarchyGenerator<*> -> generatePreferenceHierarchy(applicationContext, defaultType) else -> getPreferenceHierarchy(applicationContext) } private fun getLocalizedString(resId: Int): LocalizedString? { Loading
src/com/android/settings/appfunctions/DeviceStateConfig.kt +0 −6 Original line number Diff line number Diff line Loading @@ -83,16 +83,12 @@ data class DeviceStateItemConfig( * @param enabled whether expose device states on this screen to App Functions. * @param screenKey the unique ID for the screen. * @param category the device state category of the screen. The default is UNCATEGORIZED. * @param defaultType class type associated with [PreferenceHierarchyGenerator] for PreferenceScreen * @param defaultTypeValue value to pass in to [PreferenceHierarchyGenerator.generatePreferenceHierarchy] */ data class PerScreenConfig( val enabled: Boolean, val screenKey: String, // TODO(b/405344827): map categories to PreferenceMetadata#tags val category: Set<DeviceStateCategory> = setOf(DeviceStateCategory.UNCATEGORIZED), val defaultType: Class<*>? = null, val defaultTypeValue: Any? = null ) fun getScreenConfigs() = listOf( Loading Loading @@ -223,8 +219,6 @@ fun getScreenConfigs() = listOf( enabled = true, screenKey = AppStorageAppListScreen.KEY, category = setOf(DeviceStateCategory.STORAGE), defaultType = Boolean::class.java, defaultTypeValue = false, // do not include system apps ), PerScreenConfig( enabled = true, Loading
src/com/android/settings/spa/app/catalyst/AppInfoStorageScreen.kt +3 −6 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import com.android.settings.spa.app.storage.StorageType import com.android.settingslib.applications.StorageStatsSource import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.LongValuePreference import com.android.settingslib.metadata.PreferenceHierarchy import com.android.settingslib.metadata.PreferenceHierarchyGenerator import com.android.settingslib.metadata.PreferenceMetadata Loading @@ -54,10 +54,10 @@ class AppInfoStorageScreen( private val context: Context, override val arguments: Bundle ) : PreferenceScreenCreator, LongValuePreference, PreferenceHierarchyGenerator<Int>, PreferenceSummaryProvider, PreferenceTitleProvider, PersistentPreference<Long> { PreferenceTitleProvider { private val appInfo by lazy { Loading @@ -67,9 +67,6 @@ class AppInfoStorageScreen( override val key: String get() = KEY override val valueType: Class<Long> get() = Long::class.javaObjectType override val sensitivityLevel: @SensitivityLevel Int get() = SensitivityLevel.NO_SENSITIVITY Loading
src/com/android/settings/spa/app/catalyst/AppsStorageScreen.kt +1 −1 Original line number Diff line number Diff line Loading @@ -59,7 +59,7 @@ class AppStorageAppListScreen : PreferenceScreenCreator, PreferenceHierarchyGene override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {} override val defaultType: Boolean get() = true // include system apps get() = false // do not include system apps override suspend fun generatePreferenceHierarchy( context: Context, Loading