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

Commit 8152335a authored by Rajeev Kumar's avatar Rajeev Kumar
Browse files

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
parent 38e0ef45
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -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;
    }

    /**