Merge changes from topic "catalyst" into main
* changes:
[Catalyst] Support hybrid mode screen test
[Catalyst] Support hybrid mode
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 debaf3e..d501f4f 100644
--- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt
+++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt
@@ -41,6 +41,9 @@
createPreferenceScreen(PreferenceScreenFactory(this))
override fun createPreferenceScreen(factory: PreferenceScreenFactory): PreferenceScreen? {
+ preferenceScreenBindingHelper?.close()
+ preferenceScreenBindingHelper = null
+
val context = factory.context
fun createPreferenceScreenFromResource() =
factory.inflate(getPreferenceScreenResId(context))?.also {
@@ -86,9 +89,13 @@
override fun onDestroy() {
preferenceScreenBindingHelper?.close()
+ preferenceScreenBindingHelper = null
super.onDestroy()
}
+ protected fun getPreferenceKeysInHierarchy(): Set<String> =
+ preferenceScreenBindingHelper?.getPreferences()?.map { it.key }?.toSet() ?: setOf()
+
companion object {
private const val TAG = "PreferenceFragment"
}
diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt
index 3610894..95b921b 100644
--- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt
+++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt
@@ -45,7 +45,7 @@
context: Context,
private val preferenceBindingFactory: PreferenceBindingFactory,
private val preferenceScreen: PreferenceScreen,
- preferenceHierarchy: PreferenceHierarchy,
+ private val preferenceHierarchy: PreferenceHierarchy,
) : KeyedDataObservable<String>(), AutoCloseable {
private val handler = Handler(Looper.getMainLooper())
@@ -133,6 +133,8 @@
}
}
+ fun getPreferences() = preferenceHierarchy.getAllPreferences()
+
override fun close() {
removeObserver(preferenceObserver)
val context = preferenceScreen.context
diff --git a/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt b/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt
index 4d5f85f..e27838c 100644
--- a/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt
+++ b/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt
@@ -49,15 +49,15 @@
* catalyst screen (flag is enabled).
*/
@Test
- fun migration() {
+ open fun migration() {
enableCatalystScreen()
assertThat(preferenceScreenCreator.isFlagEnabled(context)).isTrue()
- val catalystScreen = stringifyPreferenceScreen()
+ val catalystScreen = dumpPreferenceScreen()
Log.i("Catalyst", catalystScreen)
disableCatalystScreen()
assertThat(preferenceScreenCreator.isFlagEnabled(context)).isFalse()
- val legacyScreen = stringifyPreferenceScreen()
+ val legacyScreen = dumpPreferenceScreen()
assertThat(catalystScreen).isEqualTo(legacyScreen)
}
@@ -82,7 +82,7 @@
setFlagsRule.disableFlags(flagName)
}
- private fun stringifyPreferenceScreen(): String {
+ private fun dumpPreferenceScreen(): String {
@Suppress("UNCHECKED_CAST")
val clazz = preferenceScreenCreator.fragmentClass() as Class<PreferenceFragmentCompat>
val builder = StringBuilder()