From 03f2afc3db08d5d0becc48e14ad89fa969a6edaf Mon Sep 17 00:00:00 2001 From: Svet Ganov Date: Fri, 4 Mar 2016 16:13:03 -0800 Subject: Don't crash legacy apps with revoked "Draw over apps access" bug:26396161 Change-Id: I8b86e175b4815e58ace78c37a86141c5e4dbe183 --- .../com/android/server/policy/PhoneWindowManager.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 6320413a452a..ff7c790769df 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -57,6 +57,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.CompatibilityInfo; @@ -76,6 +77,7 @@ import android.media.Ringtone; import android.media.RingtoneManager; import android.media.session.MediaSessionLegacyHelper; import android.os.Binder; +import android.os.Build; import android.os.Bundle; import android.os.Debug; import android.os.FactoryTest; @@ -2053,7 +2055,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // check if user has enabled this operation. SecurityException will be thrown if // this app has not been allowed by the user - final int mode = mAppOpsManager.checkOp(outAppOp[0], callingUid, + final int mode = mAppOpsManager.checkOpNoThrow(outAppOp[0], callingUid, attrs.packageName); switch (mode) { case AppOpsManager.MODE_ALLOWED: @@ -2062,6 +2064,17 @@ public class PhoneWindowManager implements WindowManagerPolicy { // actually be hidden in WindowManagerService return WindowManagerGlobal.ADD_OKAY; case AppOpsManager.MODE_ERRORED: + try { + ApplicationInfo appInfo = mContext.getPackageManager() + .getApplicationInfo(attrs.packageName, + UserHandle.getUserId(callingUid)); + // Don't crash legacy apps + if (appInfo.targetSdkVersion < Build.VERSION_CODES.M) { + return WindowManagerGlobal.ADD_OKAY; + } + } catch (PackageManager.NameNotFoundException e) { + /* ignore */ + } return WindowManagerGlobal.ADD_PERMISSION_DENIED; default: // in the default mode, we will make a decision here based on -- cgit v1.2.3-59-g8ed1b