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",
|
"keyboard_flags_lib",
|
||||||
],
|
],
|
||||||
|
|
||||||
plugins: ["androidx.room_room-compiler-plugin"],
|
plugins: [
|
||||||
|
"SettingsLibMetadata-processor",
|
||||||
|
"androidx.room_room-compiler-plugin",
|
||||||
|
],
|
||||||
|
|
||||||
errorprone: {
|
errorprone: {
|
||||||
extra_check_modules: ["//external/nullaway:nullaway_plugin"],
|
extra_check_modules: ["//external/nullaway:nullaway_plugin"],
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
|
import static com.android.settingslib.flags.Flags.settingsCatalyst;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@@ -42,13 +44,20 @@ import com.android.settings.overlay.FeatureFactoryImpl;
|
|||||||
import com.android.settings.spa.SettingsSpaEnvironment;
|
import com.android.settings.spa.SettingsSpaEnvironment;
|
||||||
import com.android.settingslib.applications.AppIconCacheManager;
|
import com.android.settingslib.applications.AppIconCacheManager;
|
||||||
import com.android.settingslib.datastore.BackupRestoreStorageManager;
|
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.android.settingslib.spa.framework.common.SpaEnvironmentFactory;
|
||||||
|
|
||||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/** Settings application which sets up activity embedding rules for the large screen device. */
|
/** 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 {
|
public class SettingsApplication extends Application {
|
||||||
|
|
||||||
private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);
|
private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);
|
||||||
@@ -64,6 +73,11 @@ public class SettingsApplication extends Application {
|
|||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
|
|
||||||
|
if (settingsCatalyst()) {
|
||||||
|
PreferenceScreenRegistry.INSTANCE.setPreferenceScreensSupplier(
|
||||||
|
this::getPreferenceScreens);
|
||||||
|
}
|
||||||
|
|
||||||
BackupRestoreStorageManager.getInstance(this)
|
BackupRestoreStorageManager.getInstance(this)
|
||||||
.add(
|
.add(
|
||||||
new BatterySettingsStorage(this),
|
new BatterySettingsStorage(this),
|
||||||
@@ -90,6 +104,13 @@ public class SettingsApplication extends Application {
|
|||||||
registerActivityLifecycleCallbacks(new DeveloperOptionsActivityLifecycle());
|
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
|
@Override
|
||||||
public void onTerminate() {
|
public void onTerminate() {
|
||||||
BackupRestoreStorageManager.getInstance(this).removeAll();
|
BackupRestoreStorageManager.getInstance(this).removeAll();
|
||||||
|
@@ -15,6 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.dashboard;
|
package com.android.settings.dashboard;
|
||||||
|
|
||||||
|
import static com.android.settingslib.flags.Flags.settingsCatalyst;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.ContentResolver;
|
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.core.lifecycle.Lifecycle;
|
||||||
import com.android.settingslib.drawer.DashboardCategory;
|
import com.android.settingslib.drawer.DashboardCategory;
|
||||||
import com.android.settingslib.drawer.Tile;
|
import com.android.settingslib.drawer.Tile;
|
||||||
|
import com.android.settingslib.metadata.PreferenceScreenRegistry;
|
||||||
import com.android.settingslib.search.Indexable;
|
import com.android.settingslib.search.Indexable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -97,30 +100,35 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
R.array.config_suppress_injected_tile_keys));
|
R.array.config_suppress_injected_tile_keys));
|
||||||
mDashboardFeatureProvider =
|
mDashboardFeatureProvider =
|
||||||
FeatureFactory.getFeatureFactory().getDashboardFeatureProvider();
|
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 (!usePreferenceScreenMetadata() || PreferenceScreenRegistry.INSTANCE.get(
|
||||||
if (controllersFromCode != null) {
|
getPreferenceScreenBindingKey(context)) == null) {
|
||||||
mControllers.addAll(controllersFromCode);
|
// Load preference controllers from code
|
||||||
}
|
final List<AbstractPreferenceController> controllersFromCode =
|
||||||
mControllers.addAll(uniqueControllerFromXml);
|
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.
|
// Add unique controllers to list.
|
||||||
final Lifecycle lifecycle = getSettingsLifecycle();
|
if (controllersFromCode != null) {
|
||||||
uniqueControllerFromXml.forEach(controller -> {
|
mControllers.addAll(controllersFromCode);
|
||||||
if (controller instanceof LifecycleObserver) {
|
|
||||||
lifecycle.addObserver((LifecycleObserver) controller);
|
|
||||||
}
|
}
|
||||||
});
|
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.
|
// Set metrics category for BasePreferenceController.
|
||||||
final int metricCategory = getMetricsCategory();
|
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
|
@Override
|
||||||
protected abstract int getPreferenceScreenResId();
|
protected abstract int getPreferenceScreenResId();
|
||||||
|
|
||||||
@@ -364,12 +377,32 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
if (resId <= 0) {
|
if (resId <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addPreferencesFromResource(resId);
|
PreferenceScreen screen;
|
||||||
final PreferenceScreen screen = getPreferenceScreen();
|
if (usePreferenceScreenMetadata()) {
|
||||||
|
screen = createPreferenceScreen();
|
||||||
|
setPreferenceScreen(screen);
|
||||||
|
requireActivity().setTitle(screen.getTitle());
|
||||||
|
} else {
|
||||||
|
addPreferencesFromResource(resId);
|
||||||
|
screen = getPreferenceScreen();
|
||||||
|
}
|
||||||
screen.setOnExpandButtonClickListener(this);
|
screen.setOnExpandButtonClickListener(this);
|
||||||
displayResourceTilesToScreen(screen);
|
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)}
|
* Perform {@link AbstractPreferenceController#displayPreference(PreferenceScreen)}
|
||||||
* on all {@link AbstractPreferenceController}s.
|
* on all {@link AbstractPreferenceController}s.
|
||||||
|
Reference in New Issue
Block a user