Merge "Fix connected apps for headless (was previously always checking allowed apps on user 0)." into udc-dev am: b5c0e6e753

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23154111

Change-Id: If65bf032f65efd4d1191cad0c6360a47ef1d3464
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jonathan Scott
2023-05-13 15:24:44 +00:00
committed by Automerger Merge Worker
7 changed files with 18 additions and 23 deletions

View File

@@ -15735,7 +15735,7 @@ public class DevicePolicyManager {
throwIfParentInstance("getAllCrossProfilePackages"); throwIfParentInstance("getAllCrossProfilePackages");
if (mService != null) { if (mService != null) {
try { try {
return new ArraySet<>(mService.getAllCrossProfilePackages()); return new ArraySet<>(mService.getAllCrossProfilePackages(mContext.getUserId()));
} catch (RemoteException e) { } catch (RemoteException e) {
throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer();
} }

View File

@@ -206,7 +206,7 @@ public abstract class DevicePolicyManagerInternal {
* *
* @hide * @hide
*/ */
public abstract List<String> getAllCrossProfilePackages(); public abstract List<String> getAllCrossProfilePackages(int userId);
/** /**
* Returns the default package names set by the OEM that are allowed to communicate * Returns the default package names set by the OEM that are allowed to communicate

View File

@@ -515,7 +515,7 @@ interface IDevicePolicyManager {
void setCrossProfilePackages(in ComponentName admin, in List<String> packageNames); void setCrossProfilePackages(in ComponentName admin, in List<String> packageNames);
List<String> getCrossProfilePackages(in ComponentName admin); List<String> getCrossProfilePackages(in ComponentName admin);
List<String> getAllCrossProfilePackages(); List<String> getAllCrossProfilePackages(int userId);
List<String> getDefaultCrossProfilePackages(); List<String> getDefaultCrossProfilePackages();
boolean isManagedKiosk(); boolean isManagedKiosk();

View File

@@ -14,6 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.server.pm; package com.android.server.pm;
import static android.Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES; import static android.Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES;
import static android.Manifest.permission.INTERACT_ACROSS_PROFILES; import static android.Manifest.permission.INTERACT_ACROSS_PROFILES;
import static android.Manifest.permission.INTERACT_ACROSS_USERS; import static android.Manifest.permission.INTERACT_ACROSS_USERS;
@@ -333,9 +334,10 @@ public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub {
} }
private boolean isCrossProfilePackageAllowlisted(String packageName) { private boolean isCrossProfilePackageAllowlisted(String packageName) {
int userId = mInjector.getCallingUserId();
return mInjector.withCleanCallingIdentity(() -> return mInjector.withCleanCallingIdentity(() ->
mInjector.getDevicePolicyManagerInternal() mInjector.getDevicePolicyManagerInternal()
.getAllCrossProfilePackages().contains(packageName)); .getAllCrossProfilePackages(userId).contains(packageName));
} }
private boolean isCrossProfilePackageAllowlistedByDefault(String packageName) { private boolean isCrossProfilePackageAllowlistedByDefault(String packageName) {

View File

@@ -238,6 +238,7 @@ public class UserRestrictionsUtils {
UserManager.DISALLOW_CONFIG_DATE_TIME, UserManager.DISALLOW_CONFIG_DATE_TIME,
UserManager.DISALLOW_CONFIG_PRIVATE_DNS, UserManager.DISALLOW_CONFIG_PRIVATE_DNS,
UserManager.DISALLOW_CHANGE_WIFI_STATE, UserManager.DISALLOW_CHANGE_WIFI_STATE,
UserManager.DISALLOW_DEBUGGING_FEATURES,
UserManager.DISALLOW_WIFI_TETHERING, UserManager.DISALLOW_WIFI_TETHERING,
UserManager.DISALLOW_WIFI_DIRECT, UserManager.DISALLOW_WIFI_DIRECT,
UserManager.DISALLOW_ADD_WIFI_CONFIG, UserManager.DISALLOW_ADD_WIFI_CONFIG,

View File

@@ -13393,14 +13393,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
PolicyDefinition<Boolean> policyDefinition = PolicyDefinition<Boolean> policyDefinition =
PolicyDefinition.getPolicyDefinitionForUserRestriction(key); PolicyDefinition.getPolicyDefinitionForUserRestriction(key);
if (enabledFromThisOwner) { 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( setLocalUserRestrictionInternal(
admin, key, /* enabled= */ true, affectedUserId); admin, key, /* enabled= */ true, affectedUserId);
}
} else { } else {
// Remove any local and global policy that was set by the admin // Remove any local and global policy that was set by the admin
if (!policyDefinition.isLocalOnlyPolicy()) { if (!policyDefinition.isLocalOnlyPolicy()) {
@@ -13918,7 +13912,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
CallerIdentity caller = getCallerIdentity(who, callerPackage); CallerIdentity caller = getCallerIdentity(who, callerPackage);
final int userId = parent ? getProfileParentId(caller.getUserId()) : caller.getUserId(); final int userId = parent ? getProfileParentId(caller.getUserId()) : caller.getUserId();
if (isPolicyEngineForFinanceFlagEnabled()) { 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); enforcePermission(MANAGE_DEVICE_POLICY_PACKAGE_STATE, caller.getPackageName(), userId);
} else { } else {
Preconditions.checkCallAuthorization((caller.hasAdminComponent() Preconditions.checkCallAuthorization((caller.hasAdminComponent()
@@ -16089,8 +16082,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
} }
@Override @Override
public List<String> getAllCrossProfilePackages() { public List<String> getAllCrossProfilePackages(int userId) {
return DevicePolicyManagerService.this.getAllCrossProfilePackages(); return DevicePolicyManagerService.this.getAllCrossProfilePackages(userId);
} }
@Override @Override
@@ -20309,7 +20302,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
} }
@Override @Override
public List<String> getAllCrossProfilePackages() { public List<String> getAllCrossProfilePackages(int userId) {
if (!mHasFeature) { if (!mHasFeature) {
return Collections.emptyList(); return Collections.emptyList();
} }
@@ -20321,7 +20314,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
caller, permission.INTERACT_ACROSS_PROFILES)); caller, permission.INTERACT_ACROSS_PROFILES));
synchronized (getLockObject()) { synchronized (getLockObject()) {
final List<ActiveAdmin> admins = getProfileOwnerAdminsForCurrentProfileGroup(); final List<ActiveAdmin> admins = getProfileOwnerAdminsForProfileGroup(userId);
final List<String> packages = getCrossProfilePackagesForAdmins(admins); final List<String> packages = getCrossProfilePackagesForAdmins(admins);
packages.addAll(getDefaultCrossProfilePackages()); packages.addAll(getDefaultCrossProfilePackages());
@@ -20350,11 +20343,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
return new ArrayList<>(crossProfilePackages); return new ArrayList<>(crossProfilePackages);
} }
private List<ActiveAdmin> getProfileOwnerAdminsForCurrentProfileGroup() { private List<ActiveAdmin> getProfileOwnerAdminsForProfileGroup(int userId) {
synchronized (getLockObject()) { synchronized (getLockObject()) {
final List<ActiveAdmin> admins = new ArrayList<>(); final List<ActiveAdmin> admins = new ArrayList<>();
int[] users = mUserManager.getProfileIdsWithDisabled( int[] users = mUserManager.getProfileIdsWithDisabled(userId);
mInjector.userHandleGetCallingUserId());
for (int i = 0; i < users.length; i++) { for (int i = 0; i < users.length; i++) {
final ComponentName componentName = getProfileOwnerAsUser(users[i]); final ComponentName componentName = getProfileOwnerAsUser(users[i]);
if (componentName != null) { if (componentName != null) {

View File

@@ -201,7 +201,7 @@ public class CrossProfileAppsServiceImplRoboTest {
} }
private void mockCrossProfileAppWhitelisted() { private void mockCrossProfileAppWhitelisted() {
when(mDevicePolicyManagerInternal.getAllCrossProfilePackages()) when(mDevicePolicyManagerInternal.getAllCrossProfilePackages(anyInt()))
.thenReturn(Lists.newArrayList(CROSS_PROFILE_APP_PACKAGE_NAME)); .thenReturn(Lists.newArrayList(CROSS_PROFILE_APP_PACKAGE_NAME));
} }
@@ -662,7 +662,7 @@ public class CrossProfileAppsServiceImplRoboTest {
} }
private void mockCrossProfileAppNotWhitelisted() { private void mockCrossProfileAppNotWhitelisted() {
when(mDevicePolicyManagerInternal.getAllCrossProfilePackages()) when(mDevicePolicyManagerInternal.getAllCrossProfilePackages(anyInt()))
.thenReturn(new ArrayList<>()); .thenReturn(new ArrayList<>());
} }