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

Commit bd23a678 authored by Syed Saifuddin Khazi's avatar Syed Saifuddin Khazi Committed by Android (Google) Code Review
Browse files

Merge changes from topic "class2 AP"

* changes:
  Unit test for SMS class 2 handling.
  SMS class 2 handling. ImsManager object is stored and async response from SIM card is acknowledged to IMS
parents dc4eb8d0 6bc52d77
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.telephony;

import android.app.Activity;
import android.content.Context;
import android.os.Binder;
import android.os.Message;
@@ -249,6 +250,10 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                            mappedResult =
                                    ImsSmsImplBase.DELIVER_STATUS_ERROR_REQUEST_NOT_SUPPORTED;
                            break;
                        case Activity.RESULT_OK:
                            // class2 message saving to SIM operation is in progress, defer ack
                            // until saving to SIM is success/failure
                            return;
                        default:
                            mappedResult = ImsSmsImplBase.DELIVER_STATUS_ERROR_GENERIC;
                            break;
@@ -264,7 +269,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                    } catch (ImsException e) {
                        loge("Failed to acknowledgeSms(). Error: " + e.getMessage());
                    }
                }, true /* ignoreClass */, true /* isOverIms */);
                }, true /* ignoreClass */, true /* isOverIms */, token);
            } finally {
                Binder.restoreCallingIdentity(identity);
            }
@@ -296,6 +301,9 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                            mImsManager = manager;
                            setListeners();
                            mIsImsServiceUp = true;

                            /* set ImsManager */
                            mSmsDispatchersController.setImsManager(mImsManager);
                        }
                    }

@@ -310,6 +318,9 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                        synchronized (mLock) {
                            mImsManager = null;
                            mIsImsServiceUp = false;

                            /* unset ImsManager */
                            mSmsDispatchersController.setImsManager(null);
                        }
                    }
                }, this::post);
