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

Commit 895bd0c8 authored by Sarah Chin's avatar Sarah Chin
Browse files

Create separate groups for NetworkRequests with different enterprise IDs

When multiple enterprise slices are created, they will have the same
capabilities but a different enterprise ID/capability differentiator.
When grouping network requests by capability, separate enterprise
requests with different IDs into separate groups so separate slices
aren't grouped together.

Test: atest DataUtilsTest
Bug: 237818874
Change-Id: I28c36520cd5129f1e067b6dc3de50a235b2869c6
parent ba7bd6e4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -460,6 +460,7 @@ public class DataNetworkController extends Handler {
            }
            return true;
        }

        /**
         * Get the first network request that contains all the provided network capabilities.
         *
+21 −3
Original line number Diff line number Diff line
@@ -404,9 +404,27 @@ public class DataUtils {
                            .boxed().collect(Collectors.toSet()),
                    v -> new NetworkRequestList()).add(networkRequest);
        }
        // Sort the list, so the network request list contains higher priority will be in the front
        // of the list.
        return new ArrayList<>(requestsMap.values()).stream()
        List<NetworkRequestList> requests = new ArrayList<>();
        // Create separate groups for enterprise requests with different enterprise IDs.
        for (NetworkRequestList requestList : requestsMap.values()) {
            List<TelephonyNetworkRequest> enterpriseRequests = requestList.stream()
                    .filter(request ->
                            request.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE))
                    .collect(Collectors.toList());
            if (enterpriseRequests.isEmpty()) {
                requests.add(requestList);
                continue;
            }
            // Key is the enterprise ID
            Map<Integer, NetworkRequestList> enterpriseRequestsMap = new ArrayMap<>();
            for (TelephonyNetworkRequest request : enterpriseRequests) {
                enterpriseRequestsMap.computeIfAbsent(request.getCapabilityDifferentiator(),
                        v -> new NetworkRequestList()).add(request);
            }
            requests.addAll(enterpriseRequestsMap.values());
        }
        // Sort the requests so the network request list with higher priority will be at the front.
        return requests.stream()
                .sorted((list1, list2) -> Integer.compare(
                        list2.get(0).getPriority(), list1.get(0).getPriority()))
                .collect(Collectors.toList());
+37 −8
Original line number Diff line number Diff line
@@ -53,26 +53,40 @@ public class DataUtilsTest extends TelephonyTest {
                NetworkCapabilities.NET_CAPABILITY_INTERNET,
                NetworkCapabilities.NET_CAPABILITY_MMS,
                NetworkCapabilities.NET_CAPABILITY_MMS,
                NetworkCapabilities.NET_CAPABILITY_EIMS
                NetworkCapabilities.NET_CAPABILITY_EIMS,
                NetworkCapabilities.NET_CAPABILITY_ENTERPRISE,
                NetworkCapabilities.NET_CAPABILITY_ENTERPRISE,
                NetworkCapabilities.NET_CAPABILITY_ENTERPRISE,
        };

        int requestId = 0;
        int enterpriseId = 1;
        TelephonyNetworkRequest networkRequest;
        for (int netCap : netCaps) {
            if (netCap == NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) {
                networkRequest = new TelephonyNetworkRequest(new NetworkRequest(
                        new NetworkCapabilities.Builder()
                                .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
                                .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)
                                .addEnterpriseId(enterpriseId).build(), -1, requestId++,
                        NetworkRequest.Type.REQUEST), mPhone);
                if (enterpriseId == 1) enterpriseId++;
            } else {
                networkRequest = new TelephonyNetworkRequest(new NetworkRequest(
                        new NetworkCapabilities.Builder()
                                .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
                                .addCapability(netCap).build(), -1, requestId++,
                        NetworkRequest.Type.REQUEST), mPhone);
            }
            requestList.add(networkRequest);
        }

        assertThat(requestList).hasSize(5);
        assertThat(requestList).hasSize(8);

        List<NetworkRequestList> requestListList =
                DataUtils.getGroupedNetworkRequestList(requestList);

        assertThat(requestListList).hasSize(3);
        assertThat(requestListList).hasSize(5);
        requestList = requestListList.get(0);
        assertThat(requestList).hasSize(1);
        assertThat(requestList.get(0).hasCapability(
@@ -91,6 +105,21 @@ public class DataUtilsTest extends TelephonyTest {
                NetworkCapabilities.NET_CAPABILITY_INTERNET)).isTrue();
        assertThat(requestList.get(1).hasCapability(
                NetworkCapabilities.NET_CAPABILITY_INTERNET)).isTrue();

        requestList = requestListList.get(3);
        assertThat(requestList).hasSize(1);
        assertThat(requestList.get(0).hasCapability(
                NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue();
        assertThat(requestList.get(0).getCapabilityDifferentiator() == 1).isTrue();

        requestList = requestListList.get(4);
        assertThat(requestList).hasSize(2);
        assertThat(requestList.get(0).hasCapability(
                NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue();
        assertThat(requestList.get(0).getCapabilityDifferentiator() == 2).isTrue();
        assertThat(requestList.get(1).hasCapability(
                NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue();
        assertThat(requestList.get(1).getCapabilityDifferentiator() == 2).isTrue();
    }

    @Test