Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 00d16764 authored by Iavor-Valentin Iftime's avatar Iavor-Valentin Iftime Committed by Automerger Merge Worker
Browse files

Merge "Add all profiles if user is profile for rebindServices" into...

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

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



Change-Id: Ia115c068aa92b9ac459710ddd3e1fa5098b7f658
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 1c48dbb0 ebf22e58
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -250,6 +250,11 @@ public class ConditionProviders extends ManagedServices {
        return true;
    }

    @Override
    protected boolean allowRebindForParentUser() {
        return true;
    }

    @Override
    protected String getRequiredPermission() {
        return null;
+10 −1
Original line number Diff line number Diff line
@@ -1372,7 +1372,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);
        }
@@ -1762,6 +1764,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;
+10 −0
Original line number Diff line number Diff line
@@ -10500,6 +10500,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.
@@ -11044,6 +11049,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);
+35 −0
Original line number Diff line number Diff line
@@ -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 {