Merge "Do not crash when duplication found in merged imsi list" am: ae267bae74
am: 0da4abe1db
am: 4beef2e82e
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2479336 Change-Id: I7323a6fbd1e8f7595fdb7c29e7520cff5ac12a00 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user