diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 6c8bd7f352d40..c0d0c21af1ab2 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -14032,6 +14032,14 @@ public final class Settings { public static final String ZRAM_ENABLED = "zram_enabled"; + /** + * Whether the app freezer is enabled on this device. + * The value of "enabled" enables the app freezer, "disabled" disables it and + * "device_default" will let the system decide whether to enable the freezer or not + * @hide + */ + public static final String CACHED_APPS_FREEZER_ENABLED = "cached_apps_freezer"; + /** * Configuration flags for smart replies in notifications. * This is encoded as a key=value list, separated by commas. Ex: diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto index d5384a1c2fdd1..762895b6320fb 100644 --- a/core/proto/android/providers/settings/global.proto +++ b/core/proto/android/providers/settings/global.proto @@ -169,6 +169,7 @@ message GlobalSettingsProto { optional SettingProto boot_count = 22 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto bugreport_in_power_menu = 23 [ (android.privacy).dest = DEST_AUTOMATIC ]; + optional SettingProto cached_apps_freezer_enabled = 152 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto call_auto_retry = 24 [ (android.privacy).dest = DEST_AUTOMATIC ]; message CaptivePortal { @@ -1059,5 +1060,5 @@ message GlobalSettingsProto { // Please insert fields in alphabetical order and group them into messages // if possible (to avoid reaching the method limit). - // Next tag = 152; + // Next tag = 153; } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java index a5dce6da348f0..3d7559b2c1a6d 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java @@ -375,6 +375,9 @@ class SettingsProtoDumpUtil { dumpSetting(s, p, Settings.Global.BUGREPORT_IN_POWER_MENU, GlobalSettingsProto.BUGREPORT_IN_POWER_MENU); + dumpSetting(s, p, + Settings.Global.CACHED_APPS_FREEZER_ENABLED, + GlobalSettingsProto.CACHED_APPS_FREEZER_ENABLED); dumpSetting(s, p, Settings.Global.CALL_AUTO_RETRY, GlobalSettingsProto.CALL_AUTO_RETRY); diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java index be0a8640760f8..4a9eba2202e38 100644 --- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java @@ -587,7 +587,8 @@ public class SettingsBackupTest { Settings.Global.POWER_BUTTON_VERY_LONG_PRESS, Settings.Global.SHOW_MEDIA_ON_QUICK_SETTINGS, // Temporary for R beta Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER, - Settings.Global.ADVANCED_BATTERY_USAGE_AMOUNT); + Settings.Global.ADVANCED_BATTERY_USAGE_AMOUNT, + Settings.Global.CACHED_APPS_FREEZER_ENABLED); private static final Set BACKUP_BLACKLISTED_SECURE_SETTINGS = newHashSet( diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 35d2653483b95..f9d204fa008e2 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -33,6 +33,7 @@ import android.os.Trace; import android.provider.DeviceConfig; import android.provider.DeviceConfig.OnPropertiesChangedListener; import android.provider.DeviceConfig.Properties; +import android.provider.Settings; import android.text.TextUtils; import android.util.EventLog; import android.util.Slog; @@ -443,7 +444,13 @@ public final class CachedAppOptimizer { */ @GuardedBy("mPhenotypeFlagLock") private void updateUseFreezer() { - if (DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, + final String configOverride = Settings.Global.getString(mAm.mContext.getContentResolver(), + Settings.Global.CACHED_APPS_FREEZER_ENABLED); + + if ("disabled".equals(configOverride)) { + mUseFreezer = false; + } else if ("enabled".equals(configOverride) + || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, KEY_USE_FREEZER, DEFAULT_USE_FREEZER)) { mUseFreezer = isFreezerSupported(); }