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

Commit cd5be376 authored by Joonhun Shin's avatar Joonhun Shin Committed by Android (Google) Code Review
Browse files

Merge "If the 2-digit number is an emergency number, it should not be treated...

Merge "If the 2-digit number is an emergency number, it should not be treated as an MMI code." into main
parents 7171466f 3458f70c
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -166,3 +166,14 @@ flag {
    bug:"359721349"
    is_exported: true
}

# OWNER=joonhunshin TARGET=25Q2
flag {
    name: "skip_mmi_code_check_for_emergency_call"
    namespace: "telephony"
    description: "This flag allows to skip the MMI code check for the emergency number."
    bug:"378065922"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
+18 −3
Original line number Diff line number Diff line
@@ -1000,10 +1000,17 @@ public class ImsPhone extends ImsPhoneBase {
        // Need to make sure dialString gets parsed properly
        String newDialString = PhoneNumberUtils.stripSeparators(dialString);

        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;
            }
        }

        ImsDialArgs.Builder imsDialArgsBuilder;
        imsDialArgsBuilder = ImsDialArgs.Builder.from(dialArgs);
@@ -1014,6 +1021,14 @@ public class ImsPhone extends ImsPhoneBase {
            return mCT.dial(dialString, imsDialArgsBuilder.build());
        }

        if (mFeatureFlags.skipMmiCodeCheckForEmergencyCall()) {
            // Skip to check mmi code if outgoing call is emergency
            if (dialArgs.isEmergency) {
                logd("dialInternal: emergency number, skip to check mmi code");
                return mCT.dial(dialString, imsDialArgsBuilder.build());
            }
        }

        // Only look at the Network portion for mmi
        String networkPortion = PhoneNumberUtils.extractNetworkPortionAlt(newDialString);
        ImsPhoneMmiCode mmi =  ImsPhoneMmiCode.newFromDialString(networkPortion, this,
+24 −0
Original line number Diff line number Diff line
@@ -462,6 +462,30 @@ public class ImsPhoneTest extends TelephonyTest {
        verify(mImsCT).dial(eq(dialString), any(ImsPhone.ImsDialArgs.class));
    }

    @Test
    @SmallTest
    public void testDialWithShortEmergencyNumber() throws Exception {
        // Pre-condition
        // Exist active call, try to set up 2-digit emergency number.
        doReturn(Call.State.ACTIVE).when(mForegroundCall).getState();

        String dialString = "17";
        int videoState = 0;
        ImsPhone.ImsDialArgs imsDialArgs = new ImsPhone.ImsDialArgs.Builder()
                .setVideoState(videoState)
                .setIsEmergency(true)
                .build();

        Connection connection = mImsPhoneUT.dial(dialString, imsDialArgs);
        assertEquals(null, connection);
        verify(mImsCT, never()).dial(eq(dialString), any(ImsPhone.ImsDialArgs.class));

        doReturn(true).when(mFeatureFlags).skipMmiCodeCheckForEmergencyCall();

        mImsPhoneUT.dial(dialString, imsDialArgs);
        verify(mImsCT).dial(eq(dialString), any(ImsPhone.ImsDialArgs.class));
    }

    @Test
    @SmallTest
    public void testDtmf() {