diff options
| author | 2016-03-04 16:13:03 -0800 | |
|---|---|---|
| committer | 2016-03-04 16:24:17 -0800 | |
| commit | 03f2afc3db08d5d0becc48e14ad89fa969a6edaf (patch) | |
| tree | 3633e9b2d2bbf23370c465f216094a294f92e99e | |
| parent | f8d700ab83216ea7bd2637a2888089e4bf538210 (diff) | |
Don't crash legacy apps with revoked "Draw over apps access"
bug:26396161
Change-Id: I8b86e175b4815e58ace78c37a86141c5e4dbe183
| -rw-r--r-- | services/core/java/com/android/server/policy/PhoneWindowManager.java | 15 |
1 files changed, 14 insertions, 1 deletions
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 |