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

Commit 2c8e979c authored by Hwangoo Park's avatar Hwangoo Park Committed by Android (Google) Code Review
Browse files

Merge "Add SCBM control to EmergencyStateTracker" into main

parents 3a462aae 04a22802
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