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

Commit 12262a15 authored by Omkar Kolangade's avatar Omkar Kolangade Committed by Pavel Zhamaitsiak
Browse files

IMS: Always initiate emergency call on IMS

Irrespective of registration state emergency calls
should go over IMS

Bug: 20142455
Change-Id: Icae07f5031e6d5da8a93812a223c816e9b3a1933
parent 5b326ce0
Loading
Loading
Loading
Loading
+15 −12
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.util.Log;

import android.telephony.TelephonyManager;

import com.android.ims.ImsManager;
import com.android.internal.telephony.Call;
import com.android.internal.telephony.CallStateException;
import com.android.internal.telephony.CallTracker;
@@ -407,14 +408,22 @@ public class CDMAPhone extends PhoneBase {
    dial (String dialString, int videoState) throws CallStateException {
        ImsPhone imsPhone = mImsPhone;

        boolean imsUseEnabled = isImsUseEnabled();
        boolean imsUseEnabled = isImsUseEnabled()
                 && imsPhone != null
                 && (imsPhone.isVolteEnabled() || imsPhone.isVowifiEnabled())
                 && (imsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE);

        if (!imsUseEnabled) {
            Rlog.w(LOG_TAG, "IMS is disabled: forced to CS");
        }
        boolean useImsForEmergency = imsPhone != null
                && PhoneNumberUtils.isEmergencyNumber(dialString)
                &&  mContext.getResources().getBoolean(
                        com.android.internal.R.bool.useImsAlwaysForEmergencyCall)
                && ImsManager.isNonTtyOrTtyOnVolteEnabled(mContext)
                && (imsPhone.getServiceState().getState() != ServiceState.STATE_POWER_OFF);

        if (DBG) {
            Rlog.d(LOG_TAG, "imsUseEnabled=" + imsUseEnabled + ", imsPhone=" + imsPhone
            Rlog.d(LOG_TAG, "imsUseEnabled=" + imsUseEnabled
                    + ", useImsForEmergency=" + useImsForEmergency
                    + ", imsPhone=" + imsPhone
                    + ", imsPhone.isVolteEnabled()="
                    + ((imsPhone != null) ? imsPhone.isVolteEnabled() : "N/A")
                    + ", imsPhone.isVowifiEnabled()="
@@ -425,13 +434,7 @@ public class CDMAPhone extends PhoneBase {

        ImsPhone.checkWfcWifiOnlyModeBeforeDial(mImsPhone, mContext);

        if (imsUseEnabled && imsPhone != null
                && (imsPhone.isVolteEnabled() || imsPhone.isVowifiEnabled())
                && ((imsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE
                && !PhoneNumberUtils.isEmergencyNumber(dialString))
                || (PhoneNumberUtils.isEmergencyNumber(dialString)
                && mContext.getResources().getBoolean(
                        com.android.internal.R.bool.useImsAlwaysForEmergencyCall))) ) {
        if (imsUseEnabled || useImsForEmergency) {
            try {
                if (DBG) Rlog.d(LOG_TAG, "Trying IMS PS call");
                return imsPhone.dial(dialString, videoState);
+15 −12
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.text.TextUtils;
import android.telephony.Rlog;
import android.util.Log;

import com.android.ims.ImsManager;
import static com.android.internal.telephony.CommandsInterface.CF_ACTION_DISABLE;
import static com.android.internal.telephony.CommandsInterface.CF_ACTION_ENABLE;
import static com.android.internal.telephony.CommandsInterface.CF_ACTION_ERASURE;
@@ -801,14 +802,22 @@ public class GSMPhone extends PhoneBase {
    dial (String dialString, UUSInfo uusInfo, int videoState) throws CallStateException {
        ImsPhone imsPhone = mImsPhone;

         boolean imsUseEnabled = isImsUseEnabled();
        boolean imsUseEnabled = isImsUseEnabled()
                 && imsPhone != null
                 && (imsPhone.isVolteEnabled() || imsPhone.isVowifiEnabled())
                 && (imsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE);

        if (!imsUseEnabled) {
            Rlog.w(LOG_TAG, "IMS is disabled: forced to CS");
        }
        boolean useImsForEmergency = imsPhone != null
                && PhoneNumberUtils.isEmergencyNumber(dialString)
                &&  mContext.getResources().getBoolean(
                        com.android.internal.R.bool.useImsAlwaysForEmergencyCall)
                && ImsManager.isNonTtyOrTtyOnVolteEnabled(mContext)
                && (imsPhone.getServiceState().getState() != ServiceState.STATE_POWER_OFF);

        if (LOCAL_DEBUG) {
            Rlog.d(LOG_TAG, "imsUseEnabled=" + imsUseEnabled + ", imsPhone=" + imsPhone
            Rlog.d(LOG_TAG, "imsUseEnabled=" + imsUseEnabled
                    + ", useImsForEmergency=" + useImsForEmergency
                    + ", imsPhone=" + imsPhone
                    + ", imsPhone.isVolteEnabled()="
                    + ((imsPhone != null) ? imsPhone.isVolteEnabled() : "N/A")
                    + ", imsPhone.isVowifiEnabled()="
@@ -819,13 +828,7 @@ public class GSMPhone extends PhoneBase {

        ImsPhone.checkWfcWifiOnlyModeBeforeDial(mImsPhone, mContext);

        if (imsUseEnabled && imsPhone != null
                && (imsPhone.isVolteEnabled() || imsPhone.isVowifiEnabled())
                && ((imsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE
                && !PhoneNumberUtils.isEmergencyNumber(dialString))
                || (PhoneNumberUtils.isEmergencyNumber(dialString)
                && mContext.getResources().getBoolean(
                        com.android.internal.R.bool.useImsAlwaysForEmergencyCall))) ) {
        if (imsUseEnabled || useImsForEmergency) {
            try {
                if (LOCAL_DEBUG) Rlog.d(LOG_TAG, "Trying IMS PS call");
                return imsPhone.dial(dialString, videoState);