diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index 833bfed573b2d..496ad0c99dfe6 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -673,4 +673,9 @@ interface IActivityManager {
* @param state The customized state data
*/
void setProcessStateSummary(in byte[] state);
+
+ /**
+ * Return whether the app freezer is supported (true) or not (false) by this system.
+ */
+ boolean isAppFreezerSupported();
}
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/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml
index 7b58937049d1a..d59d698efba20 100644
--- a/packages/SettingsLib/res/values/arrays.xml
+++ b/packages/SettingsLib/res/values/arrays.xml
@@ -633,4 +633,18 @@
- @color/bt_color_bg_7
+
+
+ - @string/cached_apps_freezer_device_default
+ - @string/cached_apps_freezer_enabled
+ - @string/cached_apps_freezer_disabled
+
+
+
+
+ - device_default
+ - enabled
+ - disabled
+
+
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 7ca0e809143a1..934f61091bcc2 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1365,4 +1365,12 @@
Guest
+
+ Device default
+
+ Disabled
+
+ Enabled
+
+ Your device must be rebooted for this change to apply. Reboot now or cancel.
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/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 8d35152021260..11e6f20689caa 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -20201,4 +20201,15 @@ public class ActivityManagerService extends IActivityManager.Stub
mUsageStatsService.reportLocusUpdate(activity, userId, locusId, appToken);
}
}
+
+ @Override
+ public boolean isAppFreezerSupported() {
+ final long token = Binder.clearCallingIdentity();
+
+ try {
+ return mOomAdjuster.mCachedAppOptimizer.isFreezerSupported();
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index 86d9028f53dca..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;
@@ -407,7 +408,7 @@ public final class CachedAppOptimizer {
/**
* Determines whether the freezer is correctly supported by this system
*/
- public boolean isFreezerSupported() {
+ public static boolean isFreezerSupported() {
boolean supported = false;
FileReader fr = null;
@@ -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();
}