Remove use of streams in TransportManager
Test: m -j RunFrameworksServicesRoboTests
Change-Id: Ie5d81ca9e8c8fcda482fa520aa46841800b88210
diff --git a/services/backup/java/com/android/server/backup/TransportManager.java b/services/backup/java/com/android/server/backup/TransportManager.java
index 5b901ee..6d9231d 100644
--- a/services/backup/java/com/android/server/backup/TransportManager.java
+++ b/services/backup/java/com/android/server/backup/TransportManager.java
@@ -29,6 +29,7 @@
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.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 @@
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 @@
*/
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;
}
}
diff --git a/services/robotests/src/com/android/server/backup/TransportManagerTest.java b/services/robotests/src/com/android/server/backup/TransportManagerTest.java
index 6753d73..068fe81 100644
--- a/services/robotests/src/com/android/server/backup/TransportManagerTest.java
+++ b/services/robotests/src/com/android/server/backup/TransportManagerTest.java
@@ -532,6 +532,46 @@
() -> 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);