From 9ff8ddeed13a2aa8fcabd2fda2c2a882021a9a84 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Tue, 9 Apr 2024 18:03:15 +0000 Subject: [PATCH] Allow dynamic injecting preference into specific preferenceCategory Bug: 333547416 Test: robotest Change-Id: I443ec8c16afc6db334a6f16d857f69f293803979 --- aconfig/settings_flag_declarations.aconfig | 7 +++++ .../settings/dashboard/DashboardFragment.java | 29 ++++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/aconfig/settings_flag_declarations.aconfig b/aconfig/settings_flag_declarations.aconfig index 814f7e1af0f..ac59f1b30c3 100644 --- a/aconfig/settings_flag_declarations.aconfig +++ b/aconfig/settings_flag_declarations.aconfig @@ -28,3 +28,10 @@ flag { description: "Feature flag to enable new settings homepage UX." bug: "321612737" } + +flag { + name: "dynamic_injection_category" + namespace: "android_settings" + description: "Feature flag to enable injection into PreferenceCategory." + bug: "333547416" +} diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index 09730767d09..6df80f1c2ac 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -46,6 +46,7 @@ import com.android.settings.core.BasePreferenceController; import com.android.settings.core.CategoryMixin.CategoryHandler; import com.android.settings.core.CategoryMixin.CategoryListener; import com.android.settings.core.PreferenceControllerListHelper; +import com.android.settings.flags.Flags; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.PrimarySwitchPreference; import com.android.settingslib.core.AbstractPreferenceController; @@ -543,13 +544,23 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment observers = mDashboardFeatureProvider.bindPreferenceToTileAndGetObservers( getActivity(), this, forceRoundedIcons, pref, tile, key, mPlaceholderPreferenceController.getOrder()); - if (tile.hasGroupKey() && mDashboardTilePrefKeys.containsKey(tile.getGroupKey())) { - final Preference group = screen.findPreference(tile.getGroupKey()); - if (group instanceof PreferenceCategory) { + if (Flags.dynamicInjectionCategory()) { + Preference group = screen.findPreference(tile.getGroupKey()); + if (tile.hasGroupKey() && group instanceof PreferenceCategory) { ((PreferenceCategory) group).addPreference(pref); + } else { + screen.addPreference(pref); } } else { - screen.addPreference(pref); + if (tile.hasGroupKey() + && mDashboardTilePrefKeys.containsKey(tile.getGroupKey())) { + Preference group = screen.findPreference(tile.getGroupKey()); + if (group instanceof PreferenceCategory) { + ((PreferenceCategory) group).addPreference(pref); + } + } else { + screen.addPreference(pref); + } } registerDynamicDataObservers(observers); mDashboardTilePrefKeys.put(key, observers); @@ -564,9 +575,13 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment for (Map.Entry> entry : remove.entrySet()) { final String key = entry.getKey(); mDashboardTilePrefKeys.remove(key); - final Preference preference = screen.findPreference(key); - if (preference != null) { - screen.removePreference(preference); + if (Flags.dynamicInjectionCategory()) { + screen.removePreferenceRecursively(key); + } else { + Preference preference = screen.findPreference(key); + if (preference != null) { + screen.removePreference(preference); + } } unregisterDynamicDataObservers(entry.getValue()); }