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
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java
index 4eb1db6..9c69b98 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 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);
+ }
}
}