Loading src/java/com/android/internal/telephony/ImsSmsDispatcher.java +8 −3 Original line number Diff line number Diff line Loading @@ -203,12 +203,12 @@ public class ImsSmsDispatcher extends SMSDispatcher { mTrackers.remove(token); mPhone.notifySmsSent(tracker.mDestAddress); mSmsDispatchersController.notifySmsSentToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, true); break; case ImsSmsImplBase.SEND_STATUS_ERROR: tracker.onFailed(mContext, reason, networkReasonCode); mTrackers.remove(token); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, true); break; case ImsSmsImplBase.SEND_STATUS_ERROR_RETRY: int maxRetryCountOverIms = getMaxRetryCountOverIms(); Loading @@ -227,7 +227,7 @@ public class ImsSmsDispatcher extends SMSDispatcher { } else { tracker.onFailed(mContext, reason, networkReasonCode); mTrackers.remove(token); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, true); } break; case ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK: Loading Loading @@ -304,6 +304,11 @@ public class ImsSmsDispatcher extends SMSDispatcher { switch (result) { case Intents.RESULT_SMS_HANDLED: mappedResult = ImsSmsImplBase.DELIVER_STATUS_OK; if (message != null) { mSmsDispatchersController .notifySmsReceivedViaImsToEmergencyStateTracker( message.getOriginatingAddress()); } break; case Intents.RESULT_SMS_OUT_OF_MEMORY: mappedResult = ImsSmsImplBase.DELIVER_STATUS_ERROR_NO_MEMORY; Loading src/java/com/android/internal/telephony/SMSDispatcher.java +8 −6 Original line number Diff line number Diff line Loading @@ -1013,10 +1013,12 @@ public abstract class SMSDispatcher extends Handler { * Notifies the {@link SmsDispatchersController} that sending MO SMS is failed. * * @param tracker holds the SMS message to be sent * @param isOverIms a flag specifying whether SMS is sent via IMS or not */ protected void notifySmsSentFailedToEmergencyStateTracker(SmsTracker tracker) { protected void notifySmsSentFailedToEmergencyStateTracker(SmsTracker tracker, boolean isOverIms) { mSmsDispatchersController.notifySmsSentFailedToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, isOverIms); } /** Loading Loading @@ -1052,7 +1054,7 @@ public abstract class SMSDispatcher extends Handler { tracker.onSent(mContext); mPhone.notifySmsSent(tracker.mDestAddress); mSmsDispatchersController.notifySmsSentToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, Loading Loading @@ -1103,7 +1105,7 @@ public abstract class SMSDispatcher extends Handler { // if sms over IMS is not supported on data and voice is not available... if (!isIms() && ss != ServiceState.STATE_IN_SERVICE) { tracker.onFailed(mContext, getNotInServiceError(ss), NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), Loading Loading @@ -1164,7 +1166,7 @@ public abstract class SMSDispatcher extends Handler { } else { int errorCode = (smsResponse != null) ? smsResponse.mErrorCode : NO_ERROR_CODE; tracker.onFailed(mContext, error, errorCode); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), Loading Loading @@ -2389,7 +2391,7 @@ public abstract class SMSDispatcher extends Handler { int errorCode) { for (SmsTracker tracker : trackers) { tracker.onFailed(mContext, error, errorCode); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, false); } if (trackers.length > 0) { // This error occurs before the SMS is sent. Make an assumption if it would have Loading src/java/com/android/internal/telephony/SmsDispatchersController.java +47 −8 Original line number Diff line number Diff line Loading @@ -109,6 +109,9 @@ public class SmsDispatchersController extends Handler { /** Called when AP domain selection is abnormally terminated. */ private static final int EVENT_DOMAIN_SELECTION_TERMINATED_ABNORMALLY = 20; /** Called when MT SMS is received via IMS. */ private static final int EVENT_SMS_RECEIVED_VIA_IMS = 21; /** Delete any partial message segments after being IN_SERVICE for 1 day. */ private static final long PARTIAL_SEGMENT_WAIT_DURATION = (long) (60 * 60 * 1000) * 24; /** Constant for invalid time */ Loading Loading @@ -487,8 +490,10 @@ public class SmsDispatchersController extends Handler { String destAddr = (String) args.arg1; Long messageId = (Long) args.arg2; Boolean success = (Boolean) args.arg3; Boolean isOverIms = (Boolean) args.arg4; try { handleSmsSentCompletedUsingDomainSelection(destAddr, messageId, success); handleSmsSentCompletedUsingDomainSelection( destAddr, messageId, success, isOverIms); } finally { args.recycle(); } Loading @@ -499,6 +504,10 @@ public class SmsDispatchersController extends Handler { (DomainSelectionConnectionHolder) msg.obj); break; } case EVENT_SMS_RECEIVED_VIA_IMS: { handleSmsReceivedViaIms((String) msg.obj); break; } default: if (isCdmaMo()) { mCdmaDispatcher.handleMessage(msg); Loading Loading @@ -808,7 +817,7 @@ public class SmsDispatchersController extends Handler { Rlog.e(TAG, "sendRetrySms failed to re-encode per missing fields!"); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, !retryUsingImsService); return; } String scAddr = (String) map.get("scAddr"); Loading @@ -817,7 +826,7 @@ public class SmsDispatchersController extends Handler { Rlog.e(TAG, "sendRetrySms failed due to null destAddr"); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, !retryUsingImsService); return; } Loading Loading @@ -859,7 +868,7 @@ public class SmsDispatchersController extends Handler { + "destPort: %s", scAddr, map.get("destPort"))); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, !retryUsingImsService); return; } // replace old smsc and pdu with newly encoded ones Loading Loading @@ -1147,13 +1156,16 @@ public class SmsDispatchersController extends Handler { * @param destAddr The destination address for SMS. * @param messageId The message id for SMS. * @param success A flag specifying whether MO SMS is successfully sent or not. * @param isOverIms A flag specifying whether MO SMS is sent over IMS or not. */ private void handleSmsSentCompletedUsingDomainSelection(@NonNull String destAddr, long messageId, boolean success) { long messageId, boolean success, boolean isOverIms) { if (mEmergencyStateTracker != null) { TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); if (tm.isEmergencyNumber(destAddr)) { mEmergencyStateTracker.endSms(String.valueOf(messageId), success); mEmergencyStateTracker.endSms(String.valueOf(messageId), success, isOverIms ? NetworkRegistrationInfo.DOMAIN_PS : NetworkRegistrationInfo.DOMAIN_CS); } } } Loading @@ -1161,13 +1173,15 @@ public class SmsDispatchersController extends Handler { /** * Called when MO SMS is successfully sent. */ protected void notifySmsSentToEmergencyStateTracker(@NonNull String destAddr, long messageId) { protected void notifySmsSentToEmergencyStateTracker(@NonNull String destAddr, long messageId, boolean isOverIms) { if (isSmsDomainSelectionEnabled()) { // Run on main thread for interworking with EmergencyStateTracker. SomeArgs args = SomeArgs.obtain(); args.arg1 = destAddr; args.arg2 = Long.valueOf(messageId); args.arg3 = Boolean.TRUE; args.arg4 = Boolean.valueOf(isOverIms); sendMessage(obtainMessage(EVENT_SMS_SENT_COMPLETED_USING_DOMAIN_SELECTION, args)); } } Loading @@ -1176,17 +1190,42 @@ public class SmsDispatchersController extends Handler { * Called when sending MO SMS is failed. */ protected void notifySmsSentFailedToEmergencyStateTracker(@NonNull String destAddr, long messageId) { long messageId, boolean isOverIms) { if (isSmsDomainSelectionEnabled()) { // Run on main thread for interworking with EmergencyStateTracker. SomeArgs args = SomeArgs.obtain(); args.arg1 = destAddr; args.arg2 = Long.valueOf(messageId); args.arg3 = Boolean.FALSE; args.arg4 = Boolean.valueOf(isOverIms); sendMessage(obtainMessage(EVENT_SMS_SENT_COMPLETED_USING_DOMAIN_SELECTION, args)); } } /** * Called when MT SMS is received via IMS. * * @param origAddr The originating address of MT SMS. */ private void handleSmsReceivedViaIms(@Nullable String origAddr) { if (mEmergencyStateTracker != null) { TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); if (origAddr != null && tm.isEmergencyNumber(origAddr)) { mEmergencyStateTracker.onEmergencySmsReceived(); } } } /** * Called when MT SMS is received via IMS. */ protected void notifySmsReceivedViaImsToEmergencyStateTracker(@Nullable String origAddr) { if (isSmsDomainSelectionEnabled()) { // Run on main thread for interworking with EmergencyStateTracker. sendMessage(obtainMessage(EVENT_SMS_RECEIVED_VIA_IMS, origAddr)); } } private boolean isTestEmergencyNumber(String number) { try { TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); Loading src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +1 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ public class CdmaSMSDispatcher extends SMSDispatcher { // if sms over IMS is not supported on data and voice is not available... if (!isIms() && ss != ServiceState.STATE_IN_SERVICE) { tracker.onFailed(mContext, getNotInServiceError(ss), NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, false); return; } Loading Loading
src/java/com/android/internal/telephony/ImsSmsDispatcher.java +8 −3 Original line number Diff line number Diff line Loading @@ -203,12 +203,12 @@ public class ImsSmsDispatcher extends SMSDispatcher { mTrackers.remove(token); mPhone.notifySmsSent(tracker.mDestAddress); mSmsDispatchersController.notifySmsSentToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, true); break; case ImsSmsImplBase.SEND_STATUS_ERROR: tracker.onFailed(mContext, reason, networkReasonCode); mTrackers.remove(token); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, true); break; case ImsSmsImplBase.SEND_STATUS_ERROR_RETRY: int maxRetryCountOverIms = getMaxRetryCountOverIms(); Loading @@ -227,7 +227,7 @@ public class ImsSmsDispatcher extends SMSDispatcher { } else { tracker.onFailed(mContext, reason, networkReasonCode); mTrackers.remove(token); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, true); } break; case ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK: Loading Loading @@ -304,6 +304,11 @@ public class ImsSmsDispatcher extends SMSDispatcher { switch (result) { case Intents.RESULT_SMS_HANDLED: mappedResult = ImsSmsImplBase.DELIVER_STATUS_OK; if (message != null) { mSmsDispatchersController .notifySmsReceivedViaImsToEmergencyStateTracker( message.getOriginatingAddress()); } break; case Intents.RESULT_SMS_OUT_OF_MEMORY: mappedResult = ImsSmsImplBase.DELIVER_STATUS_ERROR_NO_MEMORY; Loading
src/java/com/android/internal/telephony/SMSDispatcher.java +8 −6 Original line number Diff line number Diff line Loading @@ -1013,10 +1013,12 @@ public abstract class SMSDispatcher extends Handler { * Notifies the {@link SmsDispatchersController} that sending MO SMS is failed. * * @param tracker holds the SMS message to be sent * @param isOverIms a flag specifying whether SMS is sent via IMS or not */ protected void notifySmsSentFailedToEmergencyStateTracker(SmsTracker tracker) { protected void notifySmsSentFailedToEmergencyStateTracker(SmsTracker tracker, boolean isOverIms) { mSmsDispatchersController.notifySmsSentFailedToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, isOverIms); } /** Loading Loading @@ -1052,7 +1054,7 @@ public abstract class SMSDispatcher extends Handler { tracker.onSent(mContext); mPhone.notifySmsSent(tracker.mDestAddress); mSmsDispatchersController.notifySmsSentToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, Loading Loading @@ -1103,7 +1105,7 @@ public abstract class SMSDispatcher extends Handler { // if sms over IMS is not supported on data and voice is not available... if (!isIms() && ss != ServiceState.STATE_IN_SERVICE) { tracker.onFailed(mContext, getNotInServiceError(ss), NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), Loading Loading @@ -1164,7 +1166,7 @@ public abstract class SMSDispatcher extends Handler { } else { int errorCode = (smsResponse != null) ? smsResponse.mErrorCode : NO_ERROR_CODE; tracker.onFailed(mContext, error, errorCode); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), Loading Loading @@ -2389,7 +2391,7 @@ public abstract class SMSDispatcher extends Handler { int errorCode) { for (SmsTracker tracker : trackers) { tracker.onFailed(mContext, error, errorCode); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, false); } if (trackers.length > 0) { // This error occurs before the SMS is sent. Make an assumption if it would have Loading
src/java/com/android/internal/telephony/SmsDispatchersController.java +47 −8 Original line number Diff line number Diff line Loading @@ -109,6 +109,9 @@ public class SmsDispatchersController extends Handler { /** Called when AP domain selection is abnormally terminated. */ private static final int EVENT_DOMAIN_SELECTION_TERMINATED_ABNORMALLY = 20; /** Called when MT SMS is received via IMS. */ private static final int EVENT_SMS_RECEIVED_VIA_IMS = 21; /** Delete any partial message segments after being IN_SERVICE for 1 day. */ private static final long PARTIAL_SEGMENT_WAIT_DURATION = (long) (60 * 60 * 1000) * 24; /** Constant for invalid time */ Loading Loading @@ -487,8 +490,10 @@ public class SmsDispatchersController extends Handler { String destAddr = (String) args.arg1; Long messageId = (Long) args.arg2; Boolean success = (Boolean) args.arg3; Boolean isOverIms = (Boolean) args.arg4; try { handleSmsSentCompletedUsingDomainSelection(destAddr, messageId, success); handleSmsSentCompletedUsingDomainSelection( destAddr, messageId, success, isOverIms); } finally { args.recycle(); } Loading @@ -499,6 +504,10 @@ public class SmsDispatchersController extends Handler { (DomainSelectionConnectionHolder) msg.obj); break; } case EVENT_SMS_RECEIVED_VIA_IMS: { handleSmsReceivedViaIms((String) msg.obj); break; } default: if (isCdmaMo()) { mCdmaDispatcher.handleMessage(msg); Loading Loading @@ -808,7 +817,7 @@ public class SmsDispatchersController extends Handler { Rlog.e(TAG, "sendRetrySms failed to re-encode per missing fields!"); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, !retryUsingImsService); return; } String scAddr = (String) map.get("scAddr"); Loading @@ -817,7 +826,7 @@ public class SmsDispatchersController extends Handler { Rlog.e(TAG, "sendRetrySms failed due to null destAddr"); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, !retryUsingImsService); return; } Loading Loading @@ -859,7 +868,7 @@ public class SmsDispatchersController extends Handler { + "destPort: %s", scAddr, map.get("destPort"))); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker( tracker.mDestAddress, tracker.mMessageId); tracker.mDestAddress, tracker.mMessageId, !retryUsingImsService); return; } // replace old smsc and pdu with newly encoded ones Loading Loading @@ -1147,13 +1156,16 @@ public class SmsDispatchersController extends Handler { * @param destAddr The destination address for SMS. * @param messageId The message id for SMS. * @param success A flag specifying whether MO SMS is successfully sent or not. * @param isOverIms A flag specifying whether MO SMS is sent over IMS or not. */ private void handleSmsSentCompletedUsingDomainSelection(@NonNull String destAddr, long messageId, boolean success) { long messageId, boolean success, boolean isOverIms) { if (mEmergencyStateTracker != null) { TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); if (tm.isEmergencyNumber(destAddr)) { mEmergencyStateTracker.endSms(String.valueOf(messageId), success); mEmergencyStateTracker.endSms(String.valueOf(messageId), success, isOverIms ? NetworkRegistrationInfo.DOMAIN_PS : NetworkRegistrationInfo.DOMAIN_CS); } } } Loading @@ -1161,13 +1173,15 @@ public class SmsDispatchersController extends Handler { /** * Called when MO SMS is successfully sent. */ protected void notifySmsSentToEmergencyStateTracker(@NonNull String destAddr, long messageId) { protected void notifySmsSentToEmergencyStateTracker(@NonNull String destAddr, long messageId, boolean isOverIms) { if (isSmsDomainSelectionEnabled()) { // Run on main thread for interworking with EmergencyStateTracker. SomeArgs args = SomeArgs.obtain(); args.arg1 = destAddr; args.arg2 = Long.valueOf(messageId); args.arg3 = Boolean.TRUE; args.arg4 = Boolean.valueOf(isOverIms); sendMessage(obtainMessage(EVENT_SMS_SENT_COMPLETED_USING_DOMAIN_SELECTION, args)); } } Loading @@ -1176,17 +1190,42 @@ public class SmsDispatchersController extends Handler { * Called when sending MO SMS is failed. */ protected void notifySmsSentFailedToEmergencyStateTracker(@NonNull String destAddr, long messageId) { long messageId, boolean isOverIms) { if (isSmsDomainSelectionEnabled()) { // Run on main thread for interworking with EmergencyStateTracker. SomeArgs args = SomeArgs.obtain(); args.arg1 = destAddr; args.arg2 = Long.valueOf(messageId); args.arg3 = Boolean.FALSE; args.arg4 = Boolean.valueOf(isOverIms); sendMessage(obtainMessage(EVENT_SMS_SENT_COMPLETED_USING_DOMAIN_SELECTION, args)); } } /** * Called when MT SMS is received via IMS. * * @param origAddr The originating address of MT SMS. */ private void handleSmsReceivedViaIms(@Nullable String origAddr) { if (mEmergencyStateTracker != null) { TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); if (origAddr != null && tm.isEmergencyNumber(origAddr)) { mEmergencyStateTracker.onEmergencySmsReceived(); } } } /** * Called when MT SMS is received via IMS. */ protected void notifySmsReceivedViaImsToEmergencyStateTracker(@Nullable String origAddr) { if (isSmsDomainSelectionEnabled()) { // Run on main thread for interworking with EmergencyStateTracker. sendMessage(obtainMessage(EVENT_SMS_RECEIVED_VIA_IMS, origAddr)); } } private boolean isTestEmergencyNumber(String number) { try { TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); Loading
src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +1 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ public class CdmaSMSDispatcher extends SMSDispatcher { // if sms over IMS is not supported on data and voice is not available... if (!isIms() && ss != ServiceState.STATE_IN_SERVICE) { tracker.onFailed(mContext, getNotInServiceError(ss), NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker(tracker); notifySmsSentFailedToEmergencyStateTracker(tracker, false); return; } Loading