diff options
| -rw-r--r-- | services/core/java/com/android/server/policy/PermissionPolicyService.java | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java index 9b9f93f7b5c4..4400e5042877 100644 --- a/services/core/java/com/android/server/policy/PermissionPolicyService.java +++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java @@ -676,10 +676,19 @@ public final class PermissionPolicyService extends SystemService { private void setUidMode(int opCode, int uid, int mode, @NonNull String packageName) { - final int currentMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager - .opToPublicName(opCode), uid, packageName); - if (currentMode != mode) { + final int oldMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager.opToPublicName( + opCode), uid, packageName); + if (oldMode != mode) { mAppOpsManager.setUidMode(opCode, uid, mode); + final int newMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager.opToPublicName( + opCode), uid, packageName); + if (newMode != mode) { + // Work around incorrectly-set package mode. It never makes sense for app ops + // related to runtime permissions, but can get in the way and we have to reset + // it. + mAppOpsManager.setMode(opCode, uid, packageName, AppOpsManager.opToDefaultMode( + opCode)); + } } } |