Loading flags/ims.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -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 } } src/java/com/android/internal/telephony/imsphone/ImsPhone.java +18 −3 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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, Loading tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading
flags/ims.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -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 } }
src/java/com/android/internal/telephony/imsphone/ImsPhone.java +18 −3 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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, Loading
tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading