From ae39cb9c60e55a82f65d067a6ab8a3837fff2239 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Fri, 31 Mar 2017 11:30:14 -0400 Subject: [PATCH] Fix tuner sub-screens attach Seems that when preferences are attached has changed, so we need to make sure any sub preference screense explicitly own their preferences. Test: manual Change-Id: Id28c30367417fc7dbe74c3970a8e19a031ea6d8d Fixes: 36766199 --- .../android/systemui/tuner/TunerActivity.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java index 4eb1db6ca670e..9c69b9887210a 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java @@ -110,10 +110,35 @@ public class TunerActivity extends SettingsDrawerActivity implements } public static class SubSettingsFragment extends PreferenceFragment { + private PreferenceScreen mParentScreen; + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - setPreferenceScreen((PreferenceScreen) ((PreferenceFragment) getTargetFragment()) - .getPreferenceScreen().findPreference(rootKey)); + mParentScreen = + (PreferenceScreen) ((PreferenceFragment) getTargetFragment()) + .getPreferenceScreen().findPreference(rootKey); + PreferenceScreen screen = + getPreferenceManager().createPreferenceScreen( + getPreferenceManager().getContext()); + setPreferenceScreen(screen); + // Copy all the preferences over to this screen so they go into the attached state. + while (mParentScreen.getPreferenceCount() > 0) { + Preference p = mParentScreen.getPreference(0); + mParentScreen.removePreference(p); + screen.addPreference(p); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + // Copy all the preferences back so we don't lose them. + PreferenceScreen screen = getPreferenceScreen(); + while (screen.getPreferenceCount() > 0) { + Preference p = screen.getPreference(0); + screen.removePreference(p); + mParentScreen.addPreference(p); + } } }