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

Commit 9b83dcae authored by Brad Ebinger's avatar Brad Ebinger Committed by Automerger Merge Worker
Browse files

Merge "Fix test IMS emergency calls using ril.test.emergencynumber" into rvc-dev am: 1562c304

Change-Id: I4e65ae6a5359c4aee71a01f43826189db208a9b2
parents a3988d5e 1562c304
Loading
Loading
Loading
Loading
+0 −47
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@ import android.os.AsyncResult;
import android.os.Handler;
import android.os.Handler;
import android.os.Message;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.PersistableBundle;
import android.os.SystemProperties;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
import android.text.TextUtils;
import android.text.TextUtils;


@@ -167,52 +166,6 @@ public abstract class CallTracker extends Handler {
        return mPendingOperations == 0;
        return mPendingOperations == 0;
    }
    }


    /**
     * Routine called from dial to check if the number is a test Emergency number
     * and if so remap the number. This allows a short emergency number to be remapped
     * to a regular number for testing how the frameworks handles emergency numbers
     * without actually calling an emergency number.
     *
     * This is not a full test and is not a substitute for testing real emergency
     * numbers but can be useful.
     *
     * To use this feature set a system property ril.test.emergencynumber to a pair of
     * numbers separated by a colon. If the first number matches the number parameter
     * this routine returns the second number. Example:
     *
     * ril.test.emergencynumber=112:1-123-123-45678
     *
     * To test Dial 112 take call then hang up on MO device to enter ECM
     * see RIL#processSolicited RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND
     *
     * @param dialString to test if it should be remapped
     * @return the same number or the remapped number.
     */
    protected String checkForTestEmergencyNumber(String dialString) {
        String testEn = SystemProperties.get("ril.test.emergencynumber");
        if (DBG_POLL) {
            log("checkForTestEmergencyNumber: dialString=" + dialString +
                " testEn=" + testEn);
        }
        if (!TextUtils.isEmpty(testEn)) {
            String values[] = testEn.split(":");
            log("checkForTestEmergencyNumber: values.length=" + values.length);
            if (values.length == 2) {
                if (values[0].equals(
                        android.telephony.PhoneNumberUtils.stripSeparators(dialString))) {
                    // mCi will be null for ImsPhoneCallTracker.
                    if (mCi != null) {
                        mCi.testingEmergencyCall();
                    }
                    log("checkForTestEmergencyNumber: remap " +
                            dialString + " to " + values[1]);
                    dialString = values[1];
                }
            }
        }
        return dialString;
    }

    protected String convertNumberIfNecessary(Phone phone, String dialNumber) {
    protected String convertNumberIfNecessary(Phone phone, String dialNumber) {
        if (dialNumber == null) {
        if (dialNumber == null) {
            return dialNumber;
            return dialNumber;
+5 −6
Original line number Original line Diff line number Diff line
@@ -322,8 +322,8 @@ public class GsmCdmaCallTracker extends CallTracker {
            throw new CallStateException("cannot dial in current state");
            throw new CallStateException("cannot dial in current state");
        }
        }


        mPendingMO = new GsmCdmaConnection(mPhone, checkForTestEmergencyNumber(dialString),
        mPendingMO = new GsmCdmaConnection(mPhone, dialString, this, mForegroundCall,
                this, mForegroundCall, isEmergencyCall);
                isEmergencyCall);
        if (intentExtras != null) {
        if (intentExtras != null) {
            Rlog.d(LOG_TAG, "dialGsm - emergency dialer: " + intentExtras.getBoolean(
            Rlog.d(LOG_TAG, "dialGsm - emergency dialer: " + intentExtras.getBoolean(
                    TelecomManager.EXTRA_IS_USER_INTENT_EMERGENCY_CALL));
                    TelecomManager.EXTRA_IS_USER_INTENT_EMERGENCY_CALL));
@@ -445,8 +445,8 @@ public class GsmCdmaCallTracker extends CallTracker {
            return dialThreeWay(dialString, intentExtras);
            return dialThreeWay(dialString, intentExtras);
        }
        }


        mPendingMO = new GsmCdmaConnection(mPhone, checkForTestEmergencyNumber(dialString),
        mPendingMO = new GsmCdmaConnection(mPhone, dialString, this, mForegroundCall,
                this, mForegroundCall, isEmergencyCall);
                isEmergencyCall);
        if (intentExtras != null) {
        if (intentExtras != null) {
            Rlog.d(LOG_TAG, "dialGsm - emergency dialer: " + intentExtras.getBoolean(
            Rlog.d(LOG_TAG, "dialGsm - emergency dialer: " + intentExtras.getBoolean(
                    TelecomManager.EXTRA_IS_USER_INTENT_EMERGENCY_CALL));
                    TelecomManager.EXTRA_IS_USER_INTENT_EMERGENCY_CALL));
@@ -502,8 +502,7 @@ public class GsmCdmaCallTracker extends CallTracker {
            disableDataCallInEmergencyCall(dialString);
            disableDataCallInEmergencyCall(dialString);


            // Attach the new connection to foregroundCall
            // Attach the new connection to foregroundCall
            mPendingMO = new GsmCdmaConnection(mPhone,
            mPendingMO = new GsmCdmaConnection(mPhone, dialString, this, mForegroundCall,
                    checkForTestEmergencyNumber(dialString), this, mForegroundCall,
                    mIsInEmergencyCall);
                    mIsInEmergencyCall);
            if (intentExtras != null) {
            if (intentExtras != null) {
                Rlog.d(LOG_TAG, "dialThreeWay - emergency dialer " + intentExtras.getBoolean(
                Rlog.d(LOG_TAG, "dialThreeWay - emergency dialer " + intentExtras.getBoolean(
+50 −2
Original line number Original line Diff line number Diff line
@@ -1266,7 +1266,14 @@ public class GsmCdmaPhone extends Phone {
        if (!isPhoneTypeGsm() && dialArgs.uusInfo != null) {
        if (!isPhoneTypeGsm() && dialArgs.uusInfo != null) {
            throw new CallStateException("Sending UUS information NOT supported in CDMA!");
            throw new CallStateException("Sending UUS information NOT supported in CDMA!");
        }
        }

        String possibleEmergencyNumber = checkForTestEmergencyNumber(dialString);
        // Record if the dialed number was swapped for a test emergency number.
        boolean isDialedNumberSwapped = !TextUtils.equals(dialString, possibleEmergencyNumber);
        if (isDialedNumberSwapped) {
            logi("dialString replaced for possible emergency number: " + dialString + " -> "
                    + possibleEmergencyNumber);
            dialString = possibleEmergencyNumber;
        }
        boolean isEmergency = PhoneNumberUtils.isEmergencyNumber(getSubId(), dialString);
        boolean isEmergency = PhoneNumberUtils.isEmergencyNumber(getSubId(), dialString);
        Phone imsPhone = mImsPhone;
        Phone imsPhone = mImsPhone;
        mDialArgs = dialArgs;
        mDialArgs = dialArgs;
@@ -1299,6 +1306,7 @@ public class GsmCdmaPhone extends Phone {


        if (DBG) {
        if (DBG) {
            logd("useImsForCall=" + useImsForCall
            logd("useImsForCall=" + useImsForCall
                    + ", isEmergency=" + isEmergency
                    + ", useImsForEmergency=" + useImsForEmergency
                    + ", useImsForEmergency=" + useImsForEmergency
                    + ", useImsForUt=" + useImsForUt
                    + ", useImsForUt=" + useImsForUt
                    + ", isUt=" + isMmiCode
                    + ", isUt=" + isMmiCode
@@ -1373,7 +1381,11 @@ public class GsmCdmaPhone extends Phone {
                "cannot dial voice call in out of service");
                "cannot dial voice call in out of service");
        }
        }
        if (DBG) logd("Trying (non-IMS) CS call");
        if (DBG) logd("Trying (non-IMS) CS call");

        if (isDialedNumberSwapped && isEmergency) {
            // Triggers ECM when CS call ends only for test emergency calls using
            // ril.test.emergencynumber.
            mCi.testingEmergencyCall();
        }
        if (isPhoneTypeGsm()) {
        if (isPhoneTypeGsm()) {
            return dialInternal(dialString, new DialArgs.Builder<>()
            return dialInternal(dialString, new DialArgs.Builder<>()
                    .setIntentExtras(dialArgs.intentExtras)
                    .setIntentExtras(dialArgs.intentExtras)
@@ -3965,6 +3977,42 @@ public class GsmCdmaPhone extends Phone {
        return status;
        return status;
    }
    }


    /**
     * This allows a short number to be remapped to a test emergency number for testing how the
     * frameworks handles Emergency Callback Mode without actually calling an emergency number.
     *
     * This is not a full test and is not a substitute for testing real emergency
     * numbers but can be useful.
     *
     * To use this feature, first set a test emergency number using
     * adb shell cmd phone emergency-number-test-mode -a 1-555-555-1212
     *
     * and then set the system property ril.test.emergencynumber to a pair of
     * numbers separated by a colon. If the first number matches the number parameter
     * this routine returns the second number. Example:
     *
     * ril.test.emergencynumber=411:1-555-555-1212
     *
     * To test Dial 411 take call then hang up on MO device to enter ECM.
     *
     * @param dialString to test if it should be remapped
     * @return the same number or the remapped number.
     */
    private String checkForTestEmergencyNumber(String dialString) {
        String testEn = SystemProperties.get("ril.test.emergencynumber");
        if (!TextUtils.isEmpty(testEn)) {
            String[] values = testEn.split(":");
            logd("checkForTestEmergencyNumber: values.length=" + values.length);
            if (values.length == 2) {
                if (values[0].equals(PhoneNumberUtils.stripSeparators(dialString))) {
                    logd("checkForTestEmergencyNumber: remap " + dialString + " to " + values[1]);
                    dialString = values[1];
                }
            }
        }
        return dialString;
    }

    /**
    /**
     * @return operator numeric.
     * @return operator numeric.
     */
     */
+1 −2
Original line number Original line Diff line number Diff line
@@ -1240,8 +1240,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
        synchronized (mSyncHold) {
        synchronized (mSyncHold) {
            mLastDialString = dialString;
            mLastDialString = dialString;
            mLastDialArgs = dialArgs;
            mLastDialArgs = dialArgs;
            mPendingMO = new ImsPhoneConnection(mPhone,
            mPendingMO = new ImsPhoneConnection(mPhone, dialString, this, mForegroundCall,
                    checkForTestEmergencyNumber(dialString), this, mForegroundCall,
                    isEmergencyNumber);
                    isEmergencyNumber);
            if (isEmergencyNumber && dialArgs != null && dialArgs.intentExtras != null) {
            if (isEmergencyNumber && dialArgs != null && dialArgs.intentExtras != null) {
                Rlog.i(LOG_TAG, "dial ims emergency dialer: " + dialArgs.intentExtras.getBoolean(
                Rlog.i(LOG_TAG, "dial ims emergency dialer: " + dialArgs.intentExtras.getBoolean(