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

Commit 4beef2e8 authored by Junyu Lai's avatar Junyu Lai Committed by Automerger Merge Worker
Browse files

Merge "Do not crash when duplication found in merged imsi list" am: ae267bae am: 0da4abe1

parents 11ab38f6 0da4abe1
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -22,12 +22,14 @@ import android.net.NetworkTemplate;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.ArraySet;
import android.util.Log;

import androidx.annotation.NonNull;

import com.android.internal.util.ArrayUtils;

import java.util.Arrays;
import java.util.List;
import java.util.Set;

@@ -76,16 +78,21 @@ public class DataUsageLib {
    }

    private static NetworkTemplate normalizeMobileTemplate(
            @NonNull NetworkTemplate template, @NonNull String[] mergedSet) {
            @NonNull NetworkTemplate template, @NonNull String[] merged) {
        if (template.getSubscriberIds().isEmpty()) return template;
        // The input template should have at most 1 subscriberId.
        final String subscriberId = template.getSubscriberIds().iterator().next();

        if (Set.of(mergedSet).contains(subscriberId)) {
        // In some rare cases (e.g. b/243015487), merged subscriberId list might contain
        // duplicated items. Deduplication for better error handling.
        final ArraySet mergedSet = new ArraySet(merged);
        if (mergedSet.size() != merged.length) {
            Log.wtf(TAG, "Duplicated merged list detected: " + Arrays.toString(merged));
        }
        if (mergedSet.contains(subscriberId)) {
            // Requested template subscriber is part of the merge group; return
            // a template that matches all merged subscribers.
            return new NetworkTemplate.Builder(template.getMatchRule())
                    .setSubscriberIds(Set.of(mergedSet))
                    .setSubscriberIds(mergedSet)
                    .setMeteredness(template.getMeteredness()).build();
        }

+4 −1
Original line number Diff line number Diff line
@@ -103,11 +103,14 @@ public class DataUsageLibTest {
    public void getMobileTemplate_groupUuidExist_returnMobileMerged() {
        when(mSubscriptionManager.getActiveSubscriptionInfo(SUB_ID)).thenReturn(mInfo1);
        when(mInfo1.getGroupUuid()).thenReturn(mParcelUuid);
        // In some rare cases (e.g. b/243015487), merged subscriberId list might contain
        // duplicated items. The implementation should perform deduplication.
        when(mTelephonyManager.getMergedImsisFromGroup())
                .thenReturn(new String[] {SUBSCRIBER_ID, SUBSCRIBER_ID_2});
                .thenReturn(new String[] {SUBSCRIBER_ID, SUBSCRIBER_ID, SUBSCRIBER_ID_2});

        final NetworkTemplate networkTemplate = DataUsageLib.getMobileTemplate(mContext, SUB_ID);
        assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID)).isTrue();
        assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID_2)).isTrue();
        assertThat(networkTemplate.getSubscriberIds().size() == 2).isTrue();
    }
}