diff options
| author | 2020-02-04 11:06:31 -0800 | |
|---|---|---|
| committer | 2020-02-04 11:08:23 -0800 | |
| commit | 23d30a250abdeea77aac30e5d447256ade16d69d (patch) | |
| tree | cba8867227bac8b2c7a29f2513210e393c619c4d | |
| parent | 1374932dcf46c1b17787cb9e7ce42e9c4e46d449 (diff) | |
Add warning before setting REVOKED_COMPAT for a modern app.
Test: presubmit
Change-Id: I67ff962a6399c077e18ce0d1952fcab617a247ec
| -rw-r--r-- | services/core/java/com/android/server/appop/AppOpsService.java | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index ee2d7fcd5d62..784ce4a7d53b 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -88,6 +88,7 @@ import android.hardware.camera2.CameraDevice.CAMERA_AUDIO_RESTRICTION; import android.net.Uri; import android.os.AsyncTask; import android.os.Binder; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -2117,10 +2118,24 @@ public class AppOpsService extends IAppOpsService.Stub { continue; } + PackageManagerInternal packageManagerInternal = LocalServices.getService( + PackageManagerInternal.class); + boolean supportsRuntimePermissions = packageManagerInternal.getUidTargetSdkVersion(uid) + >= Build.VERSION_CODES.M; + UserHandle user = UserHandle.getUserHandleForUid(uid); boolean isRevokedCompat; if (permissionInfo.backgroundPermission != null) { boolean isBackgroundRevokedCompat = mode != AppOpsManager.MODE_ALLOWED; + + if (isBackgroundRevokedCompat && supportsRuntimePermissions) { + Slog.w(TAG, "setUidMode() called with a mode inconsistent with runtime" + + " permission state, this is discouraged and you should revoke the" + + " runtime permission instead: uid=" + uid + ", switchCode=" + + switchCode + ", mode=" + mode + ", permission=" + + permissionInfo.backgroundPermission); + } + long identity = Binder.clearCallingIdentity(); try { packageManager.updatePermissionFlags(permissionInfo.backgroundPermission, @@ -2137,6 +2152,13 @@ public class AppOpsService extends IAppOpsService.Stub { isRevokedCompat = mode != AppOpsManager.MODE_ALLOWED; } + if (isRevokedCompat && supportsRuntimePermissions) { + Slog.w(TAG, "setUidMode() called with a mode inconsistent with runtime" + + " permission state, this is discouraged and you should revoke the" + + " runtime permission instead: uid=" + uid + ", switchCode=" + + switchCode + ", mode=" + mode + ", permission=" + permissionName); + } + long identity = Binder.clearCallingIdentity(); try { packageManager.updatePermissionFlags(permissionName, packageName, |