Fix default mode for system alert window on low-RAM device.
Bug: 219771773 Fixes: 219771773 Test: atest com.google.android.memory.gts.RestrictedFeatureTest#testSystemAlertWindowRestriction Change-Id: I688dc11154383966f83cfdfcd1163a713bb03e61
This commit is contained in:
@@ -2687,7 +2687,7 @@ public class AppOpsManager {
|
||||
AppOpsManager.MODE_ALLOWED, // READ_ICC_SMS
|
||||
AppOpsManager.MODE_ALLOWED, // WRITE_ICC_SMS
|
||||
AppOpsManager.MODE_DEFAULT, // WRITE_SETTINGS
|
||||
getSystemAlertWindowDefault(), // SYSTEM_ALERT_WINDOW
|
||||
AppOpsManager.MODE_DEFAULT, // SYSTEM_ALERT_WINDOW /*Overridden in opToDefaultMode()*/
|
||||
AppOpsManager.MODE_ALLOWED, // ACCESS_NOTIFICATIONS
|
||||
AppOpsManager.MODE_ALLOWED, // CAMERA
|
||||
AppOpsManager.MODE_ALLOWED, // RECORD_AUDIO
|
||||
@@ -3011,6 +3011,8 @@ public class AppOpsManager {
|
||||
private static final String DEBUG_LOGGING_OPS_PROP = "appops.logging_ops";
|
||||
private static final String DEBUG_LOGGING_TAG = "AppOpsManager";
|
||||
|
||||
private static volatile Integer sOpSystemAlertWindowDefaultMode;
|
||||
|
||||
/**
|
||||
* Retrieve the op switch that controls the given operation.
|
||||
* @hide
|
||||
@@ -3109,6 +3111,9 @@ public class AppOpsManager {
|
||||
* @hide
|
||||
*/
|
||||
public static @Mode int opToDefaultMode(int op) {
|
||||
if (op == OP_SYSTEM_ALERT_WINDOW) {
|
||||
return getSystemAlertWindowDefault();
|
||||
}
|
||||
return sOpDefaultMode[op];
|
||||
}
|
||||
|
||||
@@ -10113,6 +10118,11 @@ public class AppOpsManager {
|
||||
}
|
||||
|
||||
private static int getSystemAlertWindowDefault() {
|
||||
// This is indeed racy but we aren't expecting the result to change so it's not worth
|
||||
// the synchronization.
|
||||
if (sOpSystemAlertWindowDefaultMode != null) {
|
||||
return sOpSystemAlertWindowDefaultMode;
|
||||
}
|
||||
final Context context = ActivityThread.currentApplication();
|
||||
if (context == null) {
|
||||
return AppOpsManager.MODE_DEFAULT;
|
||||
@@ -10123,10 +10133,11 @@ public class AppOpsManager {
|
||||
// TVs are constantly plugged in and has less concern for memory/power
|
||||
if (ActivityManager.isLowRamDeviceStatic()
|
||||
&& !pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK, 0)) {
|
||||
return AppOpsManager.MODE_IGNORED;
|
||||
sOpSystemAlertWindowDefaultMode = AppOpsManager.MODE_IGNORED;
|
||||
} else {
|
||||
sOpSystemAlertWindowDefaultMode = AppOpsManager.MODE_DEFAULT;
|
||||
}
|
||||
|
||||
return AppOpsManager.MODE_DEFAULT;
|
||||
return sOpSystemAlertWindowDefaultMode;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user