Catalyst framework integration

Bug: 335132588
Flag: com.android.settingslib.flags.settings_catalyst
Test: Presubmit
Change-Id: Ic0f0193fd5cee144f2fab36ae5190156efb7bd10
This commit is contained in:
Jacky Wang
2024-09-09 20:58:38 +08:00
parent 457ab0748e
commit b3e1b527d8
3 changed files with 81 additions and 24 deletions

View File

@@ -15,6 +15,8 @@
*/
package com.android.settings.dashboard;
import static com.android.settingslib.flags.Flags.settingsCatalyst;
import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.content.ContentResolver;
@@ -53,6 +55,7 @@ import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.Tile;
import com.android.settingslib.metadata.PreferenceScreenRegistry;
import com.android.settingslib.search.Indexable;
import java.util.ArrayList;
@@ -97,30 +100,35 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
R.array.config_suppress_injected_tile_keys));
mDashboardFeatureProvider =
FeatureFactory.getFeatureFactory().getDashboardFeatureProvider();
// Load preference controllers from code
final List<AbstractPreferenceController> controllersFromCode =
createPreferenceControllers(context);
// Load preference controllers from xml definition
final List<BasePreferenceController> controllersFromXml = PreferenceControllerListHelper
.getPreferenceControllersFromXml(context, getPreferenceScreenResId());
// Filter xml-based controllers in case a similar controller is created from code already.
final List<BasePreferenceController> uniqueControllerFromXml =
PreferenceControllerListHelper.filterControllers(
controllersFromXml, controllersFromCode);
// Add unique controllers to list.
if (controllersFromCode != null) {
mControllers.addAll(controllersFromCode);
}
mControllers.addAll(uniqueControllerFromXml);
if (!usePreferenceScreenMetadata() || PreferenceScreenRegistry.INSTANCE.get(
getPreferenceScreenBindingKey(context)) == null) {
// Load preference controllers from code
final List<AbstractPreferenceController> controllersFromCode =
createPreferenceControllers(context);
// Load preference controllers from xml definition
final List<BasePreferenceController> controllersFromXml = PreferenceControllerListHelper
.getPreferenceControllersFromXml(context, getPreferenceScreenResId());
// Filter xml-based controllers in case a similar controller is created from code
// already.
final List<BasePreferenceController> uniqueControllerFromXml =
PreferenceControllerListHelper.filterControllers(
controllersFromXml, controllersFromCode);
// And wire up with lifecycle.
final Lifecycle lifecycle = getSettingsLifecycle();
uniqueControllerFromXml.forEach(controller -> {
if (controller instanceof LifecycleObserver) {
lifecycle.addObserver((LifecycleObserver) controller);
// Add unique controllers to list.
if (controllersFromCode != null) {
mControllers.addAll(controllersFromCode);
}
});
mControllers.addAll(uniqueControllerFromXml);
// And wire up with lifecycle.
final Lifecycle lifecycle = getSettingsLifecycle();
uniqueControllerFromXml.forEach(controller -> {
if (controller instanceof LifecycleObserver) {
lifecycle.addObserver((LifecycleObserver) controller);
}
});
}
// Set metrics category for BasePreferenceController.
final int metricCategory = getMetricsCategory();
@@ -272,6 +280,11 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
}
}
@Override
protected final int getPreferenceScreenResId(@NonNull Context context) {
return getPreferenceScreenResId();
}
@Override
protected abstract int getPreferenceScreenResId();
@@ -364,12 +377,32 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
if (resId <= 0) {
return;
}
addPreferencesFromResource(resId);
final PreferenceScreen screen = getPreferenceScreen();
PreferenceScreen screen;
if (usePreferenceScreenMetadata()) {
screen = createPreferenceScreen();
setPreferenceScreen(screen);
requireActivity().setTitle(screen.getTitle());
} else {
addPreferencesFromResource(resId);
screen = getPreferenceScreen();
}
screen.setOnExpandButtonClickListener(this);
displayResourceTilesToScreen(screen);
}
@Override
protected final boolean usePreferenceScreenMetadata() {
return settingsCatalyst() && enableCatalyst();
}
/**
* Returns if settings catalyst should be enabled (e.g. check trunk stable flag) on current
* screen.
*/
protected boolean enableCatalyst() {
return false;
}
/**
* Perform {@link AbstractPreferenceController#displayPreference(PreferenceScreen)}
* on all {@link AbstractPreferenceController}s.