summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Karishma Vakil <kvakil@google.com> 2023-11-15 21:38:06 +0000
committer Karishma Vakil <kvakil@google.com> 2023-11-22 23:54:44 +0000
commit319379cfee9fb16bacc582e3f83b58ecedc730d9 (patch)
treee8bed83f802b636588be51c78690c01bcfafa032
parent75b7df249b551ee6127ef36d8204de3475910ac1 (diff)
[DeviceAware] Make AppOpsCheckingServiceInterface device-aware
This is to allow working on b/266164193 in parallel to making app ops tracking device-aware. The actual usage of device id to calculate op mode will be done in that bug, however modifying the interface at this time allows us to make AppOpsService device-aware. Bug: 299330771 Test: atest CtsAppOpsTestCases CtsAppOps2TestCases Change-Id: I9edc249379474d710f45a49877389b6a94846544
-rw-r--r--services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java26
-rw-r--r--services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java12
-rw-r--r--services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java16
-rw-r--r--services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java17
-rw-r--r--services/core/java/com/android/server/appop/AppOpsService.java91
-rw-r--r--services/core/java/com/android/server/appop/AppOpsServiceTestingShim.java24
-rw-r--r--services/permission/java/com/android/server/permission/access/appop/AppOpService.kt8
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUpgradeTest.java17
8 files changed, 143 insertions, 68 deletions
diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java
index 0ee7d9cdd3d4..091696737dcf 100644
--- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java
+++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java
@@ -20,6 +20,7 @@ import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_FOREGROUND;
import static android.app.AppOpsManager.OP_SCHEDULE_EXACT_ALARM;
import static android.app.AppOpsManager.OP_USE_FULL_SCREEN_INTENT;
+import static android.companion.virtual.VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
@@ -150,7 +151,7 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
}
@Override
- public SparseIntArray getNonDefaultUidModes(int uid) {
+ public SparseIntArray getNonDefaultUidModes(int uid, String persistentDeviceId) {
synchronized (mLock) {
SparseIntArray opModes = mUidModes.get(uid, null);
if (opModes == null) {
@@ -176,7 +177,7 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
}
@Override
- public int getUidMode(int uid, int op) {
+ public int getUidMode(int uid, String persistentDeviceId, int op) {
synchronized (mLock) {
SparseIntArray opModes = mUidModes.get(uid, null);
if (opModes == null) {
@@ -187,7 +188,7 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
}
@Override
- public boolean setUidMode(int uid, int op, int mode) {
+ public boolean setUidMode(int uid, String persistentDeviceId, int op, int mode) {
final int defaultMode = AppOpsManager.opToDefaultMode(op);
List<AppOpsModeChangedListener> listenersCopy;
synchronized (mLock) {
@@ -329,7 +330,7 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
}
@Override
- public SparseBooleanArray getForegroundOps(int uid) {
+ public SparseBooleanArray getForegroundOps(int uid, String persistentDeviceId) {
SparseBooleanArray result = new SparseBooleanArray();
synchronized (mLock) {
SparseIntArray modes = mUidModes.get(uid);
@@ -606,9 +607,17 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
for (final String pkg : packagesDeclaringPermission) {
for (int userId : userIds) {
final int uid = pmi.getPackageUid(pkg, 0, userId);
- final int oldMode = getUidMode(uid, OP_SCHEDULE_EXACT_ALARM);
+ final int oldMode =
+ getUidMode(
+ uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ OP_SCHEDULE_EXACT_ALARM);
if (oldMode == AppOpsManager.opToDefaultMode(OP_SCHEDULE_EXACT_ALARM)) {
- setUidMode(uid, OP_SCHEDULE_EXACT_ALARM, MODE_ALLOWED);
+ setUidMode(
+ uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ OP_SCHEDULE_EXACT_ALARM,
+ MODE_ALLOWED);
}
}
// This appop is meant to be controlled at a uid level. So we leave package modes as
@@ -641,7 +650,10 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
final int flags = permissionManager.getPermissionFlags(pkg, permissionName,
UserHandle.of(userId));
if ((flags & PackageManager.FLAG_PERMISSION_USER_SET) == 0) {
- setUidMode(uid, OP_USE_FULL_SCREEN_INTENT,
+ setUidMode(
+ uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ OP_USE_FULL_SCREEN_INTENT,
AppOpsManager.opToDefaultMode(OP_USE_FULL_SCREEN_INTENT));
}
}
diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java
index f6e6bc0be8fa..f056f6b10b0d 100644
--- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java
+++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java
@@ -59,8 +59,9 @@ public interface AppOpsCheckingServiceInterface {
* Returns a copy of non-default app-ops with op as keys and their modes as values for a uid.
* Returns an empty SparseIntArray if nothing is set.
* @param uid for which we need the app-ops and their modes.
+ * @param persistentDeviceId device for which we need the app-ops and their modes
*/
- SparseIntArray getNonDefaultUidModes(int uid);
+ SparseIntArray getNonDefaultUidModes(int uid, String persistentDeviceId);
/**
* Returns a copy of non-default app-ops with op as keys and their modes as values for a package
@@ -75,20 +76,22 @@ public interface AppOpsCheckingServiceInterface {
* Returns the app-op mode for a particular app-op of a uid.
* Returns default op mode if the op mode for particular uid and op is not set.
* @param uid user id for which we need the mode.
+ * @param persistentDeviceId device for which we need the mode
* @param op app-op for which we need the mode.
* @return mode of the app-op.
*/
- int getUidMode(int uid, int op);
+ int getUidMode(int uid, String persistentDeviceId, int op);
/**
* Set the app-op mode for a particular uid and op.
* The mode is not set if the mode is the same as the default mode for the op.
* @param uid user id for which we want to set the mode.
+ * @param persistentDeviceId device for which we want to set the mode.
* @param op app-op for which we want to set the mode.
* @param mode mode for the app-op.
* @return true if op mode is changed.
*/
- boolean setUidMode(int uid, int op, @Mode int mode);
+ boolean setUidMode(int uid, String persistentDeviceId, int op, @Mode int mode);
/**
* Gets the app-op mode for a particular package.
@@ -130,10 +133,11 @@ public interface AppOpsCheckingServiceInterface {
/**
* @param uid UID to query foreground ops for.
+ * @param persistentDeviceId device to query foreground ops for
* @return SparseBooleanArray where the keys are the op codes for which their modes are
* MODE_FOREGROUND for the passed UID.
*/
- SparseBooleanArray getForegroundOps(int uid);
+ SparseBooleanArray getForegroundOps(int uid, String persistentDeviceId);
/**
*
diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java
index ccdf3a5baa7b..f6da166d9a34 100644
--- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java
+++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java
@@ -60,9 +60,9 @@ public class AppOpsCheckingServiceLoggingDecorator implements AppOpsCheckingServ
}
@Override
- public SparseIntArray getNonDefaultUidModes(int uid) {
+ public SparseIntArray getNonDefaultUidModes(int uid, String persistentDeviceId) {
Log.i(LOG_TAG, "getNonDefaultUidModes(uid = " + uid + ")");
- return mService.getNonDefaultUidModes(uid);
+ return mService.getNonDefaultUidModes(uid, persistentDeviceId);
}
@Override
@@ -73,15 +73,15 @@ public class AppOpsCheckingServiceLoggingDecorator implements AppOpsCheckingServ
}
@Override
- public int getUidMode(int uid, int op) {
+ public int getUidMode(int uid, String persistentDeviceId, int op) {
Log.i(LOG_TAG, "getUidMode(uid = " + uid + ", op = " + op + ")");
- return mService.getUidMode(uid, op);
+ return mService.getUidMode(uid, persistentDeviceId, op);
}
@Override
- public boolean setUidMode(int uid, int op, int mode) {
+ public boolean setUidMode(int uid, String persistentDeviceId, int op, int mode) {
Log.i(LOG_TAG, "setUidMode(uid = " + uid + ", op = " + op + ", mode = " + mode + ")");
- return mService.setUidMode(uid, op, mode);
+ return mService.setUidMode(uid, persistentDeviceId, op, mode);
}
@Override
@@ -117,9 +117,9 @@ public class AppOpsCheckingServiceLoggingDecorator implements AppOpsCheckingServ
}
@Override
- public SparseBooleanArray getForegroundOps(int uid) {
+ public SparseBooleanArray getForegroundOps(int uid, String persistentDeviceId) {
Log.i(LOG_TAG, "getForegroundOps(uid = " + uid + ")");
- return mService.getForegroundOps(uid);
+ return mService.getForegroundOps(uid, persistentDeviceId);
}
@Override
diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java
index c3a02a84a277..55cf7ed80483 100644
--- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java
+++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java
@@ -81,11 +81,11 @@ public class AppOpsCheckingServiceTracingDecorator implements AppOpsCheckingServ
}
@Override
- public SparseIntArray getNonDefaultUidModes(int uid) {
+ public SparseIntArray getNonDefaultUidModes(int uid, String persistentDeviceId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getNonDefaultUidModes");
try {
- return mService.getNonDefaultUidModes(uid);
+ return mService.getNonDefaultUidModes(uid, persistentDeviceId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
@@ -103,20 +103,21 @@ public class AppOpsCheckingServiceTracingDecorator implements AppOpsCheckingServ
}
@Override
- public int getUidMode(int uid, int op) {
+ public int getUidMode(int uid, String persistentDeviceId, int op) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingAppOpsCheckingServiceInterfaceImpl#getUidMode");
try {
- return mService.getUidMode(uid, op);
+ return mService.getUidMode(uid, persistentDeviceId, op);
} finally {
Trace.traceEnd(TRACE_TAG);
}
}
@Override
- public boolean setUidMode(int uid, int op, @AppOpsManager.Mode int mode) {
+ public boolean setUidMode(
+ int uid, String persistentDeviceId, int op, @AppOpsManager.Mode int mode) {
Trace.traceBegin(TRACE_TAG, "TaggedTracingAppOpsCheckingServiceInterfaceImpl#setUidMode");
try {
- return mService.setUidMode(uid, op, mode);
+ return mService.setUidMode(uid, persistentDeviceId, op, mode);
} finally {
Trace.traceEnd(TRACE_TAG);
}
@@ -179,11 +180,11 @@ public class AppOpsCheckingServiceTracingDecorator implements AppOpsCheckingServ
}
@Override
- public SparseBooleanArray getForegroundOps(int uid) {
+ public SparseBooleanArray getForegroundOps(int uid, String persistentDeviceId) {
Trace.traceBegin(TRACE_TAG,
"TaggedTracingAppOpsCheckingServiceInterfaceImpl#getForegroundOps");
try {
- return mService.getForegroundOps(uid);
+ return mService.getForegroundOps(uid, persistentDeviceId);
} finally {
Trace.traceEnd(TRACE_TAG);
}
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index 613416c0bbad..3133a889ad5a 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -63,6 +63,7 @@ import static android.app.AppOpsManager.opAllowSystemBypassRestriction;
import static android.app.AppOpsManager.opRestrictsRead;
import static android.app.AppOpsManager.opToName;
import static android.app.AppOpsManager.opToPublicName;
+import static android.companion.virtual.VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS;
import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP;
@@ -1355,7 +1356,10 @@ public class AppOpsService extends IAppOpsService.Stub {
SparseBooleanArray foregroundOps = new SparseBooleanArray();
- SparseBooleanArray uidForegroundOps = mAppOpsCheckingService.getForegroundOps(uid);
+ // TODO(b/299330771): Check uidForegroundOps for all devices.
+ SparseBooleanArray uidForegroundOps =
+ mAppOpsCheckingService.getForegroundOps(
+ uid, PERSISTENT_DEVICE_ID_DEFAULT);
for (int i = 0; i < uidForegroundOps.size(); i++) {
foregroundOps.put(uidForegroundOps.keyAt(i), true);
}
@@ -1375,10 +1379,16 @@ public class AppOpsService extends IAppOpsService.Stub {
continue;
}
final int code = foregroundOps.keyAt(fgi);
-
- if (mAppOpsCheckingService.getUidMode(uidState.uid, code)
+ // TODO(b/299330771): Notify op changes for all relevant devices.
+ if (mAppOpsCheckingService.getUidMode(
+ uidState.uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ code)
!= AppOpsManager.opToDefaultMode(code)
- && mAppOpsCheckingService.getUidMode(uidState.uid, code)
+ && mAppOpsCheckingService.getUidMode(
+ uidState.uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ code)
== AppOpsManager.MODE_FOREGROUND) {
mHandler.sendMessage(PooledLambda.obtainMessage(
AppOpsService::notifyOpChangedForAllPkgsInUid,
@@ -1495,7 +1505,11 @@ public class AppOpsService extends IAppOpsService.Stub {
@Nullable
private ArrayList<AppOpsManager.OpEntry> collectUidOps(@NonNull UidState uidState,
@Nullable int[] ops) {
- final SparseIntArray opModes = mAppOpsCheckingService.getNonDefaultUidModes(uidState.uid);
+ // TODO(b/299330771): Make this methods device-aware, currently it represents only the
+ // primary device.
+ final SparseIntArray opModes =
+ mAppOpsCheckingService.getNonDefaultUidModes(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT);
if (opModes == null) {
return null;
}
@@ -1850,16 +1864,22 @@ public class AppOpsService extends IAppOpsService.Stub {
uidState = new UidState(uid);
mUidStates.put(uid, uidState);
}
- if (mAppOpsCheckingService.getUidMode(uidState.uid, code)
+ // TODO(b/266164193): Ensure this behavior is device-aware after uid op mode for runtime
+ // permissions is deprecated.
+ if (mAppOpsCheckingService.getUidMode(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT, code)
!= AppOpsManager.opToDefaultMode(code)) {
- previousMode = mAppOpsCheckingService.getUidMode(uidState.uid, code);
+ previousMode =
+ mAppOpsCheckingService.getUidMode(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT, code);
} else {
// doesn't look right but is legacy behavior.
previousMode = MODE_DEFAULT;
}
mIgnoredCallback = permissionPolicyCallback;
- if (!mAppOpsCheckingService.setUidMode(uidState.uid, code, mode)) {
+ if (!mAppOpsCheckingService.setUidMode(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT, code, mode)) {
return;
}
if (mode != MODE_ERRORED && mode != previousMode) {
@@ -2281,8 +2301,10 @@ public class AppOpsService extends IAppOpsService.Stub {
boolean changed = false;
for (int i = mUidStates.size() - 1; i >= 0; i--) {
UidState uidState = mUidStates.valueAt(i);
-
- SparseIntArray opModes = mAppOpsCheckingService.getNonDefaultUidModes(uidState.uid);
+ // TODO(b/299330771): Check non default modes for all devices.
+ SparseIntArray opModes =
+ mAppOpsCheckingService.getNonDefaultUidModes(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT);
if (opModes != null && (uidState.uid == reqUid || reqUid == -1)) {
final int uidOpCount = opModes.size();
for (int j = uidOpCount - 1; j >= 0; j--) {
@@ -2291,7 +2313,12 @@ public class AppOpsService extends IAppOpsService.Stub {
int previousMode = opModes.valueAt(j);
int newMode = isUidOpGrantedByRole(uidState.uid, code) ? MODE_ALLOWED :
AppOpsManager.opToDefaultMode(code);
- mAppOpsCheckingService.setUidMode(uidState.uid, code, newMode);
+ // TODO(b/299330771): Set mode for all necessary devices.
+ mAppOpsCheckingService.setUidMode(
+ uidState.uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ code,
+ newMode);
for (String packageName : getPackagesForUid(uidState.uid)) {
callbacks = addCallbacks(callbacks, code, uidState.uid, packageName,
previousMode, mOpModeWatchers.get(code));
@@ -2607,10 +2634,14 @@ public class AppOpsService extends IAppOpsService.Stub {
}
code = AppOpsManager.opToSwitch(code);
UidState uidState = getUidStateLocked(uid, false);
+ // TODO(b/299330771): Check mode for the relevant device.
if (uidState != null
- && mAppOpsCheckingService.getUidMode(uidState.uid, code)
+ && mAppOpsCheckingService.getUidMode(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT, code)
!= AppOpsManager.opToDefaultMode(code)) {
- final int rawMode = mAppOpsCheckingService.getUidMode(uidState.uid, code);
+ final int rawMode =
+ mAppOpsCheckingService.getUidMode(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT, code);
return raw ? rawMode : uidState.evalMode(code, rawMode);
}
Op op = getOpLocked(code, uid, packageName, null, false, pvr.bypass, /* edit */ false);
@@ -2857,13 +2888,19 @@ public class AppOpsService extends IAppOpsService.Stub {
return new SyncNotedAppOp(AppOpsManager.MODE_IGNORED, code, attributionTag,
packageName);
}
+ // TODO(b/299330771): Check mode for the relevant device.
// If there is a non-default per UID policy (we set UID op mode only if
// non-default) it takes over, otherwise use the per package policy.
- if (mAppOpsCheckingService.getUidMode(uidState.uid, switchCode)
+ if (mAppOpsCheckingService.getUidMode(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT, switchCode)
!= AppOpsManager.opToDefaultMode(switchCode)) {
final int uidMode =
uidState.evalMode(
- code, mAppOpsCheckingService.getUidMode(uidState.uid, switchCode));
+ code,
+ mAppOpsCheckingService.getUidMode(
+ uidState.uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ switchCode));
if (uidMode != AppOpsManager.MODE_ALLOWED) {
if (DEBUG) Slog.d(TAG, "noteOperation: uid reject #" + uidMode + " for code "
+ switchCode + " (" + code + ") uid " + uid + " package "
@@ -3402,13 +3439,19 @@ public class AppOpsService extends IAppOpsService.Stub {
isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass,
false);
final int switchCode = AppOpsManager.opToSwitch(code);
+ // TODO(b/299330771): Check mode for the relevant device.
// If there is a non-default per UID policy (we set UID op mode only if
// non-default) it takes over, otherwise use the per package policy.
- if (mAppOpsCheckingService.getUidMode(uidState.uid, switchCode)
+ if (mAppOpsCheckingService.getUidMode(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT, switchCode)
!= AppOpsManager.opToDefaultMode(switchCode)) {
final int uidMode =
uidState.evalMode(
- code, mAppOpsCheckingService.getUidMode(uidState.uid, switchCode));
+ code,
+ mAppOpsCheckingService.getUidMode(
+ uidState.uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ switchCode));
if (!shouldStartForMode(uidMode, startIfModeDefault)) {
if (DEBUG) {
Slog.d(TAG, "startOperation: uid reject #" + uidMode + " for code "
@@ -3517,13 +3560,19 @@ public class AppOpsService extends IAppOpsService.Stub {
isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass,
false);
final int switchCode = AppOpsManager.opToSwitch(code);
+ // TODO(b/299330771): Check mode for the relevant device.
// If there is a non-default mode per UID policy (we set UID op mode only if
// non-default) it takes over, otherwise use the per package policy.
- if (mAppOpsCheckingService.getUidMode(uidState.uid, switchCode)
+ if (mAppOpsCheckingService.getUidMode(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT, switchCode)
!= AppOpsManager.opToDefaultMode(switchCode)) {
final int uidMode =
uidState.evalMode(
- code, mAppOpsCheckingService.getUidMode(uidState.uid, switchCode));
+ code,
+ mAppOpsCheckingService.getUidMode(
+ uidState.uid,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ switchCode));
if (!shouldStartForMode(uidMode, startIfModeDefault)) {
if (DEBUG) {
Slog.d(TAG, "startOperation: uid reject #" + uidMode + " for code "
@@ -5685,8 +5734,10 @@ public class AppOpsService extends IAppOpsService.Stub {
}
for (int i=0; i<mUidStates.size(); i++) {
UidState uidState = mUidStates.valueAt(i);
+ // TODO(b/299330771): Get modes for all devices.
final SparseIntArray opModes =
- mAppOpsCheckingService.getNonDefaultUidModes(uidState.uid);
+ mAppOpsCheckingService.getNonDefaultUidModes(
+ uidState.uid, PERSISTENT_DEVICE_ID_DEFAULT);
final ArrayMap<String, Ops> pkgOps = uidState.pkgOps;
if (dumpWatchers || dumpHistory) {
diff --git a/services/core/java/com/android/server/appop/AppOpsServiceTestingShim.java b/services/core/java/com/android/server/appop/AppOpsServiceTestingShim.java
index 98e6476e9707..c9fa9e600ecc 100644
--- a/services/core/java/com/android/server/appop/AppOpsServiceTestingShim.java
+++ b/services/core/java/com/android/server/appop/AppOpsServiceTestingShim.java
@@ -65,9 +65,9 @@ public class AppOpsServiceTestingShim implements AppOpsCheckingServiceInterface
}
@Override
- public SparseIntArray getNonDefaultUidModes(int uid) {
- SparseIntArray oldVal = mOldImplementation.getNonDefaultUidModes(uid);
- SparseIntArray newVal = mNewImplementation.getNonDefaultUidModes(uid);
+ public SparseIntArray getNonDefaultUidModes(int uid, String persistentDeviceId) {
+ SparseIntArray oldVal = mOldImplementation.getNonDefaultUidModes(uid, persistentDeviceId);
+ SparseIntArray newVal = mNewImplementation.getNonDefaultUidModes(uid, persistentDeviceId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getNonDefaultUidModes");
@@ -89,9 +89,9 @@ public class AppOpsServiceTestingShim implements AppOpsCheckingServiceInterface
}
@Override
- public int getUidMode(int uid, int op) {
- int oldVal = mOldImplementation.getUidMode(uid, op);
- int newVal = mNewImplementation.getUidMode(uid, op);
+ public int getUidMode(int uid, String persistentDeviceId, int op) {
+ int oldVal = mOldImplementation.getUidMode(uid, persistentDeviceId, op);
+ int newVal = mNewImplementation.getUidMode(uid, persistentDeviceId, op);
if (oldVal != newVal) {
signalImplDifference("getUidMode");
@@ -101,9 +101,9 @@ public class AppOpsServiceTestingShim implements AppOpsCheckingServiceInterface
}
@Override
- public boolean setUidMode(int uid, int op, int mode) {
- boolean oldVal = mOldImplementation.setUidMode(uid, op, mode);
- boolean newVal = mNewImplementation.setUidMode(uid, op, mode);
+ public boolean setUidMode(int uid, String persistentDeviceId, int op, int mode) {
+ boolean oldVal = mOldImplementation.setUidMode(uid, persistentDeviceId, op, mode);
+ boolean newVal = mNewImplementation.setUidMode(uid, persistentDeviceId, op, mode);
if (oldVal != newVal) {
signalImplDifference("setUidMode");
@@ -155,9 +155,9 @@ public class AppOpsServiceTestingShim implements AppOpsCheckingServiceInterface
}
@Override
- public SparseBooleanArray getForegroundOps(int uid) {
- SparseBooleanArray oldVal = mOldImplementation.getForegroundOps(uid);
- SparseBooleanArray newVal = mNewImplementation.getForegroundOps(uid);
+ public SparseBooleanArray getForegroundOps(int uid, String persistentDeviceId) {
+ SparseBooleanArray oldVal = mOldImplementation.getForegroundOps(uid, persistentDeviceId);
+ SparseBooleanArray newVal = mNewImplementation.getForegroundOps(uid, persistentDeviceId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getForegroundOps");
diff --git a/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt b/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
index f94a0d664a69..8f464d41792d 100644
--- a/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
+++ b/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
@@ -71,7 +71,7 @@ class AppOpService(private val service: AccessCheckingService) : AppOpsCheckingS
// Not implemented because upgrades are handled automatically.
}
- override fun getNonDefaultUidModes(uid: Int): SparseIntArray {
+ override fun getNonDefaultUidModes(uid: Int, persistentDeviceId: String): SparseIntArray {
return opNameMapToOpSparseArray(getUidModes(uid))
}
@@ -79,7 +79,7 @@ class AppOpService(private val service: AccessCheckingService) : AppOpsCheckingS
return opNameMapToOpSparseArray(getPackageModes(packageName, userId))
}
- override fun getUidMode(uid: Int, op: Int): Int {
+ override fun getUidMode(uid: Int, persistentDeviceId: String, op: Int): Int {
val appId = UserHandle.getAppId(uid)
val userId = UserHandle.getUserId(uid)
val opName = AppOpsManager.opToPublicName(op)
@@ -92,7 +92,7 @@ class AppOpService(private val service: AccessCheckingService) : AppOpsCheckingS
return service.getState { with(appIdPolicy) { getAppOpModes(appId, userId) } }?.map
}
- override fun setUidMode(uid: Int, op: Int, mode: Int): Boolean {
+ override fun setUidMode(uid: Int, persistentDeviceId: String, op: Int, mode: Int): Boolean {
val appId = UserHandle.getAppId(uid)
val userId = UserHandle.getUserId(uid)
val opName = AppOpsManager.opToPublicName(op)
@@ -150,7 +150,7 @@ class AppOpService(private val service: AccessCheckingService) : AppOpsCheckingS
// and we have our own persistence.
}
- override fun getForegroundOps(uid: Int): SparseBooleanArray {
+ override fun getForegroundOps(uid: Int, persistentDeviceId: String): SparseBooleanArray {
return SparseBooleanArray().apply {
getUidModes(uid)?.forEachIndexed { _, op, mode ->
if (mode == AppOpsManager.MODE_FOREGROUND) {
diff --git a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUpgradeTest.java b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUpgradeTest.java
index 92d1118d0f1e..4f672f81a9cb 100644
--- a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUpgradeTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUpgradeTest.java
@@ -19,6 +19,7 @@ package com.android.server.appop;
import static android.app.AppOpsManager.OP_SCHEDULE_EXACT_ALARM;
import static android.app.AppOpsManager.OP_USE_FULL_SCREEN_INTENT;
import static android.app.AppOpsManager._NUM_OP;
+import static android.companion.virtual.VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -208,8 +209,8 @@ public class AppOpsUpgradeTest {
private void assertSameModes(AppOpsCheckingServiceImpl testService, int op1, int op2) {
for (int uid : testService.getUidsWithNonDefaultModes()) {
assertEquals(
- testService.getUidMode(uid, op1),
- testService.getUidMode(uid, op2)
+ testService.getUidMode(uid, PERSISTENT_DEVICE_ID_DEFAULT, op1),
+ testService.getUidMode(uid, PERSISTENT_DEVICE_ID_DEFAULT, op2)
);
}
for (UserPackage pkg : testService.getPackagesWithNonDefaultModes()) {
@@ -275,7 +276,9 @@ public class AppOpsUpgradeTest {
} else {
expectedMode = previousMode;
}
- int mode = testService.getUidMode(uid, OP_SCHEDULE_EXACT_ALARM);
+ int mode =
+ testService.getUidMode(
+ uid, PERSISTENT_DEVICE_ID_DEFAULT, OP_SCHEDULE_EXACT_ALARM);
assertEquals(expectedMode, mode);
}
}
@@ -284,7 +287,9 @@ public class AppOpsUpgradeTest {
int[] unrelatedUidsInFile = {10225, 10178};
for (int uid : unrelatedUidsInFile) {
- int mode = testService.getUidMode(uid, OP_SCHEDULE_EXACT_ALARM);
+ int mode =
+ testService.getUidMode(
+ uid, PERSISTENT_DEVICE_ID_DEFAULT, OP_SCHEDULE_EXACT_ALARM);
assertEquals(AppOpsManager.opToDefaultMode(OP_SCHEDULE_EXACT_ALARM), mode);
}
}
@@ -331,7 +336,9 @@ public class AppOpsUpgradeTest {
final int uid = UserHandle.getUid(userId, appId);
final int expectedMode = AppOpsManager.opToDefaultMode(OP_USE_FULL_SCREEN_INTENT);
synchronized (testService) {
- int mode = testService.getUidMode(uid, OP_USE_FULL_SCREEN_INTENT);
+ int mode =
+ testService.getUidMode(
+ uid, PERSISTENT_DEVICE_ID_DEFAULT, OP_USE_FULL_SCREEN_INTENT);
assertEquals(expectedMode, mode);
}
}