Catalyst framework integration
Bug: 335132588 Flag: com.android.settingslib.flags.settings_catalyst Test: Presubmit Change-Id: Ic0f0193fd5cee144f2fab36ae5190156efb7bd10
This commit is contained in:
@@ -111,7 +111,10 @@ android_library {
|
||||
"keyboard_flags_lib",
|
||||
],
|
||||
|
||||
plugins: ["androidx.room_room-compiler-plugin"],
|
||||
plugins: [
|
||||
"SettingsLibMetadata-processor",
|
||||
"androidx.room_room-compiler-plugin",
|
||||
],
|
||||
|
||||
errorprone: {
|
||||
extra_check_modules: ["//external/nullaway:nullaway_plugin"],
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings;
|
||||
|
||||
import static com.android.settingslib.flags.Flags.settingsCatalyst;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
@@ -42,13 +44,20 @@ import com.android.settings.overlay.FeatureFactoryImpl;
|
||||
import com.android.settings.spa.SettingsSpaEnvironment;
|
||||
import com.android.settingslib.applications.AppIconCacheManager;
|
||||
import com.android.settingslib.datastore.BackupRestoreStorageManager;
|
||||
import com.android.settingslib.metadata.PreferenceScreenMetadata;
|
||||
import com.android.settingslib.metadata.PreferenceScreenRegistry;
|
||||
import com.android.settingslib.metadata.ProvidePreferenceScreenOptions;
|
||||
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory;
|
||||
|
||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
|
||||
/** Settings application which sets up activity embedding rules for the large screen device. */
|
||||
@ProvidePreferenceScreenOptions(
|
||||
codegenCollector = "com.android.settings/PreferenceScreenCollector/get"
|
||||
)
|
||||
public class SettingsApplication extends Application {
|
||||
|
||||
private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);
|
||||
@@ -64,6 +73,11 @@ public class SettingsApplication extends Application {
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
if (settingsCatalyst()) {
|
||||
PreferenceScreenRegistry.INSTANCE.setPreferenceScreensSupplier(
|
||||
this::getPreferenceScreens);
|
||||
}
|
||||
|
||||
BackupRestoreStorageManager.getInstance(this)
|
||||
.add(
|
||||
new BatterySettingsStorage(this),
|
||||
@@ -90,6 +104,13 @@ public class SettingsApplication extends Application {
|
||||
registerActivityLifecycleCallbacks(new DeveloperOptionsActivityLifecycle());
|
||||
}
|
||||
|
||||
/** Returns the screens using metadata. */
|
||||
protected List<PreferenceScreenMetadata> getPreferenceScreens() {
|
||||
// PreferenceScreenCollector is generated by annotation processor from classes annotated
|
||||
// with @ProvidePreferenceScreen
|
||||
return PreferenceScreenCollector.get(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTerminate() {
|
||||
BackupRestoreStorageManager.getInstance(this).removeAll();
|
||||
|
@@ -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.
|
||||
|
Reference in New Issue
Block a user