Merge "Add all profiles if user is profile for rebindServices" into udc-qpr-dev

This commit is contained in:
Iavor-Valentin Iftime
2023-07-10 16:08:21 +00:00
committed by Android (Google) Code Review
4 changed files with 60 additions and 1 deletions

View File

@@ -250,6 +250,11 @@ public class ConditionProviders extends ManagedServices {
return true;
}
@Override
protected boolean allowRebindForParentUser() {
return true;
}
@Override
protected String getRequiredPermission() {
return null;

View File

@@ -1371,7 +1371,9 @@ abstract public class ManagedServices {
protected void rebindServices(boolean forceRebind, int userToRebind) {
if (DEBUG) Slog.d(TAG, "rebindServices " + forceRebind + " " + userToRebind);
IntArray userIds = mUserProfiles.getCurrentProfileIds();
if (userToRebind != USER_ALL) {
boolean rebindAllCurrentUsers = mUserProfiles.isProfileUser(userToRebind)
&& allowRebindForParentUser();
if (userToRebind != USER_ALL && !rebindAllCurrentUsers) {
userIds = new IntArray(1);
userIds.add(userToRebind);
}
@@ -1758,6 +1760,13 @@ abstract public class ManagedServices {
return true;
}
/**
* Returns true if services in the parent user should be rebound
* when rebindServices is called with a profile userId.
* Must be false for NotificationAssistants.
*/
protected abstract boolean allowRebindForParentUser();
public class ManagedServiceInfo implements IBinder.DeathRecipient {
public IInterface service;
public ComponentName component;

View File

@@ -10503,6 +10503,11 @@ public class NotificationManagerService extends SystemService {
rebindServices(true, user);
}
@Override
protected boolean allowRebindForParentUser() {
return false;
}
@Override
protected String getRequiredPermission() {
// only signature/privileged apps can be bound.
@@ -11047,6 +11052,11 @@ public class NotificationManagerService extends SystemService {
}
}
@Override
protected boolean allowRebindForParentUser() {
return true;
}
@Override
public void onPackagesChanged(boolean removingPackage, String[] pkgList, int[] uidList) {
super.onPackagesChanged(removingPackage, pkgList, uidList);

View File

@@ -1933,6 +1933,36 @@ public class ManagedServicesTest extends UiServiceTestCase {
}, 20, 30);
}
@Test
public void isComponentEnabledForCurrentProfiles_profileUserId() {
final int profileUserId = 10;
when(mUserProfiles.isProfileUser(profileUserId)).thenReturn(true);
// Only approve for parent user (0)
mService.addApprovedList("pkg1/cmp1:pkg2/cmp2:pkg3/cmp3", 0, true);
// Test that the component is enabled after calling rebindServices with profile userId (10)
mService.rebindServices(false, profileUserId);
assertThat(mService.isComponentEnabledForCurrentProfiles(
new ComponentName("pkg1", "cmp1"))).isTrue();
}
@Test
public void isComponentEnabledForCurrentProfiles_profileUserId_NAS() {
final int profileUserId = 10;
when(mUserProfiles.isProfileUser(profileUserId)).thenReturn(true);
// Do not rebind for parent users (NAS use-case)
ManagedServices service = spy(mService);
when(service.allowRebindForParentUser()).thenReturn(false);
// Only approve for parent user (0)
service.addApprovedList("pkg1/cmp1:pkg2/cmp2:pkg3/cmp3", 0, true);
// Test that the component is disabled after calling rebindServices with profile userId (10)
service.rebindServices(false, profileUserId);
assertThat(service.isComponentEnabledForCurrentProfiles(
new ComponentName("pkg1", "cmp1"))).isFalse();
}
private void mockServiceInfoWithMetaData(List<ComponentName> componentNames,
ManagedServices service, ArrayMap<ComponentName, Bundle> metaDatas)
throws RemoteException {
@@ -2276,6 +2306,11 @@ public class ManagedServicesTest extends UiServiceTestCase {
protected String getRequiredPermission() {
return null;
}
@Override
protected boolean allowRebindForParentUser() {
return true;
}
}
class TestManagedServicesSettings extends TestManagedServices {