Send to carrier messaging service when data disabled
Carrier messaging services may have alternate ways to deal with the
request, so we should delegate handling the request to a carrier
messaging service regardless of whether we have data switched on for an
APN.
Merged-in: I48c11b86bf174a58f594ccf1b0e6169380502d95
Change-Id: I48c11b86bf174a58f594ccf1b0e6169380502d95
Test: Manually verified
Bug: 135751024
diff --git a/src/com/android/mms/service/MmsService.java b/src/com/android/mms/service/MmsService.java
index b255234..27b6b4b 100644
--- a/src/com/android/mms/service/MmsService.java
+++ b/src/com/android/mms/service/MmsService.java
@@ -192,15 +192,6 @@
return;
}
- // Make sure subId has MMS data
- if (!getTelephonyManager(subId).isDataEnabledForApn(ApnSetting.TYPE_MMS)) {
- LogUtil.w("Subscription with id: " + subId
- + " cannot send MMS, data connection is not available");
- sendSettingsIntentForFailedMms(/*isIncoming=*/ false, subId);
- sendErrorInPendingIntent(sentIntent);
- return;
- }
-
final SendRequest request = new SendRequest(MmsService.this, subId, contentUri,
locationUrl, sentIntent, callingPkg, configOverrides, MmsService.this);
@@ -210,21 +201,50 @@
if (carrierMessagingServicePackage != null) {
LogUtil.d(request.toString(), "sending message by carrier app");
request.trySendingByCarrierApp(MmsService.this, carrierMessagingServicePackage);
- } else {
- addSimRequest(request);
+ return;
}
+
+ // Make sure subId has MMS data. We intentionally do this after attempting to send via a
+ // carrier messaging service as the carrier messaging service may want to handle this in
+ // a different way and may not be restricted by whether data is enabled for an APN on a
+ // given subscription.
+ if (!getTelephonyManager(subId).isDataEnabledForApn(ApnSetting.TYPE_MMS)) {
+ LogUtil.w("Subscription with id: " + subId
+ + " cannot send MMS, data connection is not available");
+ sendSettingsIntentForFailedMms(/*isIncoming=*/ false, subId);
+ sendErrorInPendingIntent(sentIntent);
+ return;
+ }
+
+ addSimRequest(request);
}
@Override
public void downloadMessage(int subId, String callingPkg, String locationUrl,
Uri contentUri, Bundle configOverrides,
PendingIntent downloadedIntent) {
+ // If the subId is no longer active it could be caused by an MVNO using multiple
+ // subIds, so we should try to download anyway.
+ // TODO: Fail fast when downloading will fail (i.e. SIM swapped)
LogUtil.d("downloadMessage: " + MmsHttpClient.redactUrlForNonVerbose(locationUrl));
+
enforceSystemUid();
// Make sure the subId is correct
subId = checkSubId(subId);
+ final DownloadRequest request = new DownloadRequest(MmsService.this, subId, locationUrl,
+ contentUri, downloadedIntent, callingPkg, configOverrides, MmsService.this);
+
+ final String carrierMessagingServicePackage =
+ getCarrierMessagingServicePackageIfExists(subId);
+
+ if (carrierMessagingServicePackage != null) {
+ LogUtil.d(request.toString(), "downloading message by carrier app");
+ request.tryDownloadingByCarrierApp(MmsService.this, carrierMessagingServicePackage);
+ return;
+ }
+
// Make sure subId has MMS data
if (!getTelephonyManager(subId).isDataEnabledForApn(ApnSetting.TYPE_MMS)) {
LogUtil.w("Subscription with id: " + subId
@@ -234,22 +254,7 @@
return;
}
- // If the subId is no longer active it could be caused by
- // an MVNO using multiple subIds, so we should try to
- // download anyway.
- // TODO: Fail fast when downloading will fail (i.e. SIM swapped)
-
- final DownloadRequest request = new DownloadRequest(MmsService.this, subId, locationUrl,
- contentUri, downloadedIntent, callingPkg, configOverrides, MmsService.this);
- final String carrierMessagingServicePackage =
- getCarrierMessagingServicePackageIfExists(subId);
-
- if (carrierMessagingServicePackage != null) {
- LogUtil.d(request.toString(), "downloading message by carrier app");
- request.tryDownloadingByCarrierApp(MmsService.this, carrierMessagingServicePackage);
- } else {
- addSimRequest(request);
- }
+ addSimRequest(request);
}
public Bundle getCarrierConfigValues(int subId) {
@@ -715,7 +720,7 @@
Telephony.Threads.CONTENT_URI,
values,
ARCHIVE_CONVERSATION_SELECTION,
- new String[] {Long.toString(conversationId)}) != 1) {
+ new String[]{Long.toString(conversationId)}) != 1) {
LogUtil.e("archiveConversation: failed to update database");
return false;
}