Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15f834e8 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 11498394 from 2c8e979c to 24Q2-release

Change-Id: Ie8367fa4d1d0495589c55bfa6cb07d6bc37be4ec
parents 74338d60 2c8e979c
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -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();
@@ -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:
@@ -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;
+8 −6
Original line number Diff line number Diff line
@@ -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);
    }

    /**
@@ -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 */,
@@ -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()),
@@ -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()),
@@ -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
+47 −8
Original line number Diff line number Diff line
@@ -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 */
@@ -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();
                }
@@ -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);
@@ -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");
@@ -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;
            }

@@ -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
@@ -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);
            }
        }
    }
@@ -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));
        }
    }
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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