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

Commit c4b4aaab authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add temporary packageName-based whitelist for allowing background activity launches"

parents 33d1c704 666631b2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -276,6 +276,7 @@ public abstract class ActivityManagerInternal {
    public abstract boolean isActivityStartsLoggingEnabled();
    /** Returns true if the background activity starts is enabled. */
    public abstract boolean isBackgroundActivityStartsEnabled();
    public abstract boolean isPackageNameWhitelistedForBgActivityStarts(String packageName);
    public abstract void reportCurKeyguardUsageEvent(boolean keyguardShowing);

    /** Input dispatch timeout to a window, start the ANR process. */
+9 −0
Original line number Diff line number Diff line
@@ -11452,6 +11452,15 @@ public final class Settings {
        public static final String BACKGROUND_ACTIVITY_STARTS_ENABLED =
                "background_activity_starts_enabled";
        /**
         * The packages temporarily whitelisted to be able so start activities from background.
         * The list of packages is {@code ":"} colon delimited.
         *
         * @hide
         */
        public static final String BACKGROUND_ACTIVITY_STARTS_PACKAGE_NAMES_WHITELIST =
                "background_activity_starts_package_names_whitelist";
        /**
         * @hide
         * @see com.android.server.appbinding.AppBindingConstants
+1 −0
Original line number Diff line number Diff line
@@ -132,6 +132,7 @@ public class SettingsBackupTest {
                    Settings.Global.AUTOFILL_MAX_VISIBLE_DATASETS,
                    Settings.Global.AUTOMATIC_POWER_SAVER_MODE,
                    Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED,
                    Settings.Global.BACKGROUND_ACTIVITY_STARTS_PACKAGE_NAMES_WHITELIST,
                    Settings.Global.BATTERY_CHARGING_STATE_UPDATE_DELAY,
                    Settings.Global.BROADCAST_BG_CONSTANTS,
                    Settings.Global.BROADCAST_FG_CONSTANTS,
+28 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import android.provider.DeviceConfig;
import android.provider.DeviceConfig.OnPropertyChangedListener;
import android.provider.Settings;
import android.text.TextUtils;
import android.text.TextUtils.SimpleStringSplitter;
import android.util.ArraySet;
import android.util.KeyValueListParser;
import android.util.Slog;

@@ -235,6 +237,8 @@ final class ActivityManagerConstants extends ContentObserver {
    // Controlled by Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED
    volatile boolean mFlagBackgroundActivityStartsEnabled;

    volatile ArraySet<String> mPackageNamesWhitelistedForBgActivityStarts = new ArraySet<>();

    private final ActivityManagerService mService;
    private ContentResolver mResolver;
    private final KeyValueListParser mParser = new KeyValueListParser(',');
@@ -273,6 +277,10 @@ final class ActivityManagerConstants extends ContentObserver {
                Settings.Global.getUriFor(
                        Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED);

    private static final Uri BACKGROUND_ACTIVITY_STARTS_PACKAGE_NAMES_WHITELIST_URI =
                Settings.Global.getUriFor(
                        Settings.Global.BACKGROUND_ACTIVITY_STARTS_PACKAGE_NAMES_WHITELIST);

    private final OnPropertyChangedListener mOnDeviceConfigChangedListener =
            new OnPropertyChangedListener() {
                @Override
@@ -293,9 +301,12 @@ final class ActivityManagerConstants extends ContentObserver {
        mResolver.registerContentObserver(ACTIVITY_MANAGER_CONSTANTS_URI, false, this);
        mResolver.registerContentObserver(ACTIVITY_STARTS_LOGGING_ENABLED_URI, false, this);
        mResolver.registerContentObserver(BACKGROUND_ACTIVITY_STARTS_ENABLED_URI, false, this);
        mResolver.registerContentObserver(BACKGROUND_ACTIVITY_STARTS_PACKAGE_NAMES_WHITELIST_URI,
                false, this);
        updateConstants();
        updateActivityStartsLoggingEnabled();
        updateBackgroundActivityStartsEnabled();
        updateBackgroundActivityStartsPackageNamesWhitelist();
        DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                ActivityThread.currentApplication().getMainExecutor(),
                mOnDeviceConfigChangedListener);
@@ -325,6 +336,8 @@ final class ActivityManagerConstants extends ContentObserver {
            updateActivityStartsLoggingEnabled();
        } else if (BACKGROUND_ACTIVITY_STARTS_ENABLED_URI.equals(uri)) {
            updateBackgroundActivityStartsEnabled();
        } else if (BACKGROUND_ACTIVITY_STARTS_PACKAGE_NAMES_WHITELIST_URI.equals(uri)) {
            updateBackgroundActivityStartsPackageNamesWhitelist();
        }
    }

@@ -414,6 +427,21 @@ final class ActivityManagerConstants extends ContentObserver {
                Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED, 1) == 1;
    }

    private void updateBackgroundActivityStartsPackageNamesWhitelist() {
        final String setting = Settings.Global.getString(mResolver,
                Settings.Global.BACKGROUND_ACTIVITY_STARTS_PACKAGE_NAMES_WHITELIST);
        if (TextUtils.isEmpty(setting)) {
            return;
        }
        ArraySet<String> newSet = new ArraySet<>();
        SimpleStringSplitter splitter = new SimpleStringSplitter(':');
        splitter.setString(setting);
        while (splitter.hasNext()) {
            newSet.add(splitter.next());
        }
        mPackageNamesWhitelistedForBgActivityStarts = newSet;
    }

    private void updateMaxCachedProcesses() {
        String maxCachedProcessesFlag = DeviceConfig.getProperty(
                DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_MAX_CACHED_PROCESSES);
+4 −0
Original line number Diff line number Diff line
@@ -17862,6 +17862,10 @@ public class ActivityManagerService extends IActivityManager.Stub
            return mConstants.mFlagActivityStartsLoggingEnabled;
        }
        public boolean isPackageNameWhitelistedForBgActivityStarts(String packageName) {
            return mConstants.mPackageNamesWhitelistedForBgActivityStarts.contains(packageName);
        }
        public boolean isBackgroundActivityStartsEnabled() {
            return mConstants.mFlagBackgroundActivityStartsEnabled;
        }
Loading