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

Commit a4517cdb authored by Bernardo Rufino's avatar Bernardo Rufino
Browse files

Remove use of streams in TransportManager

Test: m -j RunFrameworksServicesRoboTests
Change-Id: Ie5d81ca9e8c8fcda482fa520aa46841800b88210
parent 8f0d71e3
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.pm.ResolveInfo;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Slog;

import com.android.internal.annotations.GuardedBy;
@@ -47,8 +48,6 @@ import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/** Handles in-memory bookkeeping of all BackupTransport objects. */
public class TransportManager {
@@ -119,10 +118,10 @@ public class TransportManager {
    void onPackageChanged(String packageName, String... components) {
        // Unfortunately this can't be atomic because we risk a deadlock if
        // registerTransportsFromPackage() is put inside the synchronized block
        Set<ComponentName> transportComponents =
                Stream.of(components)
                        .map(component -> new ComponentName(packageName, component))
                        .collect(Collectors.toSet());
        Set<ComponentName> transportComponents = new ArraySet<>(components.length);
        for (String componentName : components) {
            transportComponents.add(new ComponentName(packageName, componentName));
        }
        synchronized (mTransportLock) {
            mRegisteredTransportsDescriptionMap.keySet().removeIf(transportComponents::contains);
        }
@@ -151,11 +150,13 @@ public class TransportManager {
     */
    String[] getRegisteredTransportNames() {
        synchronized (mTransportLock) {
            return mRegisteredTransportsDescriptionMap
                    .values()
                    .stream()
                    .map(transportDescription -> transportDescription.name)
                    .toArray(String[]::new);
            String[] transportNames = new String[mRegisteredTransportsDescriptionMap.size()];
            int i = 0;
            for (TransportDescription description : mRegisteredTransportsDescriptionMap.values()) {
                transportNames[i] = description.name;
                i++;
            }
            return transportNames;
        }
    }

+40 −0
Original line number Diff line number Diff line
@@ -532,6 +532,46 @@ public class TransportManagerTest {
                () -> transportManager.getTransportDirName(mTransportA2.transportName));
    }

    @Test
    public void testGetRegisteredTransportNames() throws Exception {
        setUpPackage(PACKAGE_A, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
        setUpPackage(PACKAGE_B, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
        TransportData[] transportsData = {mTransportA1, mTransportA2, mTransportB1};
        setUpTransports(transportsData);
        TransportManager transportManager =
                createTransportManager(mTransportA1, mTransportA2, mTransportB1);
        transportManager.registerTransports();

        String[] transportNames = transportManager.getRegisteredTransportNames();

        assertThat(transportNames)
                .asList()
                .containsExactlyElementsIn(
                        Stream.of(transportsData)
                                .map(transportData -> transportData.transportName)
                                .collect(toList()));
    }

    @Test
    public void testGetRegisteredTransportComponents() throws Exception {
        setUpPackage(PACKAGE_A, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
        setUpPackage(PACKAGE_B, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
        TransportData[] transportsData = {mTransportA1, mTransportA2, mTransportB1};
        setUpTransports(transportsData);
        TransportManager transportManager =
                createTransportManager(mTransportA1, mTransportA2, mTransportB1);
        transportManager.registerTransports();

        ComponentName[] transportNames = transportManager.getRegisteredTransportComponents();

        assertThat(transportNames)
                .asList()
                .containsExactlyElementsIn(
                        Stream.of(transportsData)
                                .map(TransportData::getTransportComponent)
                                .collect(toList()));
    }

    private List<TransportMock> setUpTransports(TransportData... transports) throws Exception {
        setUpTransportsForTransportManager(mShadowPackageManager, transports);
        List<TransportMock> transportMocks = new ArrayList<>(transports.length);