Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3e1b527 authored by Jacky Wang's avatar Jacky Wang
Browse files

Catalyst framework integration

Bug: 335132588
Flag: com.android.settingslib.flags.settings_catalyst
Test: Presubmit
Change-Id: Ic0f0193fd5cee144f2fab36ae5190156efb7bd10
parent 457ab074
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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"],
+21 −0
Original line number Diff line number Diff line
@@ -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();
+58 −25
Original line number Diff line number Diff line
@@ -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,13 +100,17 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
                R.array.config_suppress_injected_tile_keys));
        mDashboardFeatureProvider =
                FeatureFactory.getFeatureFactory().getDashboardFeatureProvider();

        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.
            // Filter xml-based controllers in case a similar controller is created from code
            // already.
            final List<BasePreferenceController> uniqueControllerFromXml =
                    PreferenceControllerListHelper.filterControllers(
                            controllersFromXml, controllersFromCode);
@@ -121,6 +128,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
                    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;
        }
        PreferenceScreen screen;
        if (usePreferenceScreenMetadata()) {
            screen = createPreferenceScreen();
            setPreferenceScreen(screen);
            requireActivity().setTitle(screen.getTitle());
        } else {
            addPreferencesFromResource(resId);
        final PreferenceScreen screen = getPreferenceScreen();
            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.