Snap for 6727488 from 97aad7834e02cd473a003a60689ccfb822f66245 to rvc-qpr1-release
Change-Id: I8c68e77b87a93644b840771f375479aa4edf21e0
diff --git a/src/com/android/mms/service/MmsService.java b/src/com/android/mms/service/MmsService.java
index 277f0b7..eb0fd88 100644
--- a/src/com/android/mms/service/MmsService.java
+++ b/src/com/android/mms/service/MmsService.java
@@ -42,6 +42,7 @@
import android.security.NetworkSecurityPolicy;
import android.service.carrier.CarrierMessagingService;
import android.telephony.SmsManager;
+import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
@@ -63,7 +64,10 @@
import java.io.IOException;
import java.util.ArrayDeque;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.Callable;
@@ -71,6 +75,8 @@
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* System service to process MMS API requests
@@ -253,6 +259,24 @@
subId = SubscriptionManager.getDefaultSmsSubscriptionId();
}
+ if (!isActiveSubId(subId)) {
+ List<SubscriptionInfo> activeSubList = getActiveSubscriptionsInGroup(subId);
+ if (activeSubList.isEmpty()) {
+ sendErrorInPendingIntent(downloadedIntent);
+ return;
+ }
+
+ subId = activeSubList.get(0).getSubscriptionId();
+ int defaultSmsSubId = SubscriptionManager.getDefaultSmsSubscriptionId();
+ // If we have default sms subscription, prefer to use that. Otherwise, use first
+ // subscription
+ for (SubscriptionInfo subInfo : activeSubList) {
+ if (subInfo.getSubscriptionId() == defaultSmsSubId) {
+ subId = subInfo.getSubscriptionId();
+ }
+ }
+ }
+
final DownloadRequest request = new DownloadRequest(MmsService.this, subId, locationUrl,
contentUri, downloadedIntent, callingPkg, configOverrides, MmsService.this,
messageId);
@@ -276,6 +300,48 @@
addSimRequest(request);
}
+ private List<SubscriptionInfo> getActiveSubscriptionsInGroup(int subId) {
+ SubscriptionManager subManager =
+ (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+
+ if (subManager == null) {
+ return Collections.emptyList();
+ }
+
+ List<SubscriptionInfo> subList = subManager.getAvailableSubscriptionInfoList();
+
+ if (subList == null) {
+ return Collections.emptyList();
+ }
+
+ SubscriptionInfo subscriptionInfo = null;
+ for (SubscriptionInfo subInfo : subList) {
+ if (subInfo.getSubscriptionId() == subId) {
+ subscriptionInfo = subInfo;
+ break;
+ }
+ }
+
+ if (subscriptionInfo == null) {
+ return Collections.emptyList();
+ }
+
+ if (subscriptionInfo.getGroupUuid() == null) {
+ return Collections.emptyList();
+ }
+
+ List<SubscriptionInfo> subscriptionInGroupList =
+ subManager.getSubscriptionsInGroup(subscriptionInfo.getGroupUuid());
+
+ // the list is sorted by isOpportunistic and isOpportunistic == false will have higher
+ // priority
+ return subscriptionInGroupList.stream()
+ .filter(info ->
+ info.getSimSlotIndex() != SubscriptionManager.INVALID_SIM_SLOT_INDEX)
+ .sorted(Comparator.comparing(SubscriptionInfo::isOpportunistic))
+ .collect(Collectors.toList());
+ }
+
@Override
public Uri importTextMessage(String callingPkg, String address, int type, String text,
long timestampMillis, boolean seen, boolean read) {