Loading core/java/android/app/ActivityManagerInternal.java +1 −0 Original line number Diff line number Diff line Loading @@ -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. */ Loading core/java/android/provider/Settings.java +9 −0 Original line number Diff line number Diff line Loading @@ -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 Loading core/tests/coretests/src/android/provider/SettingsBackupTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -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, Loading services/core/java/com/android/server/am/ActivityManagerConstants.java +28 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(','); Loading Loading @@ -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 Loading @@ -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); Loading Loading @@ -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(); } } Loading Loading @@ -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); Loading services/core/java/com/android/server/am/ActivityManagerService.java +4 −0 Original line number Diff line number Diff line Loading @@ -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
core/java/android/app/ActivityManagerInternal.java +1 −0 Original line number Diff line number Diff line Loading @@ -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. */ Loading
core/java/android/provider/Settings.java +9 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
core/tests/coretests/src/android/provider/SettingsBackupTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -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, Loading
services/core/java/com/android/server/am/ActivityManagerConstants.java +28 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(','); Loading Loading @@ -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 Loading @@ -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); Loading Loading @@ -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(); } } Loading Loading @@ -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); Loading
services/core/java/com/android/server/am/ActivityManagerService.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; }