Allow dynamic injecting preference into specific preferenceCategory

Bug: 333547416
Test: robotest
Change-Id: I443ec8c16afc6db334a6f16d857f69f293803979
This commit is contained in:
Edgar Wang
2024-04-09 18:03:15 +00:00
parent a0ad1b6f11
commit 9ff8ddeed1
2 changed files with 29 additions and 7 deletions

View File

@@ -28,3 +28,10 @@ flag {
description: "Feature flag to enable new settings homepage UX." description: "Feature flag to enable new settings homepage UX."
bug: "321612737" bug: "321612737"
} }
flag {
name: "dynamic_injection_category"
namespace: "android_settings"
description: "Feature flag to enable injection into PreferenceCategory."
bug: "333547416"
}

View File

@@ -46,6 +46,7 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.CategoryMixin.CategoryHandler; import com.android.settings.core.CategoryMixin.CategoryHandler;
import com.android.settings.core.CategoryMixin.CategoryListener; import com.android.settings.core.CategoryMixin.CategoryListener;
import com.android.settings.core.PreferenceControllerListHelper; import com.android.settings.core.PreferenceControllerListHelper;
import com.android.settings.flags.Flags;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.PrimarySwitchPreference; import com.android.settingslib.PrimarySwitchPreference;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -543,13 +544,23 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
observers = mDashboardFeatureProvider.bindPreferenceToTileAndGetObservers( observers = mDashboardFeatureProvider.bindPreferenceToTileAndGetObservers(
getActivity(), this, forceRoundedIcons, pref, tile, key, getActivity(), this, forceRoundedIcons, pref, tile, key,
mPlaceholderPreferenceController.getOrder()); mPlaceholderPreferenceController.getOrder());
if (tile.hasGroupKey() && mDashboardTilePrefKeys.containsKey(tile.getGroupKey())) { if (Flags.dynamicInjectionCategory()) {
final Preference group = screen.findPreference(tile.getGroupKey()); Preference group = screen.findPreference(tile.getGroupKey());
if (group instanceof PreferenceCategory) { if (tile.hasGroupKey() && group instanceof PreferenceCategory) {
((PreferenceCategory) group).addPreference(pref); ((PreferenceCategory) group).addPreference(pref);
} else {
screen.addPreference(pref);
} }
} else { } 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); registerDynamicDataObservers(observers);
mDashboardTilePrefKeys.put(key, observers); mDashboardTilePrefKeys.put(key, observers);
@@ -564,9 +575,13 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
for (Map.Entry<String, List<DynamicDataObserver>> entry : remove.entrySet()) { for (Map.Entry<String, List<DynamicDataObserver>> entry : remove.entrySet()) {
final String key = entry.getKey(); final String key = entry.getKey();
mDashboardTilePrefKeys.remove(key); mDashboardTilePrefKeys.remove(key);
final Preference preference = screen.findPreference(key); if (Flags.dynamicInjectionCategory()) {
if (preference != null) { screen.removePreferenceRecursively(key);
screen.removePreference(preference); } else {
Preference preference = screen.findPreference(key);
if (preference != null) {
screen.removePreference(preference);
}
} }
unregisterDynamicDataObservers(entry.getValue()); unregisterDynamicDataObservers(entry.getValue());
} }