From 3ea80350ef1e6f6dee972a23e70d3be7be1a79be Mon Sep 17 00:00:00 2001 From: shafik Date: Fri, 21 Feb 2020 15:29:58 +0000 Subject: [PATCH] Ignore package mode for MANAGE_EXTERNAL_STORAGE OP_MANAGE_EXTERNAL_STORAGE's app-op mode should be set via setUidMode instead of setMode. This change ignores the package mode (set via setMode) for that app-op. Test: manual update test * adb pull /data/system/appops.xml # observe that app-op in the file * flash device with the change * adb pull /data/system/appops.xml # observe the app-op was removed Bug: 146425146 Merged-In: d5f77513e5b9fd4fbceacea22eae7dd0de4dd2d1 Change-Id: I8dd503592ae20388e59b109a4b04f58d00a9597c (cherry picked from commit d5f77513e5b9fd4fbceacea22eae7dd0de4dd2d1) --- .../android/server/appop/AppOpsService.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 5b8a6d935d30f..c15360b00d518 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -4060,9 +4060,11 @@ public class AppOpsService extends IAppOpsService.Stub { private void readOp(XmlPullParser parser, @NonNull UidState uidState, @NonNull String pkgName, boolean isPrivileged) throws NumberFormatException, XmlPullParserException, IOException { - Op op = new Op(uidState, pkgName, - Integer.parseInt(parser.getAttributeValue(null, "n")), - uidState.uid); + int opCode = Integer.parseInt(parser.getAttributeValue(null, "n")); + if (isIgnoredAppOp(opCode)) { + return; + } + Op op = new Op(uidState, pkgName, opCode, uidState.uid); final int mode = XmlUtils.readIntAttribute(parser, "m", AppOpsManager.opToDefaultMode(op.op)); @@ -4096,6 +4098,16 @@ public class AppOpsService extends IAppOpsService.Stub { ops.put(op.op, op); } + //TODO(b/149995538): Remove once this has reached all affected devices + private static boolean isIgnoredAppOp(int op) { + switch (op) { + case AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE: + return true; + default: + return false; + } + } + void writeState() { synchronized (mFile) { FileOutputStream stream;