summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hai Zhang <zhanghai@google.com> 2020-02-04 11:06:31 -0800
committer Hai Zhang <zhanghai@google.com> 2020-02-04 11:08:23 -0800
commit23d30a250abdeea77aac30e5d447256ade16d69d (patch)
treecba8867227bac8b2c7a29f2513210e393c619c4d
parent1374932dcf46c1b17787cb9e7ce42e9c4e46d449 (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.java22
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,