Loading packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt +14 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,7 @@ import androidx.annotation.StringRes * information: * information: * - [PreferenceTitleProvider]: provide dynamic title content * - [PreferenceTitleProvider]: provide dynamic title content * - [PreferenceSummaryProvider]: provide dynamic summary content (e.g. based on preference value) * - [PreferenceSummaryProvider]: provide dynamic summary content (e.g. based on preference value) * - [PreferenceIconProvider]: provide dynamic icon content (e.g. based on flag) * - [PreferenceAvailabilityProvider]: provide preference availability (e.g. based on flag) * - [PreferenceAvailabilityProvider]: provide preference availability (e.g. based on flag) * - [PreferenceLifecycleProvider]: provide the lifecycle callbacks and notify state change * - [PreferenceLifecycleProvider]: provide the lifecycle callbacks and notify state change * * Loading Loading @@ -160,6 +161,19 @@ interface PreferenceMetadata { this is PreferenceSummaryProvider -> getSummary(context) this is PreferenceSummaryProvider -> getSummary(context) else -> null else -> null } } /** * Returns the preference icon. * * Implement [PreferenceIconProvider] interface if icon content is provided dynamically * (e.g. icon is provided based on flag value). */ fun getPreferenceIcon(context: Context): Int = when { icon != 0 -> icon this is PreferenceIconProvider -> getIcon(context) else -> 0 } } } /** Metadata of preference group. */ /** Metadata of preference group. */ Loading packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceStateProviders.kt +11 −0 Original line number Original line Diff line number Diff line Loading @@ -40,6 +40,17 @@ interface PreferenceSummaryProvider { fun getSummary(context: Context): CharSequence? fun getSummary(context: Context): CharSequence? } } /** * Interface to provide dynamic preference icon. * * Implement this interface implies that the preference icon should not be cached for indexing. */ interface PreferenceIconProvider { /** Provides preference icon. */ fun getIcon(context: Context): Int } /** /** * Interface to provide the state of preference availability. * Interface to provide the state of preference availability. * * Loading packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt +4 −3 Original line number Original line Diff line number Diff line Loading @@ -62,12 +62,13 @@ interface PreferenceBinding { fun bind(preference: Preference, metadata: PreferenceMetadata) { fun bind(preference: Preference, metadata: PreferenceMetadata) { metadata.apply { metadata.apply { preference.key = key preference.key = key if (icon != 0) { val context = preference.context preference.setIcon(icon) val preferenceIcon = metadata.getPreferenceIcon(context) if (preferenceIcon != 0) { preference.setIcon(preferenceIcon) } else { } else { preference.icon = null preference.icon = null } } val context = preference.context val isPreferenceScreen = preference is PreferenceScreen val isPreferenceScreen = preference is PreferenceScreen preference.peekExtras()?.clear() preference.peekExtras()?.clear() extras(context)?.let { preference.extras.putAll(it) } extras(context)?.let { preference.extras.putAll(it) } Loading Loading
packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt +14 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,7 @@ import androidx.annotation.StringRes * information: * information: * - [PreferenceTitleProvider]: provide dynamic title content * - [PreferenceTitleProvider]: provide dynamic title content * - [PreferenceSummaryProvider]: provide dynamic summary content (e.g. based on preference value) * - [PreferenceSummaryProvider]: provide dynamic summary content (e.g. based on preference value) * - [PreferenceIconProvider]: provide dynamic icon content (e.g. based on flag) * - [PreferenceAvailabilityProvider]: provide preference availability (e.g. based on flag) * - [PreferenceAvailabilityProvider]: provide preference availability (e.g. based on flag) * - [PreferenceLifecycleProvider]: provide the lifecycle callbacks and notify state change * - [PreferenceLifecycleProvider]: provide the lifecycle callbacks and notify state change * * Loading Loading @@ -160,6 +161,19 @@ interface PreferenceMetadata { this is PreferenceSummaryProvider -> getSummary(context) this is PreferenceSummaryProvider -> getSummary(context) else -> null else -> null } } /** * Returns the preference icon. * * Implement [PreferenceIconProvider] interface if icon content is provided dynamically * (e.g. icon is provided based on flag value). */ fun getPreferenceIcon(context: Context): Int = when { icon != 0 -> icon this is PreferenceIconProvider -> getIcon(context) else -> 0 } } } /** Metadata of preference group. */ /** Metadata of preference group. */ Loading
packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceStateProviders.kt +11 −0 Original line number Original line Diff line number Diff line Loading @@ -40,6 +40,17 @@ interface PreferenceSummaryProvider { fun getSummary(context: Context): CharSequence? fun getSummary(context: Context): CharSequence? } } /** * Interface to provide dynamic preference icon. * * Implement this interface implies that the preference icon should not be cached for indexing. */ interface PreferenceIconProvider { /** Provides preference icon. */ fun getIcon(context: Context): Int } /** /** * Interface to provide the state of preference availability. * Interface to provide the state of preference availability. * * Loading
packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt +4 −3 Original line number Original line Diff line number Diff line Loading @@ -62,12 +62,13 @@ interface PreferenceBinding { fun bind(preference: Preference, metadata: PreferenceMetadata) { fun bind(preference: Preference, metadata: PreferenceMetadata) { metadata.apply { metadata.apply { preference.key = key preference.key = key if (icon != 0) { val context = preference.context preference.setIcon(icon) val preferenceIcon = metadata.getPreferenceIcon(context) if (preferenceIcon != 0) { preference.setIcon(preferenceIcon) } else { } else { preference.icon = null preference.icon = null } } val context = preference.context val isPreferenceScreen = preference is PreferenceScreen val isPreferenceScreen = preference is PreferenceScreen preference.peekExtras()?.clear() preference.peekExtras()?.clear() extras(context)?.let { preference.extras.putAll(it) } extras(context)?.let { preference.extras.putAll(it) } Loading