Merge "Don't mutate permission state when setting app op from PermissionPolicyService."
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
@@ -2097,7 +2097,9 @@ public class AppOpsService extends IAppOpsService.Stub {
|
||||
verifyIncomingOp(code);
|
||||
code = AppOpsManager.opToSwitch(code);
|
||||
|
||||
updatePermissionRevokedCompat(uid, code, mode);
|
||||
if (permissionPolicyCallback == null) {
|
||||
updatePermissionRevokedCompat(uid, code, mode);
|
||||
}
|
||||
|
||||
synchronized (this) {
|
||||
final int defaultMode = AppOpsManager.opToDefaultMode(code);
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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]);
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user