diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 59b59784b7807..f508efb5d8bb1 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -15495,7 +15495,7 @@ public class DevicePolicyManager { throwIfParentInstance("getAllCrossProfilePackages"); if (mService != null) { try { - return new ArraySet<>(mService.getAllCrossProfilePackages()); + return new ArraySet<>(mService.getAllCrossProfilePackages(mContext.getUserId())); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java index 53459473cd54f..d85b2cdbe66fa 100644 --- a/core/java/android/app/admin/DevicePolicyManagerInternal.java +++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java @@ -206,7 +206,7 @@ public abstract class DevicePolicyManagerInternal { * * @hide */ - public abstract List getAllCrossProfilePackages(); + public abstract List getAllCrossProfilePackages(int userId); /** * Returns the default package names set by the OEM that are allowed to communicate diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 9795caba95b89..003e804831a48 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -515,7 +515,7 @@ interface IDevicePolicyManager { void setCrossProfilePackages(in ComponentName admin, in List packageNames); List getCrossProfilePackages(in ComponentName admin); - List getAllCrossProfilePackages(); + List getAllCrossProfilePackages(int userId); List getDefaultCrossProfilePackages(); boolean isManagedKiosk(); diff --git a/services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java b/services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java index affe67d1b79a7..5f28e56e996c9 100644 --- a/services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java +++ b/services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java @@ -14,6 +14,7 @@ * limitations under the License. */ package com.android.server.pm; + import static android.Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES; import static android.Manifest.permission.INTERACT_ACROSS_PROFILES; import static android.Manifest.permission.INTERACT_ACROSS_USERS; @@ -333,9 +334,10 @@ public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub { } private boolean isCrossProfilePackageAllowlisted(String packageName) { + int userId = mInjector.getCallingUserId(); return mInjector.withCleanCallingIdentity(() -> mInjector.getDevicePolicyManagerInternal() - .getAllCrossProfilePackages().contains(packageName)); + .getAllCrossProfilePackages(userId).contains(packageName)); } private boolean isCrossProfilePackageAllowlistedByDefault(String packageName) { diff --git a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java index 6032fecfea674..8815834f6b5c8 100644 --- a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java +++ b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java @@ -238,6 +238,7 @@ public class UserRestrictionsUtils { UserManager.DISALLOW_CONFIG_DATE_TIME, UserManager.DISALLOW_CONFIG_PRIVATE_DNS, UserManager.DISALLOW_CHANGE_WIFI_STATE, + UserManager.DISALLOW_DEBUGGING_FEATURES, UserManager.DISALLOW_WIFI_TETHERING, UserManager.DISALLOW_WIFI_DIRECT, UserManager.DISALLOW_ADD_WIFI_CONFIG, diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 8f7e29280e6f6..333a3e71aeeb5 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -13389,14 +13389,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { PolicyDefinition policyDefinition = PolicyDefinition.getPolicyDefinitionForUserRestriction(key); if (enabledFromThisOwner) { - // TODO: Remove this special case - replace with breaking change to require - // setGlobally to disable ADB - if (key.equals(UserManager.DISALLOW_DEBUGGING_FEATURES) && parent) { - setGlobalUserRestrictionInternal(admin, key, /* enabled= */ true); - } else { - setLocalUserRestrictionInternal( - admin, key, /* enabled= */ true, affectedUserId); - } + setLocalUserRestrictionInternal( + admin, key, /* enabled= */ true, affectedUserId); } else { // Remove any local and global policy that was set by the admin if (!policyDefinition.isLocalOnlyPolicy()) { @@ -13914,7 +13908,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { CallerIdentity caller = getCallerIdentity(who, callerPackage); final int userId = parent ? getProfileParentId(caller.getUserId()) : caller.getUserId(); if (isPolicyEngineForFinanceFlagEnabled()) { - // TODO: We need to ensure the delegate with DELEGATION_PACKAGE_ACCESS can do this enforcePermission(MANAGE_DEVICE_POLICY_PACKAGE_STATE, caller.getPackageName(), userId); } else { Preconditions.checkCallAuthorization((caller.hasAdminComponent() @@ -16085,8 +16078,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } @Override - public List getAllCrossProfilePackages() { - return DevicePolicyManagerService.this.getAllCrossProfilePackages(); + public List getAllCrossProfilePackages(int userId) { + return DevicePolicyManagerService.this.getAllCrossProfilePackages(userId); } @Override @@ -20305,7 +20298,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } @Override - public List getAllCrossProfilePackages() { + public List getAllCrossProfilePackages(int userId) { if (!mHasFeature) { return Collections.emptyList(); } @@ -20314,10 +20307,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { isSystemUid(caller) || isRootUid(caller) || hasCallingPermission( permission.INTERACT_ACROSS_USERS) || hasCallingPermission( permission.INTERACT_ACROSS_USERS_FULL) || hasPermissionForPreflight( - caller, permission.INTERACT_ACROSS_PROFILES)); + caller, permission.INTERACT_ACROSS_PROFILES)); synchronized (getLockObject()) { - final List admins = getProfileOwnerAdminsForCurrentProfileGroup(); + final List admins = getProfileOwnerAdminsForProfileGroup(userId); final List packages = getCrossProfilePackagesForAdmins(admins); packages.addAll(getDefaultCrossProfilePackages()); @@ -20346,11 +20339,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return new ArrayList<>(crossProfilePackages); } - private List getProfileOwnerAdminsForCurrentProfileGroup() { + private List getProfileOwnerAdminsForProfileGroup(int userId) { synchronized (getLockObject()) { final List admins = new ArrayList<>(); - int[] users = mUserManager.getProfileIdsWithDisabled( - mInjector.userHandleGetCallingUserId()); + int[] users = mUserManager.getProfileIdsWithDisabled(userId); for (int i = 0; i < users.length; i++) { final ComponentName componentName = getProfileOwnerAsUser(users[i]); if (componentName != null) { diff --git a/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java b/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java index d128e689e01e7..4e468362177a4 100644 --- a/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java +++ b/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java @@ -201,7 +201,7 @@ public class CrossProfileAppsServiceImplRoboTest { } private void mockCrossProfileAppWhitelisted() { - when(mDevicePolicyManagerInternal.getAllCrossProfilePackages()) + when(mDevicePolicyManagerInternal.getAllCrossProfilePackages(anyInt())) .thenReturn(Lists.newArrayList(CROSS_PROFILE_APP_PACKAGE_NAME)); } @@ -662,7 +662,7 @@ public class CrossProfileAppsServiceImplRoboTest { } private void mockCrossProfileAppNotWhitelisted() { - when(mDevicePolicyManagerInternal.getAllCrossProfilePackages()) + when(mDevicePolicyManagerInternal.getAllCrossProfilePackages(anyInt())) .thenReturn(new ArrayList<>()); }