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

Commit 38e0836c authored by joonhunshin's avatar joonhunshin Committed by Joonhun Shin
Browse files

If the 2-digit number is an emergency number, it should not be treated as an MMI code.

Bug: 389597400
Test: atest GsmCdmaPhoneTest
      manual test b/390271904#7, #8
Flag: com.android.internal.telephony.flags.skip_mmi_code_check_for_emergency_call
Change-Id: I232b7ec28a58ff0b3bf078f7903723e3056e3421
parent 2fbe2ddd
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -1711,10 +1711,17 @@ public class GsmCdmaPhone extends Phone {
        String newDialString = PhoneNumberUtils.stripSeparators(dialString);

        if (isPhoneTypeGsm()) {
            if (mFeatureFlags.skipMmiCodeCheckForEmergencyCall()) {
                // If not emergency number, handle in-call MMI first if applicable
                if (!dialArgs.isEmergency && handleInCallMmiCommands(newDialString)) {
                    return null;
                }
            } else {
                // handle in-call MMI first if applicable
                if (handleInCallMmiCommands(newDialString)) {
                    return null;
                }
            }

            // Only look at the Network portion for mmi
            String networkPortion = PhoneNumberUtils.extractNetworkPortionAlt(newDialString);
+45 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ import com.android.internal.telephony.domainselection.DomainSelectionResolver;
import com.android.internal.telephony.emergency.EmergencyStateTracker;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.imsphone.ImsPhone;
import com.android.internal.telephony.imsphone.ImsPhoneCall;
import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.test.SimulatedCommands;
@@ -524,6 +525,50 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
        }
    }

    @Test
    @SmallTest
    public void testDialWithShortEmergencyNumber() throws Exception {
        ServiceState serviceState = Mockito.mock(ServiceState.class);
        ImsPhoneCall imsPhoneCall = Mockito.mock(ImsPhoneCall.class);
        GsmCdmaCall gsmCdmaCall2 = Mockito.mock(GsmCdmaCall.class);

        mSST.mSS = mServiceState;
        mCT.mForegroundCall = mGsmCdmaCall;
        mCT.mBackgroundCall = gsmCdmaCall2;
        mCT.mRingingCall = gsmCdmaCall2;

        // Set the 2-digits as emergency number.
        doReturn(true).when(mPackageManager).hasSystemFeature(
                eq(PackageManager.FEATURE_TELEPHONY_CALLING));
        doReturn(true).when(mTelephonyManager).isEmergencyNumber(eq("17"));

        // Exist active call.
        doReturn(GsmCdmaCall.State.ACTIVE).when(mGsmCdmaCall).getState();
        doReturn(GsmCdmaCall.State.IDLE).when(gsmCdmaCall2).getState();
        // ImsService is not ready.
        doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(serviceState).getState();
        doReturn(serviceState).when(mImsPhone).getServiceState();
        doReturn(false).when(imsPhoneCall).isRinging();
        doReturn(imsPhoneCall).when(mImsPhone).getRingingCall();

        replaceInstance(Phone.class, "mImsPhone", mPhoneUT, mImsPhone);

        Connection connection = mPhoneUT.dial("17",
                new PhoneInternalInterface.DialArgs.Builder()
                        .setIsEmergency(true)
                        .build());
        assertNull(connection);
        verify(mCT, never()).dialGsm(eq("17"), any(PhoneInternalInterface.DialArgs.class));

        // Enable feature flag.
        doReturn(true).when(mFeatureFlags).skipMmiCodeCheckForEmergencyCall();
        mPhoneUT.dial("17",
                new PhoneInternalInterface.DialArgs.Builder()
                        .setIsEmergency(true)
                        .build());
        verify(mCT).dialGsm(eq("17"), any(PhoneInternalInterface.DialArgs.class));
    }

    @Test
    @SmallTest
    public void testWpsDialOverCs() throws Exception {