diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-02-02 21:52:12 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-02-02 21:52:12 +0000 |
commit | 15989939be965cd06a06e0437e69e6c0dec5233f (patch) | |
tree | c5e12605c8fb721b12ddbe1de4d44a5672430aca | |
parent | ae97818df54d1b38ba03ea66b589f1df5f9265e8 (diff) | |
parent | 3b101cee2ba4244aa7b3a060531312275a592abb (diff) | |
download | telephony-android13-qpr2-s10-release.tar.gz |
Merge cherrypicks of ['googleplex-android-review.googlesource.com/20928946'] into tm-qpr2-release.android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32android13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-release
Change-Id: I577b801cba80cb6fe3dbf032fd28c101116d40a1
-rw-r--r-- | src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java | 90 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java | 36 |
2 files changed, 80 insertions, 46 deletions
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java index 27a869711f..738439a45d 100644 --- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java +++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java @@ -891,9 +891,15 @@ public final class ImsPhoneMmiCode extends Handler implements MmiCode { Rlog.d(LOG_TAG, "processCode: isShortCode"); // These just get treated as USSD. - Rlog.d(LOG_TAG, "processCode: Sending short code '" - + mDialingNumber + "' over CS pipe."); - throw new CallStateException(Phone.CS_FALLBACK); + if (isUssdOverImsAllowed()) { + Rlog.d(LOG_TAG, "processCode: Sending short code '" + + mDialingNumber + "' over IMS pipe."); + sendUssd(mDialingNumber); + } else { + Rlog.d(LOG_TAG, "processCode: Sending short code '" + + mDialingNumber + "' over CS pipe."); + throw new CallStateException(Phone.CS_FALLBACK); + } } else if (isServiceCodeCallForwarding(mSc)) { Rlog.d(LOG_TAG, "processCode: is CF"); @@ -1104,47 +1110,11 @@ public final class ImsPhoneMmiCode extends Handler implements MmiCode { throw new RuntimeException ("Invalid or Unsupported MMI Code"); } } else if (mPoundString != null) { - if (mContext.getResources().getBoolean( - com.android.internal.R.bool.config_allow_ussd_over_ims)) { - int ussd_method = getIntCarrierConfig( - CarrierConfigManager.KEY_CARRIER_USSD_METHOD_INT); - - switch (ussd_method) { - case USSD_OVER_CS_PREFERRED: - // We'll normally send USSD over the CS pipe, but if it happens that - // the CS phone is out of service, we'll just try over IMS instead. - if (mPhone.getDefaultPhone().getServiceStateTracker().mSS.getState() - == STATE_IN_SERVICE) { - Rlog.i(LOG_TAG, "processCode: Sending ussd string '" - + Rlog.pii(LOG_TAG, mPoundString) + "' over CS pipe " - + "(allowed over ims)."); - throw new CallStateException(Phone.CS_FALLBACK); - } else { - Rlog.i(LOG_TAG, "processCode: CS is out of service, " - + "sending ussd string '" - + Rlog.pii(LOG_TAG, mPoundString) + "' over IMS pipe."); - sendUssd(mPoundString); - } - break; - case USSD_OVER_IMS_PREFERRED: - case USSD_OVER_IMS_ONLY: - Rlog.i(LOG_TAG, "processCode: Sending ussd string '" - + Rlog.pii(LOG_TAG, mPoundString) + "' over IMS pipe."); - sendUssd(mPoundString); - break; - case USSD_OVER_CS_ONLY: - Rlog.i(LOG_TAG, "processCode: Sending ussd string '" - + Rlog.pii(LOG_TAG, mPoundString) + "' over CS pipe."); - throw new CallStateException(Phone.CS_FALLBACK); - default: - Rlog.i(LOG_TAG, "processCode: Sending ussd string '" - + Rlog.pii(LOG_TAG, mPoundString) + "' over CS pipe." - + "(unsupported method)"); - throw new CallStateException(Phone.CS_FALLBACK); - } + if (isUssdOverImsAllowed()) { + Rlog.i(LOG_TAG, "processCode: Sending ussd string '" + + Rlog.pii(LOG_TAG, mPoundString) + "' over IMS pipe."); + sendUssd(mPoundString); } else { - // USSD codes are not supported over IMS due to modem limitations; send over - // the CS pipe instead. This should be fixed in the future. Rlog.i(LOG_TAG, "processCode: Sending ussd string '" + Rlog.pii(LOG_TAG, mPoundString) + "' over CS pipe."); throw new CallStateException(Phone.CS_FALLBACK); @@ -1161,6 +1131,40 @@ public final class ImsPhoneMmiCode extends Handler implements MmiCode { } } + private boolean isUssdOverImsAllowed() { + if (mContext.getResources().getBoolean( + com.android.internal.R.bool.config_allow_ussd_over_ims)) { + int ussd_method = getIntCarrierConfig( + CarrierConfigManager.KEY_CARRIER_USSD_METHOD_INT); + + switch (ussd_method) { + case USSD_OVER_CS_PREFERRED: + // We'll normally send USSD over the CS pipe, but if it happens that + // the CS phone is out of service, we'll just try over IMS instead. + if (mPhone.getDefaultPhone().getServiceStateTracker().mSS.getState() + == STATE_IN_SERVICE) { + return false; + } else { + Rlog.i(LOG_TAG, "isUssdOverImsAllowed: CS is out of service"); + return true; + } + case USSD_OVER_IMS_PREFERRED: + case USSD_OVER_IMS_ONLY: + return true; + case USSD_OVER_CS_ONLY: + return false; + default: + Rlog.i(LOG_TAG, "isUssdOverImsAllowed: Unsupported method"); + return false; + } + } else { + // USSD codes are not supported over IMS due to modem limitations; send over + // the CS pipe instead. This should be fixed in the future. + Rlog.i(LOG_TAG, "isUssdOverImsAllowed: USSD over IMS pipe is not supported."); + return false; + } + } + /** * Called from ImsPhone * diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java index 17a63ddfce..775063579e 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java @@ -881,6 +881,9 @@ public class ImsPhoneTest extends TelephonyTest { mImsPhoneUT.dial("*135#", new ImsPhone.ImsDialArgs.Builder().build()); verify(mImsCT).sendUSSD(eq("*135#"), any()); + + mImsPhoneUT.dial("91", new ImsPhone.ImsDialArgs.Builder().build()); + verify(mImsCT).sendUSSD(eq("91"), any()); } @Test @@ -901,6 +904,13 @@ public class ImsPhoneTest extends TelephonyTest { errorCode = e.getMessage(); } assertEquals(Phone.CS_FALLBACK, errorCode); + + try { + mImsPhoneUT.dial("91", new ImsPhone.ImsDialArgs.Builder().build()); + } catch (CallStateException e) { + errorCode = e.getMessage(); + } + assertEquals(Phone.CS_FALLBACK, errorCode); } @Test @@ -918,11 +928,18 @@ public class ImsPhoneTest extends TelephonyTest { errorCode = e.getMessage(); } assertEquals(Phone.CS_FALLBACK, errorCode); + + try { + mImsPhoneUT.dial("91", new ImsPhone.ImsDialArgs.Builder().build()); + } catch (CallStateException e) { + errorCode = e.getMessage(); + } + assertEquals(Phone.CS_FALLBACK, errorCode); } @Test @SmallTest - public void testSendUssdAllowUssdOverImswithIMSPreferred() throws Exception { + public void testSendUssdAllowUssdOverImsWithImsPreferred() throws Exception { Resources resources = mContext.getResources(); mBundle.putInt(CarrierConfigManager.KEY_CARRIER_USSD_METHOD_INT, @@ -933,11 +950,14 @@ public class ImsPhoneTest extends TelephonyTest { mImsPhoneUT.dial("*135#", new ImsPhone.ImsDialArgs.Builder().build()); verify(mImsCT).sendUSSD(eq("*135#"), any()); + + mImsPhoneUT.dial("91", new ImsPhone.ImsDialArgs.Builder().build()); + verify(mImsCT).sendUSSD(eq("91"), any()); } @Test @SmallTest - public void testSendUssdAllowUssdOverImswithCSOnly() throws Exception { + public void testSendUssdAllowUssdOverImsWithCsOnly() throws Exception { String errorCode = ""; Resources resources = mContext.getResources(); @@ -953,11 +973,18 @@ public class ImsPhoneTest extends TelephonyTest { errorCode = e.getMessage(); } assertEquals(Phone.CS_FALLBACK, errorCode); + + try { + mImsPhoneUT.dial("91", new ImsPhone.ImsDialArgs.Builder().build()); + } catch (CallStateException e) { + errorCode = e.getMessage(); + } + assertEquals(Phone.CS_FALLBACK, errorCode); } @Test @SmallTest - public void testSendUssdAllowUssdOverImswithIMSOnly() throws Exception { + public void testSendUssdAllowUssdOverImsWithImsOnly() throws Exception { Resources resources = mContext.getResources(); mBundle.putInt(CarrierConfigManager.KEY_CARRIER_USSD_METHOD_INT, @@ -968,6 +995,9 @@ public class ImsPhoneTest extends TelephonyTest { mImsPhoneUT.dial("*135#", new ImsPhone.ImsDialArgs.Builder().build()); verify(mImsCT).sendUSSD(eq("*135#"), any()); + + mImsPhoneUT.dial("91", new ImsPhone.ImsDialArgs.Builder().build()); + verify(mImsCT).sendUSSD(eq("91"), any()); } @Test |