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."
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.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,14 +544,24 @@ 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 (Flags.dynamicInjectionCategory()) {
Preference group = screen.findPreference(tile.getGroupKey());
if (tile.hasGroupKey() && group instanceof PreferenceCategory) {
((PreferenceCategory) group).addPreference(pref);
} else {
screen.addPreference(pref);
}
} else {
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,10 +575,14 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
for (Map.Entry<String, List<DynamicDataObserver>> entry : remove.entrySet()) {
final String key = entry.getKey();
mDashboardTilePrefKeys.remove(key);
final Preference preference = screen.findPreference(key);
if (Flags.dynamicInjectionCategory()) {
screen.removePreferenceRecursively(key);
} else {
Preference preference = screen.findPreference(key);
if (preference != null) {
screen.removePreference(preference);
}
}
unregisterDynamicDataObservers(entry.getValue());
}