Loading packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt +3 −0 Original line number Original line Diff line number Diff line Loading @@ -108,6 +108,9 @@ interface PreferenceBinding { /** Abstract preference screen to provide preference hierarchy and binding factory. */ /** Abstract preference screen to provide preference hierarchy and binding factory. */ interface PreferenceScreenCreator : PreferenceScreenMetadata, PreferenceScreenProvider { 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 val preferenceBindingFactory: PreferenceBindingFactory get() = DefaultPreferenceBindingFactory get() = DefaultPreferenceBindingFactory Loading packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt +6 −29 Original line number Original line Diff line number Diff line Loading @@ -44,13 +44,8 @@ open class PreferenceFragment : fun createPreferenceScreenFromResource() = fun createPreferenceScreenFromResource() = factory.inflate(getPreferenceScreenResId(context)) factory.inflate(getPreferenceScreenResId(context)) if (!usePreferenceScreenMetadata()) return createPreferenceScreenFromResource() val screenKey = getPreferenceScreenBindingKey(context) val screenCreator = val screenCreator = (PreferenceScreenRegistry[screenKey] as? PreferenceScreenCreator) getPreferenceScreenCreator(context) ?: return createPreferenceScreenFromResource() ?: return createPreferenceScreenFromResource() val preferenceBindingFactory = screenCreator.preferenceBindingFactory val preferenceBindingFactory = screenCreator.preferenceBindingFactory val preferenceHierarchy = screenCreator.getPreferenceHierarchy(context) val preferenceHierarchy = screenCreator.getPreferenceHierarchy(context) val preferenceScreen = val preferenceScreen = Loading @@ -73,17 +68,14 @@ open class PreferenceFragment : return preferenceScreen 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. */ /** Returns the xml resource to create preference screen. */ @XmlRes protected open fun getPreferenceScreenResId(context: Context): Int = 0 @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? = override fun getPreferenceScreenBindingKey(context: Context): String? = arguments?.getString(EXTRA_BINDING_SCREEN_KEY) arguments?.getString(EXTRA_BINDING_SCREEN_KEY) Loading @@ -91,19 +83,4 @@ open class PreferenceFragment : preferenceScreenBindingHelper?.close() preferenceScreenBindingHelper?.close() super.onDestroy() 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 } } } } Loading
packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt +3 −0 Original line number Original line Diff line number Diff line Loading @@ -108,6 +108,9 @@ interface PreferenceBinding { /** Abstract preference screen to provide preference hierarchy and binding factory. */ /** Abstract preference screen to provide preference hierarchy and binding factory. */ interface PreferenceScreenCreator : PreferenceScreenMetadata, PreferenceScreenProvider { 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 val preferenceBindingFactory: PreferenceBindingFactory get() = DefaultPreferenceBindingFactory get() = DefaultPreferenceBindingFactory Loading
packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt +6 −29 Original line number Original line Diff line number Diff line Loading @@ -44,13 +44,8 @@ open class PreferenceFragment : fun createPreferenceScreenFromResource() = fun createPreferenceScreenFromResource() = factory.inflate(getPreferenceScreenResId(context)) factory.inflate(getPreferenceScreenResId(context)) if (!usePreferenceScreenMetadata()) return createPreferenceScreenFromResource() val screenKey = getPreferenceScreenBindingKey(context) val screenCreator = val screenCreator = (PreferenceScreenRegistry[screenKey] as? PreferenceScreenCreator) getPreferenceScreenCreator(context) ?: return createPreferenceScreenFromResource() ?: return createPreferenceScreenFromResource() val preferenceBindingFactory = screenCreator.preferenceBindingFactory val preferenceBindingFactory = screenCreator.preferenceBindingFactory val preferenceHierarchy = screenCreator.getPreferenceHierarchy(context) val preferenceHierarchy = screenCreator.getPreferenceHierarchy(context) val preferenceScreen = val preferenceScreen = Loading @@ -73,17 +68,14 @@ open class PreferenceFragment : return preferenceScreen 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. */ /** Returns the xml resource to create preference screen. */ @XmlRes protected open fun getPreferenceScreenResId(context: Context): Int = 0 @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? = override fun getPreferenceScreenBindingKey(context: Context): String? = arguments?.getString(EXTRA_BINDING_SCREEN_KEY) arguments?.getString(EXTRA_BINDING_SCREEN_KEY) Loading @@ -91,19 +83,4 @@ open class PreferenceFragment : preferenceScreenBindingHelper?.close() preferenceScreenBindingHelper?.close() super.onDestroy() 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 } } } }