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

Commit 0769fae8 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

Revert "Remove prefix for emergency number address while dialing per carrier requirement"

This reverts commit 8e6de2f1.

Reason for revert: Caused regression in emergency calling.
Bug: 186377507
Bug: 182126268

Change-Id: Ic6c1d786239f7118a2f9f1ec74d0343e4ae3a58c
Merged-In: If616530c01f7c3e50734988a1dc5b9d69dd4c2c0
parent 8e6de2f1
Loading
Loading
Loading
Loading
+0 −32
Original line number Diff line number Diff line
@@ -70,7 +70,6 @@ import android.os.Build;
import android.os.Handler;
import android.os.HwBinder;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.RemoteException;
@@ -80,7 +79,6 @@ import android.provider.Settings;
import android.service.carrier.CarrierIdentifier;
import android.sysprop.TelephonyProperties;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierRestrictionRules;
import android.telephony.CellInfo;
import android.telephony.CellSignalStrengthCdma;
@@ -131,7 +129,6 @@ import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.nano.TelephonyProto.SmsSession;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.telephony.Rlog;

@@ -1303,39 +1300,10 @@ public class RIL extends BaseCommands implements CommandsInterface {
        }
    }

    private String getEmergencyNumberAddressWithoutPrefix(String address) {
        SubscriptionManager subscriptionManager = mContext.getSystemService(
                SubscriptionManager.class);
        int subId = subscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(
                mPhoneId).getSubscriptionId();
        CarrierConfigManager configMgr = mContext.getSystemService(CarrierConfigManager.class);
        if (configMgr == null) {
            return null;
        }
        PersistableBundle b = configMgr.getConfigForSubId(subId);
        String[] prefixes = b == null ? null : b.getStringArray(
                CarrierConfigManager.KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY);
        if (ArrayUtils.isEmpty(prefixes)) {
            return address;
        }
        for (String prefix : prefixes) {
            // If emergencyNumber starts with this prefix, remove this prefix to retrieve the
            // actual emergency number.
            if (!TextUtils.isEmpty(prefix) && address.startsWith(prefix)) {
                return address.substring(prefix.length());
            }
        }
        return address;
    }

    @Override
    public void dial(String address, boolean isEmergencyCall, EmergencyNumber emergencyNumberInfo,
                     boolean hasKnownUserIntentEmergency, int clirMode, UUSInfo uusInfo,
                     Message result) {
        // Remove prefix while dialing emergency number with modem
        if (isEmergencyCall) {
            address = getEmergencyNumberAddressWithoutPrefix(address);
        }
        if (isEmergencyCall && mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_4)
                && emergencyNumberInfo != null) {
            emergencyDial(address, emergencyNumberInfo, hasKnownUserIntentEmergency, clirMode,
+0 −62
Original line number Diff line number Diff line
@@ -106,7 +106,6 @@ import android.content.pm.ApplicationInfo;
import android.hardware.radio.V1_0.Carrier;
import android.hardware.radio.V1_0.CdmaSmsMessage;
import android.hardware.radio.V1_0.DataProfileInfo;
import android.hardware.radio.V1_0.Dial;
import android.hardware.radio.V1_0.GsmSmsMessage;
import android.hardware.radio.V1_0.ImsSmsMessage;
import android.hardware.radio.V1_0.NvWriteItem;
@@ -115,7 +114,6 @@ import android.hardware.radio.V1_0.RadioResponseInfo;
import android.hardware.radio.V1_0.RadioResponseType;
import android.hardware.radio.V1_0.RadioTechnologyFamily;
import android.hardware.radio.V1_0.SmsWriteArgs;
import android.hardware.radio.V1_0.UusInfo;
import android.hardware.radio.V1_6.IRadio;
import android.hardware.radio.deprecated.V1_0.IOemHook;
import android.net.ConnectivityManager;
@@ -126,12 +124,10 @@ import android.os.IPowerManager;
import android.os.IThermalService;
import android.os.Looper;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.PowerManager;
import android.os.WorkSource;
import android.service.carrier.CarrierIdentifier;
import android.telephony.AccessNetworkConstants;
import android.telephony.CarrierConfigManager;
import android.telephony.CellIdentityCdma;
import android.telephony.CellIdentityGsm;
import android.telephony.CellIdentityLte;
@@ -157,7 +153,6 @@ import android.telephony.RadioAccessSpecifier;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SmsManager;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
@@ -166,7 +161,6 @@ import android.telephony.data.EpsQos;
import android.telephony.data.QosBearerFilter;
import android.telephony.data.QosBearerSession;
import android.telephony.data.TrafficDescriptor;
import android.telephony.emergency.EmergencyNumber;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;

@@ -202,10 +196,6 @@ public class RILTest extends TelephonyTest {
    // refer to RIL#DEFAULT_WAKE_LOCK_TIMEOUT_MS
    private static final int DEFAULT_WAKE_LOCK_TIMEOUT_MS = 60000;

    @Mock
    private CarrierConfigManager mMockCarrierConfigManager;
    @Mock
    private SubscriptionInfo mSubscriptionInfo;
    @Mock
    private ConnectivityManager mConnectionManager;
    @Mock
@@ -226,7 +216,6 @@ public class RILTest extends TelephonyTest {
    private RIL mRILInstance;
    private RIL mRILUnderTest;
    ArgumentCaptor<Integer> mSerialNumberCaptor = ArgumentCaptor.forClass(Integer.class);
    ArgumentCaptor<Dial> mDialArgumentCaptor = ArgumentCaptor.forClass(Dial.class);

    // Constants
    private static final String ALPHA_LONG = "long";
@@ -311,10 +300,6 @@ public class RILTest extends TelephonyTest {
        Context context = new ContextFixture().getTestDouble();
        doReturn(true).when(mConnectionManager)
            .isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
        doReturn(mSubscriptionManager).when(context)
                .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        doReturn(mMockCarrierConfigManager).when(context)
                .getSystemService(Context.CARRIER_CONFIG_SERVICE);
        doReturn(mConnectionManager).when(context)
            .getSystemService(Context.CONNECTIVITY_SERVICE);
        doReturn(mTelephonyManager).when(context)
@@ -765,53 +750,6 @@ public class RILTest extends TelephonyTest {
        verifyRILResponse(mRILUnderTest, mSerialNumberCaptor.getValue(), RIL_REQUEST_DTMF);
    }

    private void setEmergencyNumberPrefixCarrierConfig(String[] prefixes) {
        doReturn(mSubscriptionInfo).when(mSubscriptionManager)
                .getActiveSubscriptionInfoForSimSlotIndex(anyInt());
        doReturn(0).when(mSubscriptionInfo).getSubscriptionId();

        final PersistableBundle bundle = new PersistableBundle();
        bundle.putStringArray(
                CarrierConfigManager.KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY, prefixes);
        doReturn(bundle).when(mMockCarrierConfigManager).getConfigForSubId(anyInt());
    }

    @FlakyTest
    @Test
    public void testDialEmergencyNumberWithoutPrefix() throws Exception {
        String[] prefixes = {"999"};
        setEmergencyNumberPrefixCarrierConfig(prefixes);

        String addressWithPrefix = "99912345";
        boolean isEmergencyCall = true;
        EmergencyNumber emergencyNumber = new EmergencyNumber(
                "99912345",
                "us",
                "30",
                EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
                new ArrayList<String>(),
                EmergencyNumber.EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING,
                EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
        boolean hasKnownUserIntentEmergency = true;
        int clirMode = 0;
        UUSInfo uusInfo = null;
        Message result = obtainMessage();

        Dial dialInfo = new Dial();
        dialInfo.address = "12345";
        dialInfo.clir = clirMode;
        if (uusInfo != null) {
            UusInfo info = new UusInfo();
            dialInfo.uusInfo.add(info);
        }

        mRILUnderTest.dial(addressWithPrefix, isEmergencyCall, emergencyNumber,
                hasKnownUserIntentEmergency, clirMode, uusInfo, result);
        verify(mRadioProxy).dial(mSerialNumberCaptor.capture(),
                mDialArgumentCaptor.capture());
        assertEquals(mDialArgumentCaptor.getValue().address, "12345");
    }

    @FlakyTest
    @Test
    public void testSendSMS() throws Exception {