diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 2c9c2f979e4b8928e40745b9bec83ae4fc5b47db..063afb22ddf5348b6971cdafa39a8cd33f428d36 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -647,4 +647,5 @@ <string name="pref_mms_enable_delay">彩信释放网络延迟开å¯</string> <string name="pref_mms_delay_title">彩信释放网络延迟</string> <string name="pref_set_mms_delay_title">设置延迟时间</string> + <string name="invalid_mms_apn_config">ä¸æ”¯æŒå½©ä¿¡ï¼Œè¯·æ£€æŸ¥å½©ä¿¡APNé…ç½®!</string> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 2881b5a5fc19921c2c95ab285868c78023b6202c..817ef3bee5d61eb8e79d0bb29ce3041917ade979 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1214,4 +1214,5 @@ <string name="enable_notification">Notification disabled, it blocks send notification. Please enable it in Settings.</string> + <string name="invalid_mms_apn_config">Mms not supported for this operator or incorrect MMS APN configuration in device. Please check the MMS APN configuration.</string> </resources> diff --git a/src/com/android/mms/data/WorkingMessage.java b/src/com/android/mms/data/WorkingMessage.java old mode 100755 new mode 100644 index 00f5c5dc3d09efacc35b6a0c845bd5a3b0c068d4..0ddea956afae29236acf2f05e30fd1d7cead0d73 --- a/src/com/android/mms/data/WorkingMessage.java +++ b/src/com/android/mms/data/WorkingMessage.java @@ -391,6 +391,11 @@ public class WorkingMessage { public void setWorkingMessageSub(int subId) { mCurrentConvSubId = subId; } + + public int getWorkingMessageSub() { + return mCurrentConvSubId; + } + /** * @return True if the message has any text. A message with just whitespace is not considered * to have text. diff --git a/src/com/android/mms/ui/ComposeMessageActivity.java b/src/com/android/mms/ui/ComposeMessageActivity.java index 1f276453e8b14ad6ee6aaa71d852007f53edf7f6..f03e9d11a2e784b5007a84e4dc70290761d4fbce 100644 --- a/src/com/android/mms/ui/ComposeMessageActivity.java +++ b/src/com/android/mms/ui/ComposeMessageActivity.java @@ -476,6 +476,17 @@ public class ComposeMessageActivity extends Activity private static final String SIM_STATE_CHANGE_ACTION = "android.intent.action.SIM_STATE_CHANGED"; + private static final String[] APN_PROJECTION = { + Telephony.Carriers.TYPE, // 0 + Telephony.Carriers.MMSC, // 1 + Telephony.Carriers.MMSPROXY, // 2 + Telephony.Carriers.MMSPORT // 3 + }; + private static final int COLUMN_TYPE = 0; + private static final int COLUMN_MMSC = 1; + private static final int COLUMN_MMSPROXY = 2; + private static final int COLUMN_MMSPORT = 3; + /** * Whether this activity is currently running (i.e. not paused) */ @@ -5600,6 +5611,69 @@ public class ComposeMessageActivity extends Activity return eSmsCarrierSupport; } + private boolean isValidApnType(String types, String requestType) { + // If APN type is unspecified, assume APN_TYPE_ALL. + if (TextUtils.isEmpty(types)) { + return true; + } + + for (String t : types.split(",")) { + if (t.equals(requestType) || t.equals(ConstantsWrapper.Phone.APN_TYPE_ALL)) { + return true; + } + } + return false; + } + + private boolean hasValidMmsApnConfiguration(int subId) { + if (subId == SubscriptionManagerWrapper.INVALID_SUBSCRIPTION_ID) { + Log.d(TAG,"hasValidMmsApnConfiguration: invalid Sub"); + return false; + } + + Uri contentUri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, + "/subId/" + subId); + Cursor cursor = SqliteWrapper.query(this, getContentResolver(), + contentUri, APN_PROJECTION, null, null, + null); + if (cursor == null || cursor.getCount() == 0) { + Log.e(TAG, "hasValidMmsApnConfiguration: cursor null or empty"); + return false; + } + + try { + while (cursor.moveToNext()) { + if (isValidApnType(cursor.getString(COLUMN_TYPE), + ConstantsWrapper.Phone.APN_TYPE_MMS)) { + // need check MMSC is non empty even if type config support mms capability + String mmsc = cursor.getString(COLUMN_MMSC); + if (!TextUtils.isEmpty(mmsc)) { + Log.v(TAG, "hasValidMmsApnConfiguration: return true for mmsc = " + + mmsc); + return true; + } + } + } + } finally { + cursor.close(); + } + Log.v(TAG, "hasValidMmsApnConfiguration: no valid MMS APN config"); + return false; + } + + private void showMmsNotSupportedDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.send_mms); + builder.setMessage(getString(R.string.invalid_mms_apn_config)); + builder.setCancelable(true); + builder.setPositiveButton(R.string.yes, new OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + dialog.dismiss(); + } + }); + builder.show(); + } + private void sendMessage(boolean bCheckEcmMode) { // Check message size, if >= max message size, do not send message. if(checkMessageSizeExceeded()){ @@ -5607,6 +5681,14 @@ public class ComposeMessageActivity extends Activity return; } + // Check MMS APN config, prompt one dialog if missing MMS APN or its config incorrect + int subId = mWorkingMessage.getWorkingMessageSub(); + if (mWorkingMessage.requiresMms() && !hasValidMmsApnConfiguration(subId)) { + LogTag.debugD("sendMessage: Miss MMS APN or no valid MMS APN configuration"); + showMmsNotSupportedDialog(); + return; + } + if (bCheckEcmMode) { // TODO: expose this in telephony layer for SDK build boolean inEcm = TelephonyProperties.in_ecm_mode().orElse(false);