+9 −9
Original line number Diff line number Diff line
@@ -182,6 +182,7 @@ public abstract class InboundSmsHandler extends StateMachine {
    /** BroadcastReceiver timed out waiting for an intent */
    public static final int EVENT_RECEIVER_TIMEOUT = 9;


    /** Wakelock release delay when returning to idle state. */
    private static final int WAKELOCK_TIMEOUT = 3000;

@@ -498,7 +499,6 @@ public abstract class InboundSmsHandler extends StateMachine {
                case EVENT_RETURN_TO_IDLE:
                    // already in idle state; ignore
                    return HANDLED;

                case EVENT_BROADCAST_COMPLETE:
                case EVENT_START_ACCEPTING_SMS:
                default:
@@ -537,7 +537,8 @@ public abstract class InboundSmsHandler extends StateMachine {

                case EVENT_INJECT_SMS:
                    // handle new injected SMS
                    handleInjectSms((AsyncResult) msg.obj, msg.arg1 == 1 /* isOverIms */);
                    handleInjectSms((AsyncResult) msg.obj, msg.arg1 == 1 /* isOverIms */,
                            msg.arg2 /* token */);
                    sendMessage(EVENT_RETURN_TO_IDLE);
                    return HANDLED;

@@ -660,7 +661,6 @@ public abstract class InboundSmsHandler extends StateMachine {
            }
        }
    }

    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    private void handleNewSms(AsyncResult ar) {
        if (ar.exception != null) {
@@ -671,7 +671,7 @@ public abstract class InboundSmsHandler extends StateMachine {
        int result;
        try {
            SmsMessage sms = (SmsMessage) ar.result;
            result = dispatchMessage(sms.mWrappedSmsMessage, SOURCE_NOT_INJECTED);
            result = dispatchMessage(sms.mWrappedSmsMessage, SOURCE_NOT_INJECTED, 0 /*unused*/);
        } catch (RuntimeException ex) {
            loge("Exception dispatching message", ex);
            result = RESULT_SMS_DISPATCH_FAILURE;
@@ -690,7 +690,7 @@ public abstract class InboundSmsHandler extends StateMachine {
     * @param ar is the AsyncResult that has the SMS PDU to be injected.
     */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    private void handleInjectSms(AsyncResult ar, boolean isOverIms) {
    private void handleInjectSms(AsyncResult ar, boolean isOverIms, int token) {
        int result;
        SmsDispatchersController.SmsInjectionCallback callback = null;
        try {
@@ -702,7 +702,7 @@ public abstract class InboundSmsHandler extends StateMachine {
            } else {
                @SmsSource int smsSource =
                        isOverIms ? SOURCE_INJECTED_FROM_IMS : SOURCE_INJECTED_FROM_UNKNOWN;
                result = dispatchMessage(sms.mWrappedSmsMessage, smsSource);
                result = dispatchMessage(sms.mWrappedSmsMessage, smsSource, token);
            }
        } catch (RuntimeException ex) {
            loge("Exception dispatching message", ex);
@@ -723,7 +723,7 @@ public abstract class InboundSmsHandler extends StateMachine {
     * @return a result code from {@link android.provider.Telephony.Sms.Intents},
     *  or {@link Activity#RESULT_OK} for delayed acknowledgment to SMSC
     */
    private int dispatchMessage(SmsMessageBase smsb, @SmsSource int smsSource) {
    private int dispatchMessage(SmsMessageBase smsb, @SmsSource int smsSource, int token) {
        // If sms is null, there was a parsing error.
        if (smsb == null) {
            loge("dispatchSmsMessage: message is null");
@@ -737,7 +737,7 @@ public abstract class InboundSmsHandler extends StateMachine {
            return Intents.RESULT_SMS_HANDLED;
        }

        int result = dispatchMessageRadioSpecific(smsb, smsSource);
        int result = dispatchMessageRadioSpecific(smsb, smsSource, token);

        // In case of error, add to metrics. This is not required in case of success, as the
        // data will be tracked when the message is processed (processMessagePart).
@@ -759,7 +759,7 @@ public abstract class InboundSmsHandler extends StateMachine {
     *  or {@link Activity#RESULT_OK} for delayed acknowledgment to SMSC
     */
    protected abstract int dispatchMessageRadioSpecific(SmsMessageBase smsb,
            @SmsSource int smsSource);
            @SmsSource int smsSource, int token);

    /**
     * Send an acknowledge message to the SMSC.
+16 −3
Original line number Diff line number Diff line
@@ -406,7 +406,7 @@ public class SmsDispatchersController extends Handler {
        // SMS pdus when the phone is camping on CDMA(3gpp2) network and vice versa.
        android.telephony.SmsMessage msg =
                android.telephony.SmsMessage.createFromPdu(pdu, format);
        injectSmsPdu(msg, format, callback, false /* ignoreClass */, isOverIms);
        injectSmsPdu(msg, format, callback, false /* ignoreClass */, isOverIms, 0 /* unused */);
    }

    /**
@@ -421,7 +421,7 @@ public class SmsDispatchersController extends Handler {
     */
    @VisibleForTesting
    public void injectSmsPdu(SmsMessage msg, String format, SmsInjectionCallback callback,
            boolean ignoreClass, boolean isOverIms) {
            boolean ignoreClass, boolean isOverIms, int token) {
        Rlog.d(TAG, "SmsDispatchersController:injectSmsPdu");
        try {
            if (msg == null) {
@@ -443,7 +443,7 @@ public class SmsDispatchersController extends Handler {
                Rlog.i(TAG, "SmsDispatchersController:injectSmsText Sending msg=" + msg
                        + ", format=" + format + "to mGsmInboundSmsHandler");
                mGsmInboundSmsHandler.sendMessage(
                        InboundSmsHandler.EVENT_INJECT_SMS, isOverIms ? 1 : 0, 0, ar);
                        InboundSmsHandler.EVENT_INJECT_SMS, isOverIms ? 1 : 0, token, ar);
            } else if (format.equals(SmsConstants.FORMAT_3GPP2)) {
                Rlog.i(TAG, "SmsDispatchersController:injectSmsText Sending msg=" + msg
                        + ", format=" + format + "to mCdmaInboundSmsHandler");
@@ -460,6 +460,19 @@ public class SmsDispatchersController extends Handler {
        }
    }

    /**
     * sets ImsManager object.
     *
     * @param imsManager holds a valid object or a null for setting
     */
    public boolean setImsManager(ImsManager imsManager) {
        if (mGsmInboundSmsHandler != null) {
            mGsmInboundSmsHandler.setImsManager(imsManager);
            return true;
        }
        return false;
    }

    /**
     * Retry the message along to the radio.
     *
+2 −1
Original line number Diff line number Diff line
@@ -194,7 +194,8 @@ public class CdmaInboundSmsHandler extends InboundSmsHandler {
     * @return true if the message was handled here; false to continue processing
     */
    @Override
    protected int dispatchMessageRadioSpecific(SmsMessageBase smsb, @SmsSource int smsSource) {
    protected int dispatchMessageRadioSpecific(SmsMessageBase smsb, @SmsSource int smsSource,
            int token) {
        SmsMessage sms = (SmsMessage) smsb;
        boolean isBroadcastType = (SmsEnvelope.MESSAGE_TYPE_BROADCAST == sms.getMessageType());

+15 −2
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.os.Message;
import android.os.SystemProperties;
import android.provider.Telephony.Sms.Intents;

import com.android.ims.ImsManager;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.InboundSmsHandler;
import com.android.internal.telephony.Phone;
@@ -153,7 +154,8 @@ public class GsmInboundSmsHandler extends InboundSmsHandler {
     * or {@link Activity#RESULT_OK} for delayed acknowledgment to SMSC
     */
    @Override
    protected int dispatchMessageRadioSpecific(SmsMessageBase smsb, @SmsSource int smsSource) {
    protected int dispatchMessageRadioSpecific(SmsMessageBase smsb, @SmsSource int smsSource,
            int token) {
        SmsMessage sms = (SmsMessage) smsb;

        if (sms.isTypeZero()) {
@@ -177,7 +179,7 @@ public class GsmInboundSmsHandler extends InboundSmsHandler {
        // Send SMS-PP data download messages to UICC. See 3GPP TS 31.111 section 7.1.1.
        if (sms.isUsimDataDownload()) {
            UsimServiceTable ust = mPhone.getUsimServiceTable();
            return mDataDownloadHandler.handleUsimDataDownload(ust, sms, smsSource);
            return mDataDownloadHandler.handleUsimDataDownload(ust, sms, smsSource, token);
        }

        boolean handled = false;
@@ -268,4 +270,15 @@ public class GsmInboundSmsHandler extends InboundSmsHandler {
                android.telephony.SmsMessage.FORMAT_3GPP);
        mPhone.getSmsStats().onIncomingSmsVoicemail(false /* is3gpp2 */, smsSource);
    }

    /**
     * sets ImsManager object.
     */
    public boolean setImsManager(ImsManager imsManager) {
        if (mDataDownloadHandler != null) {
            mDataDownloadHandler.setImsManager(imsManager);
            return true;
        }
        return false;
    }
}
Loading