diff options
3 files changed, 14 insertions, 5 deletions
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 debaf3e2338b..d501f4fd654d 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 @@ open class PreferenceFragment : 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 @@ open class PreferenceFragment : 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 3610894c3fc0..95b921b8e8c8 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 @@ class PreferenceScreenBindingHelper( 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 @@ class PreferenceScreenBindingHelper( } } + 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 4d5f85fa9020..e27838c4ef4d 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 @@ abstract class CatalystScreenTestCase { * 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 @@ abstract class CatalystScreenTestCase { setFlagsRule.disableFlags(flagName) } - private fun stringifyPreferenceScreen(): String { + private fun dumpPreferenceScreen(): String { @Suppress("UNCHECKED_CAST") val clazz = preferenceScreenCreator.fragmentClass() as Class<PreferenceFragmentCompat> val builder = StringBuilder() |