From 65a99b6158b56c94612d21002376861e01d87bd9 Mon Sep 17 00:00:00 2001 From: Ng Zhi An Date: Mon, 1 Oct 2018 11:57:53 -0700 Subject: [PATCH] Change default mode for system alert window Starting from Q, on Phones, SYSTEM_ALERT_WINDOW is by default denied for all callers. Bug: 63697002 Test: m, flash, boot Change-Id: I7f2f697ce6cafb43b6e4075ad1985a9041605a0a --- core/java/android/app/AppOpsManager.java | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index e155fe201f987..7ae88e6576383 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -27,6 +27,7 @@ import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.app.usage.UsageStatsManager; import android.content.Context; +import android.content.pm.PackageManager; import android.content.pm.ParceledListSlice; import android.database.ContentObserver; import android.media.AudioAttributes.AttributeUsage; @@ -41,9 +42,9 @@ import android.os.RemoteException; import android.os.UserManager; import android.provider.Settings; import android.util.ArrayMap; +import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; -import android.util.SparseArray; import com.android.internal.app.IAppOpsActiveCallback; import com.android.internal.app.IAppOpsCallback; import com.android.internal.app.IAppOpsNotedCallback; @@ -60,8 +61,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; /** @@ -1489,7 +1490,7 @@ public class AppOpsManager { AppOpsManager.MODE_ALLOWED, // READ_ICC_SMS AppOpsManager.MODE_ALLOWED, // WRITE_ICC_SMS AppOpsManager.MODE_DEFAULT, // WRITE_SETTINGS - AppOpsManager.MODE_DEFAULT, // SYSTEM_ALERT_WINDOW + getSystemAlertWindowDefault(), // SYSTEM_ALERT_WINDOW AppOpsManager.MODE_ALLOWED, // ACCESS_NOTIFICATIONS AppOpsManager.MODE_ALLOWED, // CAMERA AppOpsManager.MODE_ALLOWED, // RECORD_AUDIO @@ -4807,4 +4808,21 @@ public class AppOpsManager { } } } + + private static int getSystemAlertWindowDefault() { + final Context context = ActivityThread.currentApplication(); + if (context == null) { + return AppOpsManager.MODE_DEFAULT; + } + + // system alert window is disable on low ram phones starting from Q + final PackageManager pm = context.getPackageManager(); + // 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; + } + + return AppOpsManager.MODE_DEFAULT; + } }