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

Commit 89064c56 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

Ensure USSD codes are sent over IMS when CS is out of service.

They're normally only sent over CS, but if CS is out of service we will
now try them over IMS first.
Also, fixed a bug in ImsPhonecallTracker where a failed USSD code over
IMS would never dismiss the USSD status dialog.

Test: Manual - Connect to WIFI in airplane mode.  Initiate USSD code and
verify it gets to the network.
Bug: 115787581

Change-Id: Ifc79eb283f0e49c5d1a8fe16605c9337c931d38b
parent aca44d3c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1822,6 +1822,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                    ImsCallProfile.DIALSTRING_USSD);

            mUssdSession = mImsManager.makeCall(profile, callees, mImsUssdListener);
            mPendingUssd = response;
        } catch (ImsException e) {
            loge("sendUSSD : " + e);
            mPhone.sendErrorResponse(response, e);
+15 −3
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.internal.telephony.imsphone;

import static android.telephony.ServiceState.STATE_IN_SERVICE;

import static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_DATA;
import static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_DATA_ASYNC;
import static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_DATA_SYNC;
@@ -1001,9 +1003,19 @@ public final class ImsPhoneMmiCode extends Handler implements MmiCode {
                    throw new RuntimeException ("Invalid or Unsupported MMI Code");
                }
            } else if (mPoundString != null) {
                Rlog.d(LOG_TAG, "processCode: Sending pound string '"
                       + mDialingNumber + "' over CS pipe.");
                // 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.");
                    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);
                }

            } else {
                Rlog.d(LOG_TAG, "processCode: invalid or unsupported MMI");
                throw new RuntimeException ("Invalid or Unsupported MMI Code");