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

Commit e376c586 authored by Jacky Wang's avatar Jacky Wang Committed by Android (Google) Code Review
Browse files

Merge "Catalyst framework integration" into main

parents e18c3158 b3e1b527
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.