Passing correct package's user id into the filterAppAccess api

filterAppAccess returns true if the package is not installed under
the given user id. This cl Updated AppOps#checkPackage to use
the correct user id to fix a Cts test.

Bug: 236875597
Test: atest android.devicepolicy.cts.EnrollmentSpecificIdTest
Change-Id: I5cd418e76159db7e1893fd6462d645e4d1d3c67f
This commit is contained in:
Rhed Jao
2022-06-24 20:39:10 +08:00
parent bdfb8336a5
commit 593a8f87b8

View File

@@ -3126,8 +3126,8 @@ public class AppOpsService extends IAppOpsService.Stub {
if (callback == null) {
return;
}
final boolean mayWatchPackageName =
packageName != null && !filterAppAccessUnlocked(packageName);
final boolean mayWatchPackageName = packageName != null
&& !filterAppAccessUnlocked(packageName, UserHandle.getUserId(callingUid));
synchronized (this) {
int switchOp = (op != AppOpsManager.OP_NONE) ? AppOpsManager.opToSwitch(op) : op;
@@ -3331,7 +3331,8 @@ public class AppOpsService extends IAppOpsService.Stub {
// When the caller is the system, it's possible that the packageName is the special
// one (e.g., "root") which isn't actually existed.
if (resolveUid(packageName) == uid
|| (isPackageExisted(packageName) && !filterAppAccessUnlocked(packageName))) {
|| (isPackageExisted(packageName)
&& !filterAppAccessUnlocked(packageName, UserHandle.getUserId(uid)))) {
return AppOpsManager.MODE_ALLOWED;
}
return AppOpsManager.MODE_ERRORED;
@@ -3350,10 +3351,10 @@ public class AppOpsService extends IAppOpsService.Stub {
*
* NOTE: This must not be called while synchronized on {@code this} to avoid dead locks
*/
private boolean filterAppAccessUnlocked(String packageName) {
private boolean filterAppAccessUnlocked(String packageName, int userId) {
final int callingUid = Binder.getCallingUid();
return LocalServices.getService(PackageManagerInternal.class)
.filterAppAccess(packageName, callingUid, UserHandle.getUserId(callingUid));
.filterAppAccess(packageName, callingUid, userId);
}
@Override