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

Commit 1e794f1a authored by Hunsuk Choi's avatar Hunsuk Choi
Browse files

Notifies IMS that radio triggered IMS deregistration

Bug: 219242993
Test: atest GsmCdmaPhoneTest#testTriggerImsDeregistration

Change-Id: I2036674518b74f6003db4907acb390a5bad776ae
parent e3c11405
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -458,6 +458,7 @@ public class GsmCdmaPhone extends Phone {
        mCi.registerForLceInfo(this, EVENT_LINK_CAPACITY_CHANGED, null);
        mCi.registerForCarrierInfoForImsiEncryption(this,
                EVENT_RESET_CARRIER_KEY_IMSI_ENCRYPTION, null);
        mCi.registerForTriggerImsDeregistration(this, EVENT_IMS_DEREGISTRATION_TRIGGERED, null);
        IntentFilter filter = new IntentFilter(
                CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
        filter.addAction(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED);
@@ -3378,6 +3379,16 @@ public class GsmCdmaPhone extends Phone {
                updateUsageSetting();
                break;

            case EVENT_IMS_DEREGISTRATION_TRIGGERED:
                logd("EVENT_IMS_DEREGISTRATION_TRIGGERED");
                ar = (AsyncResult) msg.obj;
                if (ar.exception == null) {
                    mImsPhone.triggerImsDeregistration(((int[]) ar.result)[0]);
                } else {
                    Rlog.e(LOG_TAG, "Unexpected unsol with exception", ar.exception);
                }
                break;

            default:
                super.handleMessage(msg);
        }
+1 −1
Original line number Diff line number Diff line
@@ -111,7 +111,7 @@ public class ImsIndication extends IRadioImsIndication.Stub {
        if (RIL.RILJ_LOGD) mRil.unsljLogRet(RIL_UNSOL_TRIGGER_IMS_DEREGISTRATION, reason);

        int[] response = new int[1];
        response[0] = reason;
        response[0] = RILUtils.convertHalDeregistrationReason(reason);

        mRil.mTriggerImsDeregistrationRegistrants.notifyRegistrants(
                new AsyncResult(null, response, null));
+14 −1
Original line number Diff line number Diff line
@@ -238,8 +238,9 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    protected static final int EVENT_SUBSCRIPTIONS_CHANGED = 62;
    protected static final int EVENT_GET_USAGE_SETTING_DONE = 63;
    protected static final int EVENT_SET_USAGE_SETTING_DONE = 64;
    protected static final int EVENT_IMS_DEREGISTRATION_TRIGGERED = 65;

    protected static final int EVENT_LAST = EVENT_SET_USAGE_SETTING_DONE;
    protected static final int EVENT_LAST = EVENT_IMS_DEREGISTRATION_TRIGGERED;

    // For shared prefs.
    private static final String GSM_ROAMING_LIST_OVERRIDE_PREFIX = "gsm_roaming_list_";
@@ -5005,6 +5006,18 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        mCi.setNullCipherAndIntegrityEnabled(result, enabled);
    }

    /**
     * Notifies that IMS deregistration is triggered.
     *
     * @param reason the reason why the deregistration is triggered.
     */
    public void triggerImsDeregistration(
            @ImsRegistrationImplBase.ImsDeregistrationReason int reason) {
        if (mImsPhone != null) {
            mImsPhone.triggerImsDeregistration(reason);
        }
    }

    /**
     * @return Telephony tester instance.
     */
+17 −0
Original line number Diff line number Diff line
@@ -346,6 +346,8 @@ import android.telephony.data.RouteSelectionDescriptor;
import android.telephony.data.TrafficDescriptor;
import android.telephony.data.UrspRule;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.ImsRegistrationImplBase.ImsDeregistrationReason;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.SparseArray;
@@ -4707,6 +4709,21 @@ public class RILUtils {
        }
    }

    /** Convert IMS deregistration reason */
    public static @ImsDeregistrationReason int convertHalDeregistrationReason(int reason) {
        switch (reason) {
            case android.hardware.radio.ims.ImsDeregistrationReason.REASON_SIM_REMOVED:
                return ImsRegistrationImplBase.REASON_SIM_REMOVED;
            case android.hardware.radio.ims.ImsDeregistrationReason.REASON_SIM_REFRESH:
                return ImsRegistrationImplBase.REASON_SIM_REFRESH;
            case android.hardware.radio.ims.ImsDeregistrationReason
                    .REASON_ALLOWED_NETWORK_TYPES_CHANGED:
                return ImsRegistrationImplBase.REASON_ALLOWED_NETWORK_TYPES_CHANGED;
            default:
                return ImsRegistrationImplBase.REASON_UNKNOWN;
        }
    }

    /** Append the data to the end of an ArrayList */
    public static void appendPrimitiveArrayToArrayList(byte[] src, ArrayList<Byte> dst) {
        for (byte b : src) {
+7 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsSsData;
import android.telephony.ims.ImsSsInfo;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.ImsUtImplBase;
import android.text.TextUtils;
import android.util.LocalLog;
@@ -2642,6 +2643,12 @@ public class ImsPhone extends ImsPhoneBase {
        mDefaultPhone.triggerEpsFallback(reason, response);
    }

    @Override
    public void triggerImsDeregistration(
            @ImsRegistrationImplBase.ImsDeregistrationReason int reason) {
        mCT.triggerImsDeregistration(reason);
    }

    @Override
    public void dump(FileDescriptor fd, PrintWriter printWriter, String[] args) {
        IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, "  ");
Loading