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

Commit 57845ac2 authored by Xin Li's avatar Xin Li
Browse files

Merge TQ2A.230305.008

Bug: 264720040
Merged-In: I566bc394af8788668bae144ea50cd1d5f07b8cea
Change-Id: Ie1f8880a209a7bdf8d7d91e242d7cb07cb356af2
parents 5137af2a 15989939
Loading
Loading
Loading
Loading
+47 −43
Original line number Diff line number Diff line
@@ -891,9 +891,15 @@ public final class ImsPhoneMmiCode extends Handler implements MmiCode {
                Rlog.d(LOG_TAG, "processCode: isShortCode");

                // These just get treated as USSD.
                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,6 +1110,28 @@ public final class ImsPhoneMmiCode extends Handler implements MmiCode {
                    throw new RuntimeException ("Invalid or Unsupported MMI Code");
                }
            } else if (mPoundString != null) {
                if (isUssdOverImsAllowed()) {
                    Rlog.i(LOG_TAG, "processCode: Sending ussd string '"
                            + Rlog.pii(LOG_TAG, mPoundString) + "' over IMS pipe.");
                    sendUssd(mPoundString);
                } else {
                    Rlog.i(LOG_TAG, "processCode: Sending ussd string '"
                            + Rlog.pii(LOG_TAG, mPoundString) + "' over CS pipe.");
                    throw new CallStateException(Phone.CS_FALLBACK);
                }
            } else {
                Rlog.d(LOG_TAG, "processCode: invalid or unsupported MMI");
                throw new RuntimeException ("Invalid or Unsupported MMI Code");
            }
        } catch (RuntimeException exc) {
            mState = State.FAILED;
            mMessage = mContext.getText(com.android.internal.R.string.mmiError);
            Rlog.d(LOG_TAG, "processCode: RuntimeException = " + exc);
            mPhone.onMMIDone(this);
        }
    }

    private boolean isUssdOverImsAllowed() {
        if (mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_allow_ussd_over_ims)) {
            int ussd_method = getIntCarrierConfig(
@@ -1115,49 +1143,25 @@ public final class ImsPhoneMmiCode extends Handler implements MmiCode {
                    // 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);
                        return false;
                    } else {
                                Rlog.i(LOG_TAG, "processCode: CS is out of service, "
                                        + "sending ussd string '"
                                        + Rlog.pii(LOG_TAG, mPoundString) + "' over IMS pipe.");
                                sendUssd(mPoundString);
                        Rlog.i(LOG_TAG, "isUssdOverImsAllowed: CS is out of service");
                        return true;
                    }
                            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;
                    return true;
                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);
                    return false;
                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);
                    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, "processCode: Sending ussd string '"
                            + Rlog.pii(LOG_TAG, mPoundString) + "' over CS pipe.");
                    throw new CallStateException(Phone.CS_FALLBACK);
                }
            } else {
                Rlog.d(LOG_TAG, "processCode: invalid or unsupported MMI");
                throw new RuntimeException ("Invalid or Unsupported MMI Code");
            }
        } catch (RuntimeException exc) {
            mState = State.FAILED;
            mMessage = mContext.getText(com.android.internal.R.string.mmiError);
            Rlog.d(LOG_TAG, "processCode: RuntimeException = " + exc);
            mPhone.onMMIDone(this);
            Rlog.i(LOG_TAG, "isUssdOverImsAllowed: USSD over IMS pipe is not supported.");
            return false;
        }
    }

+33 −3
Original line number Diff line number Diff line
@@ -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