Merge "Fix cross profile NLS notif event delivery" into tm-qpr-dev

This commit is contained in:
Julia Reynolds
2022-09-16 18:57:04 +00:00
committed by Android (Google) Code Review
3 changed files with 32 additions and 16 deletions

View File

@@ -1786,8 +1786,8 @@ abstract public class ManagedServices {
* from receiving events from the profile.
*/
public boolean isPermittedForProfile(int userId) {
if (!mUserProfiles.canProfileUseBoundServices(userId)) {
return false;
if (!mUserProfiles.isProfileUser(userId)) {
return true;
}
DevicePolicyManager dpm =
(DevicePolicyManager) mContext.getSystemService(DEVICE_POLICY_SERVICE);
@@ -1862,16 +1862,16 @@ abstract public class ManagedServices {
}
}
public boolean canProfileUseBoundServices(int userId) {
public boolean isProfileUser(int userId) {
synchronized (mCurrentProfiles) {
UserInfo user = mCurrentProfiles.get(userId);
if (user == null) {
return false;
}
if (user.isManagedProfile() || user.isCloneProfile()) {
return false;
return true;
}
return true;
return false;
}
}
}

View File

@@ -1828,7 +1828,7 @@ public class NotificationManagerService extends SystemService {
} else if (action.equals(Intent.ACTION_USER_SWITCHED)) {
final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL);
mUserProfiles.updateCache(context);
if (mUserProfiles.canProfileUseBoundServices(userId)) {
if (!mUserProfiles.isProfileUser(userId)) {
// reload per-user settings
mSettingsObserver.update(null);
// Refresh managed services
@@ -1842,7 +1842,7 @@ public class NotificationManagerService extends SystemService {
final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL);
if (userId != USER_NULL) {
mUserProfiles.updateCache(context);
if (mUserProfiles.canProfileUseBoundServices(userId)) {
if (!mUserProfiles.isProfileUser(userId)) {
allowDefaultApprovedServices(userId);
}
}
@@ -1860,7 +1860,7 @@ public class NotificationManagerService extends SystemService {
final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL);
mUserProfiles.updateCache(context);
mAssistants.onUserUnlocked(userId);
if (mUserProfiles.canProfileUseBoundServices(userId)) {
if (!mUserProfiles.isProfileUser(userId)) {
mConditionProviders.onUserUnlocked(userId);
mListeners.onUserUnlocked(userId);
mZenModeHelper.onUserUnlocked(userId);

View File

@@ -1704,8 +1704,8 @@ public class ManagedServicesTest extends UiServiceTestCase {
}
@Test
public void testInfoIsPermittedForProfile_notAllowed() {
when(mUserProfiles.canProfileUseBoundServices(anyInt())).thenReturn(false);
public void testInfoIsPermittedForProfile_notProfile() {
when(mUserProfiles.isProfileUser(anyInt())).thenReturn(false);
IInterface service = mock(IInterface.class);
when(service.asBinder()).thenReturn(mock(IBinder.class));
@@ -1714,12 +1714,12 @@ public class ManagedServicesTest extends UiServiceTestCase {
services.registerSystemService(service, null, 10, 1000);
ManagedServices.ManagedServiceInfo info = services.checkServiceTokenLocked(service);
assertFalse(info.isPermittedForProfile(0));
assertTrue(info.isPermittedForProfile(0));
}
@Test
public void testInfoIsPermittedForProfile_allows() {
when(mUserProfiles.canProfileUseBoundServices(anyInt())).thenReturn(true);
public void testInfoIsPermittedForProfile_profileAndDpmAllows() {
when(mUserProfiles.isProfileUser(anyInt())).thenReturn(true);
when(mDpm.isNotificationListenerServicePermitted(anyString(), anyInt())).thenReturn(true);
IInterface service = mock(IInterface.class);
@@ -1733,6 +1733,22 @@ public class ManagedServicesTest extends UiServiceTestCase {
assertTrue(info.isPermittedForProfile(0));
}
@Test
public void testInfoIsPermittedForProfile_profileAndDpmDenies() {
when(mUserProfiles.isProfileUser(anyInt())).thenReturn(true);
when(mDpm.isNotificationListenerServicePermitted(anyString(), anyInt())).thenReturn(false);
IInterface service = mock(IInterface.class);
when(service.asBinder()).thenReturn(mock(IBinder.class));
ManagedServices services = new TestManagedServices(getContext(), mLock, mUserProfiles,
mIpm, APPROVAL_BY_PACKAGE);
services.registerSystemService(service, null, 10, 1000);
ManagedServices.ManagedServiceInfo info = services.checkServiceTokenLocked(service);
info.component = new ComponentName("a","b");
assertFalse(info.isPermittedForProfile(0));
}
@Test
public void testUserProfiles_canProfileUseBoundServices_managedProfile() {
List<UserInfo> users = new ArrayList<>();
@@ -1750,9 +1766,9 @@ public class ManagedServicesTest extends UiServiceTestCase {
ManagedServices.UserProfiles profiles = new ManagedServices.UserProfiles();
profiles.updateCache(mContext);
assertTrue(profiles.canProfileUseBoundServices(ActivityManager.getCurrentUser()));
assertFalse(profiles.canProfileUseBoundServices(12));
assertFalse(profiles.canProfileUseBoundServices(13));
assertFalse(profiles.isProfileUser(ActivityManager.getCurrentUser()));
assertTrue(profiles.isProfileUser(12));
assertTrue(profiles.isProfileUser(13));
}
private void resetComponentsAndPackages() {