Loading core/java/android/app/AppOpsManagerInternal.java +8 −6 Original line number Diff line number Diff line Loading @@ -94,14 +94,16 @@ public abstract class AppOpsManagerInternal { boolean visible); /** * Like {@link AppOpsManager#setUidMode}, but allows ignoring a certain callback. * Like {@link AppOpsManager#setUidMode}, but allows ignoring our own callback and not updating * the REVOKED_COMPAT flag. */ public abstract void setUidModeIgnoringCallback(int code, int uid, int mode, @Nullable IAppOpsCallback callbackToIgnore); public abstract void setUidModeFromPermissionPolicy(int code, int uid, int mode, @Nullable IAppOpsCallback callback); /** * Like {@link AppOpsManager#setMode}, but allows ignoring a certain callback. * Like {@link AppOpsManager#setMode}, but allows ignoring our own callback and not updating the * REVOKED_COMPAT flag. */ public abstract void setModeIgnoringCallback(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callbackToIgnore); public abstract void setModeFromPermissionPolicy(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callback); } services/core/java/com/android/server/appop/AppOpsService.java +14 −12 Original line number Diff line number Diff line Loading @@ -2087,7 +2087,7 @@ public class AppOpsService extends IAppOpsService.Stub { } private void setUidMode(int code, int uid, int mode, @Nullable IAppOpsCallback callbackToIgnore) { @Nullable IAppOpsCallback permissionPolicyCallback) { if (DEBUG) { Slog.i(TAG, "uid " + uid + " OP_" + opToName(code) + " := " + modeToName(mode) + " by uid " + Binder.getCallingUid()); Loading @@ -2097,7 +2097,9 @@ public class AppOpsService extends IAppOpsService.Stub { verifyIncomingOp(code); code = AppOpsManager.opToSwitch(code); if (permissionPolicyCallback == null) { updatePermissionRevokedCompat(uid, code, mode); } synchronized (this) { final int defaultMode = AppOpsManager.opToDefaultMode(code); Loading Loading @@ -2135,7 +2137,7 @@ public class AppOpsService extends IAppOpsService.Stub { uidState.evalForegroundOps(mOpModeWatchers); } notifyOpChangedForAllPkgsInUid(code, uid, false, callbackToIgnore); notifyOpChangedForAllPkgsInUid(code, uid, false, permissionPolicyCallback); notifyOpChangedSync(code, uid, null, mode); } Loading Loading @@ -2337,7 +2339,7 @@ public class AppOpsService extends IAppOpsService.Stub { } private void setMode(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callbackToIgnore) { @Nullable IAppOpsCallback permissionPolicyCallback) { enforceManageAppOpsModes(Binder.getCallingPid(), Binder.getCallingUid(), uid); verifyIncomingOp(code); ArraySet<ModeCallback> repCbs = null; Loading Loading @@ -2381,8 +2383,8 @@ public class AppOpsService extends IAppOpsService.Stub { } repCbs.addAll(cbs); } if (repCbs != null && callbackToIgnore != null) { repCbs.remove(mModeWatchers.get(callbackToIgnore.asBinder())); if (repCbs != null && permissionPolicyCallback != null) { repCbs.remove(mModeWatchers.get(permissionPolicyCallback.asBinder())); } if (mode == AppOpsManager.opToDefaultMode(op.op)) { // If going into the default mode, prune this op Loading Loading @@ -6036,15 +6038,15 @@ public class AppOpsService extends IAppOpsService.Stub { } @Override public void setUidModeIgnoringCallback(int code, int uid, int mode, @Nullable IAppOpsCallback callbackToIgnore) { setUidMode(code, uid, mode, callbackToIgnore); public void setUidModeFromPermissionPolicy(int code, int uid, int mode, @Nullable IAppOpsCallback callback) { setUidMode(code, uid, mode, callback); } @Override public void setModeIgnoringCallback(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callbackToIgnore) { setMode(code, uid, packageName, mode, callbackToIgnore); public void setModeFromPermissionPolicy(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callback) { setMode(code, uid, packageName, mode, callback); } } } services/core/java/com/android/server/policy/PermissionPolicyService.java +3 −3 Original line number Diff line number Diff line Loading @@ -683,7 +683,7 @@ public final class PermissionPolicyService extends SystemService { opCode), uid, pkgsOfUid[0]); if (currentMode != MODE_ALLOWED) { if (currentMode != MODE_IGNORED) { mAppOpsManagerInternal.setUidModeIgnoringCallback(opCode, uid, MODE_IGNORED, mAppOpsManagerInternal.setUidModeFromPermissionPolicy(opCode, uid, MODE_IGNORED, mAppOpsCallback); } return true; Loading @@ -700,7 +700,7 @@ public final class PermissionPolicyService extends SystemService { final int oldMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager.opToPublicName( opCode), uid, pkgsOfUid[0]); if (oldMode != mode) { mAppOpsManagerInternal.setUidModeIgnoringCallback(opCode, uid, mode, mAppOpsManagerInternal.setUidModeFromPermissionPolicy(opCode, uid, mode, mAppOpsCallback); final int newMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager.opToPublicName( opCode), uid, pkgsOfUid[0]); Loading @@ -708,7 +708,7 @@ public final class PermissionPolicyService extends SystemService { // 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. mAppOpsManagerInternal.setModeIgnoringCallback(opCode, uid, pkgsOfUid[0], mAppOpsManagerInternal.setModeFromPermissionPolicy(opCode, uid, pkgsOfUid[0], AppOpsManager.opToDefaultMode(opCode), mAppOpsCallback); } } Loading Loading
core/java/android/app/AppOpsManagerInternal.java +8 −6 Original line number Diff line number Diff line Loading @@ -94,14 +94,16 @@ public abstract class AppOpsManagerInternal { boolean visible); /** * Like {@link AppOpsManager#setUidMode}, but allows ignoring a certain callback. * Like {@link AppOpsManager#setUidMode}, but allows ignoring our own callback and not updating * the REVOKED_COMPAT flag. */ public abstract void setUidModeIgnoringCallback(int code, int uid, int mode, @Nullable IAppOpsCallback callbackToIgnore); public abstract void setUidModeFromPermissionPolicy(int code, int uid, int mode, @Nullable IAppOpsCallback callback); /** * Like {@link AppOpsManager#setMode}, but allows ignoring a certain callback. * Like {@link AppOpsManager#setMode}, but allows ignoring our own callback and not updating the * REVOKED_COMPAT flag. */ public abstract void setModeIgnoringCallback(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callbackToIgnore); public abstract void setModeFromPermissionPolicy(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callback); }
services/core/java/com/android/server/appop/AppOpsService.java +14 −12 Original line number Diff line number Diff line Loading @@ -2087,7 +2087,7 @@ public class AppOpsService extends IAppOpsService.Stub { } private void setUidMode(int code, int uid, int mode, @Nullable IAppOpsCallback callbackToIgnore) { @Nullable IAppOpsCallback permissionPolicyCallback) { if (DEBUG) { Slog.i(TAG, "uid " + uid + " OP_" + opToName(code) + " := " + modeToName(mode) + " by uid " + Binder.getCallingUid()); Loading @@ -2097,7 +2097,9 @@ public class AppOpsService extends IAppOpsService.Stub { verifyIncomingOp(code); code = AppOpsManager.opToSwitch(code); if (permissionPolicyCallback == null) { updatePermissionRevokedCompat(uid, code, mode); } synchronized (this) { final int defaultMode = AppOpsManager.opToDefaultMode(code); Loading Loading @@ -2135,7 +2137,7 @@ public class AppOpsService extends IAppOpsService.Stub { uidState.evalForegroundOps(mOpModeWatchers); } notifyOpChangedForAllPkgsInUid(code, uid, false, callbackToIgnore); notifyOpChangedForAllPkgsInUid(code, uid, false, permissionPolicyCallback); notifyOpChangedSync(code, uid, null, mode); } Loading Loading @@ -2337,7 +2339,7 @@ public class AppOpsService extends IAppOpsService.Stub { } private void setMode(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callbackToIgnore) { @Nullable IAppOpsCallback permissionPolicyCallback) { enforceManageAppOpsModes(Binder.getCallingPid(), Binder.getCallingUid(), uid); verifyIncomingOp(code); ArraySet<ModeCallback> repCbs = null; Loading Loading @@ -2381,8 +2383,8 @@ public class AppOpsService extends IAppOpsService.Stub { } repCbs.addAll(cbs); } if (repCbs != null && callbackToIgnore != null) { repCbs.remove(mModeWatchers.get(callbackToIgnore.asBinder())); if (repCbs != null && permissionPolicyCallback != null) { repCbs.remove(mModeWatchers.get(permissionPolicyCallback.asBinder())); } if (mode == AppOpsManager.opToDefaultMode(op.op)) { // If going into the default mode, prune this op Loading Loading @@ -6036,15 +6038,15 @@ public class AppOpsService extends IAppOpsService.Stub { } @Override public void setUidModeIgnoringCallback(int code, int uid, int mode, @Nullable IAppOpsCallback callbackToIgnore) { setUidMode(code, uid, mode, callbackToIgnore); public void setUidModeFromPermissionPolicy(int code, int uid, int mode, @Nullable IAppOpsCallback callback) { setUidMode(code, uid, mode, callback); } @Override public void setModeIgnoringCallback(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callbackToIgnore) { setMode(code, uid, packageName, mode, callbackToIgnore); public void setModeFromPermissionPolicy(int code, int uid, @NonNull String packageName, int mode, @Nullable IAppOpsCallback callback) { setMode(code, uid, packageName, mode, callback); } } }
services/core/java/com/android/server/policy/PermissionPolicyService.java +3 −3 Original line number Diff line number Diff line Loading @@ -683,7 +683,7 @@ public final class PermissionPolicyService extends SystemService { opCode), uid, pkgsOfUid[0]); if (currentMode != MODE_ALLOWED) { if (currentMode != MODE_IGNORED) { mAppOpsManagerInternal.setUidModeIgnoringCallback(opCode, uid, MODE_IGNORED, mAppOpsManagerInternal.setUidModeFromPermissionPolicy(opCode, uid, MODE_IGNORED, mAppOpsCallback); } return true; Loading @@ -700,7 +700,7 @@ public final class PermissionPolicyService extends SystemService { final int oldMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager.opToPublicName( opCode), uid, pkgsOfUid[0]); if (oldMode != mode) { mAppOpsManagerInternal.setUidModeIgnoringCallback(opCode, uid, mode, mAppOpsManagerInternal.setUidModeFromPermissionPolicy(opCode, uid, mode, mAppOpsCallback); final int newMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager.opToPublicName( opCode), uid, pkgsOfUid[0]); Loading @@ -708,7 +708,7 @@ public final class PermissionPolicyService extends SystemService { // 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. mAppOpsManagerInternal.setModeIgnoringCallback(opCode, uid, pkgsOfUid[0], mAppOpsManagerInternal.setModeFromPermissionPolicy(opCode, uid, pkgsOfUid[0], AppOpsManager.opToDefaultMode(opCode), mAppOpsCallback); } } Loading