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

Commit c17d8088 authored by Matías Hernández's avatar Matías Hernández
Browse files

Revert "Check for NLS service intent filter when rebinding services"

This reverts commit b5743e71.

Reason for revert: Possible cause of b/359126464

Bug: 347674739
Bug: 359126464
Change-Id: Idfe4f21c2a51392457aa54caa3eaedaad77cb69a
Merged-In: If7d09a84460a84442f714b43e326895d8a4a24ea
Merged-In: Idfe4f21c2a51392457aa54caa3eaedaad77cb69a
Merged-In: I2fec7377aa9e85839cb7b191764ca45a6510325f
Merged-In: I1a56aa25aec1bc593303b2f7a3940e8c0eba6bb3
Merged-In: I56bc424bd9b7b7beb6be2eade588600c3ec506d8
Merged-In: Ia6bfd9186c28a9c28abab083cb50968a7e398b2e
Merged-In: I880faa91a514a1ebcc1b1f0f122a73ebb07d69bd
Merged-In: I3aa10317760222c98c452c28bae6fbc3a1f92da7
Merged-In: I222ccbf0daf8df85fb5fa9930e07d059ccda8dc7
Merged-In: Ie499366cfc46b828798754e723e8af9e28b8e9ef
parent b5743e71
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -945,7 +945,7 @@ abstract public class ManagedServices {
                || isPackageOrComponentAllowed(component.getPackageName(), userId))) {
            return false;
        }
        return isValidService(component, userId);
        return componentHasBindPermission(component, userId);
    }

    private boolean componentHasBindPermission(ComponentName component, int userId) {
@@ -1282,12 +1282,11 @@ abstract public class ManagedServices {
                    if (TextUtils.equals(getPackageName(approvedPackageOrComponent), packageName)) {
                        final ComponentName component = ComponentName.unflattenFromString(
                                approvedPackageOrComponent);
                        if (component != null && !isValidService(component, userId)) {
                        if (component != null && !componentHasBindPermission(component, userId)) {
                            approved.removeAt(j);
                            if (DEBUG) {
                                Slog.v(TAG, "Removing " + approvedPackageOrComponent
                                        + " from approved list; no bind permission or "
                                        + "service interface filter found "
                                        + " from approved list; no bind permission found "
                                        + mConfig.bindPermission);
                            }
                        }
@@ -1306,11 +1305,6 @@ abstract public class ManagedServices {
        }
    }

    protected boolean isValidService(ComponentName component, int userId) {
        return componentHasBindPermission(component, userId) && queryPackageForServices(
                component.getPackageName(), userId).contains(component);
    }

    protected boolean isValidEntry(String packageOrComponent, int userId) {
        return hasMatchingServices(packageOrComponent, userId);
    }
+9 −100
Original line number Diff line number Diff line
@@ -884,7 +884,7 @@ public class ManagedServicesTest extends UiServiceTestCase {
            return true;
        });

        mockServiceInfoWithMetaData(List.of(cn), service, pm, new ArrayMap<>());
        mockServiceInfoWithMetaData(List.of(cn), service, new ArrayMap<>());
        service.addApprovedList("a", 0, true);

        service.reregisterService(cn, 0);
@@ -915,7 +915,7 @@ public class ManagedServicesTest extends UiServiceTestCase {
            return true;
        });

        mockServiceInfoWithMetaData(List.of(cn), service, pm, new ArrayMap<>());
        mockServiceInfoWithMetaData(List.of(cn), service, new ArrayMap<>());
        service.addApprovedList("a", 0, false);

        service.reregisterService(cn, 0);
@@ -946,7 +946,7 @@ public class ManagedServicesTest extends UiServiceTestCase {
            return true;
        });

        mockServiceInfoWithMetaData(List.of(cn), service, pm, new ArrayMap<>());
        mockServiceInfoWithMetaData(List.of(cn), service, new ArrayMap<>());
        service.addApprovedList("a/a", 0, true);

        service.reregisterService(cn, 0);
@@ -977,7 +977,7 @@ public class ManagedServicesTest extends UiServiceTestCase {
            return true;
        });

        mockServiceInfoWithMetaData(List.of(cn), service, pm, new ArrayMap<>());
        mockServiceInfoWithMetaData(List.of(cn), service, new ArrayMap<>());
        service.addApprovedList("a/a", 0, false);

        service.reregisterService(cn, 0);
