diff options
2 files changed, 9 insertions, 29 deletions
diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt index 9be0e7194859..5fcf4784f43b 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt @@ -108,6 +108,9 @@ interface PreferenceBinding { /** Abstract preference screen to provide preference hierarchy and binding factory. */ interface PreferenceScreenCreator : PreferenceScreenMetadata, PreferenceScreenProvider { + /** Returns if the flag (e.g. for rollout) is enabled on current screen. */ + fun isFlagEnabled(context: Context): Boolean = true + val preferenceBindingFactory: PreferenceBindingFactory get() = DefaultPreferenceBindingFactory diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt index 68f640bbb9b4..a270681edfae 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt @@ -44,13 +44,8 @@ open class PreferenceFragment : fun createPreferenceScreenFromResource() = factory.inflate(getPreferenceScreenResId(context)) - if (!usePreferenceScreenMetadata()) return createPreferenceScreenFromResource() - - val screenKey = getPreferenceScreenBindingKey(context) val screenCreator = - (PreferenceScreenRegistry[screenKey] as? PreferenceScreenCreator) - ?: return createPreferenceScreenFromResource() - + getPreferenceScreenCreator(context) ?: return createPreferenceScreenFromResource() val preferenceBindingFactory = screenCreator.preferenceBindingFactory val preferenceHierarchy = screenCreator.getPreferenceHierarchy(context) val preferenceScreen = @@ -73,17 +68,14 @@ open class PreferenceFragment : return preferenceScreen } - /** - * Returns if preference screen metadata can be used to set up preference screen. - * - * This is for flagging purpose. If false (e.g. flag is disabled), xml resource is used to build - * preference screen. - */ - protected open fun usePreferenceScreenMetadata(): Boolean = false - /** Returns the xml resource to create preference screen. */ @XmlRes protected open fun getPreferenceScreenResId(context: Context): Int = 0 + protected fun getPreferenceScreenCreator(context: Context): PreferenceScreenCreator? = + (PreferenceScreenRegistry[getPreferenceScreenBindingKey(context)] + as? PreferenceScreenCreator) + ?.run { if (isFlagEnabled(context)) this else null } + override fun getPreferenceScreenBindingKey(context: Context): String? = arguments?.getString(EXTRA_BINDING_SCREEN_KEY) @@ -91,19 +83,4 @@ open class PreferenceFragment : preferenceScreenBindingHelper?.close() super.onDestroy() } - - companion object { - /** Returns [PreferenceFragment] instance to display the preference screen of given key. */ - fun of(screenKey: String): PreferenceFragment? { - val screenMetadata = PreferenceScreenRegistry[screenKey] ?: return null - if ( - screenMetadata is PreferenceScreenCreator && screenMetadata.hasCompleteHierarchy() - ) { - return PreferenceFragment().apply { - arguments = Bundle().apply { putString(EXTRA_BINDING_SCREEN_KEY, screenKey) } - } - } - return null - } - } } |