@@ -1186,64 +1186,6 @@ public class ManagedServicesTest extends UiServiceTestCase {
        assertTrue(service.isComponentEnabledForCurrentProfiles(approvedComponent));
    }

    @Test
    public void testUpgradeAppNoIntentFilterNoRebind() throws Exception {
        Context context = spy(getContext());
        doReturn(true).when(context).bindServiceAsUser(any(), any(), anyInt(), any());

        ManagedServices service = new TestManagedServices(context, mLock, mUserProfiles,
                mIpm, APPROVAL_BY_COMPONENT);

        List<String> packages = new ArrayList<>();
        packages.add("package");
        addExpectedServices(service, packages, 0);

        final ComponentName unapprovedComponent = ComponentName.unflattenFromString("package/C1");
        final ComponentName approvedComponent = ComponentName.unflattenFromString("package/C2");

        // Both components are approved initially
        mExpectedPrimaryComponentNames.clear();
        mExpectedPrimaryPackages.clear();
        mExpectedPrimaryComponentNames.put(0, "package/C1:package/C2");
        mExpectedSecondaryComponentNames.clear();
        mExpectedSecondaryPackages.clear();

        loadXml(service);

        //Component package/C1 loses serviceInterface intent filter
        ManagedServices.Config config = service.getConfig();
        when(mPm.queryIntentServicesAsUser(any(), anyInt(), anyInt())).
            thenAnswer(new Answer<List<ResolveInfo>>() {
                @Override
                public List<ResolveInfo> answer(InvocationOnMock invocationOnMock)
                    throws Throwable {
                    Object[] args = invocationOnMock.getArguments();
                    Intent invocationIntent = (Intent) args[0];
                    if (invocationIntent != null) {
                        if (invocationIntent.getAction().equals(config.serviceInterface)
                            && packages.contains(invocationIntent.getPackage())) {
                            List<ResolveInfo> dummyServices = new ArrayList<>();
                            ResolveInfo resolveInfo = new ResolveInfo();
                            ServiceInfo serviceInfo = new ServiceInfo();
                            serviceInfo.packageName = invocationIntent.getPackage();
                            serviceInfo.name = approvedComponent.getClassName();
                            serviceInfo.permission = service.getConfig().bindPermission;
                            resolveInfo.serviceInfo = serviceInfo;
                            dummyServices.add(resolveInfo);
                            return dummyServices;
                        }
                    }
                    return new ArrayList<>();
                }
            });

        // Trigger package update
        service.onPackagesChanged(false, new String[]{"package"}, new int[]{0});

        assertFalse(service.isComponentEnabledForCurrentProfiles(unapprovedComponent));
        assertTrue(service.isComponentEnabledForCurrentProfiles(approvedComponent));
    }

    @Test
    public void testSetPackageOrComponentEnabled() throws Exception {
        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
@@ -1940,7 +1882,7 @@ public class ManagedServicesTest extends UiServiceTestCase {
        metaDataAutobindAllow.putBoolean(META_DATA_DEFAULT_AUTOBIND, true);
        metaDatas.put(cn_allowed, metaDataAutobindAllow);

        mockServiceInfoWithMetaData(componentNames, service, pm, metaDatas);
        mockServiceInfoWithMetaData(componentNames, service, metaDatas);

        service.addApprovedList(cn_allowed.flattenToString(), 0, true);
        service.addApprovedList(cn_disallowed.flattenToString(), 0, true);
@@ -1985,7 +1927,7 @@ public class ManagedServicesTest extends UiServiceTestCase {
        metaDataAutobindDisallow.putBoolean(META_DATA_DEFAULT_AUTOBIND, false);
        metaDatas.put(cn_disallowed, metaDataAutobindDisallow);

        mockServiceInfoWithMetaData(componentNames, service, pm, metaDatas);
        mockServiceInfoWithMetaData(componentNames, service, metaDatas);

        service.addApprovedList(cn_disallowed.flattenToString(), 0, true);

@@ -2024,7 +1966,7 @@ public class ManagedServicesTest extends UiServiceTestCase {
        metaDataAutobindDisallow.putBoolean(META_DATA_DEFAULT_AUTOBIND, false);
        metaDatas.put(cn_disallowed, metaDataAutobindDisallow);

        mockServiceInfoWithMetaData(componentNames, service, pm, metaDatas);
        mockServiceInfoWithMetaData(componentNames, service, metaDatas);

        service.addApprovedList(cn_disallowed.flattenToString(), 0, true);

@@ -2049,8 +1991,8 @@ public class ManagedServicesTest extends UiServiceTestCase {
    }

    private void mockServiceInfoWithMetaData(List<ComponentName> componentNames,
            ManagedServices service, PackageManager packageManager,
            ArrayMap<ComponentName, Bundle> metaDatas) throws RemoteException {
            ManagedServices service, ArrayMap<ComponentName, Bundle> metaDatas)
            throws RemoteException {
        when(mIpm.getServiceInfo(any(), anyLong(), anyInt())).thenAnswer(
                (Answer<ServiceInfo>) invocation -> {
                    ComponentName invocationCn = invocation.getArgument(0);
@@ -2065,39 +2007,6 @@ public class ManagedServicesTest extends UiServiceTestCase {
                    return null;
                }
        );

        // add components to queryIntentServicesAsUser response
        final List<String> packages = new ArrayList<>();
        for (ComponentName cn: componentNames) {
            packages.add(cn.getPackageName());
        }
        ManagedServices.Config config = service.getConfig();
        when(packageManager.queryIntentServicesAsUser(any(), anyInt(), anyInt())).
                thenAnswer(new Answer<List<ResolveInfo>>() {
                @Override
                public List<ResolveInfo> answer(InvocationOnMock invocationOnMock)
                    throws Throwable {
                    Object[] args = invocationOnMock.getArguments();
                    Intent invocationIntent = (Intent) args[0];
                    if (invocationIntent != null) {
                        if (invocationIntent.getAction().equals(config.serviceInterface)
                            && packages.contains(invocationIntent.getPackage())) {
                            List<ResolveInfo> dummyServices = new ArrayList<>();
                            for (ComponentName cn: componentNames) {
                                ResolveInfo resolveInfo = new ResolveInfo();
                                ServiceInfo serviceInfo = new ServiceInfo();
                                serviceInfo.packageName = invocationIntent.getPackage();
                                serviceInfo.name = cn.getClassName();
                                serviceInfo.permission = service.getConfig().bindPermission;
                                resolveInfo.serviceInfo = serviceInfo;
                                dummyServices.add(resolveInfo);
                            }
                            return dummyServices;
                        }
                    }
                    return new ArrayList<>();
                }
            });
    }

    private void resetComponentsAndPackages() {