ussd: Suppress error dialog when ussd release received
Remove the prompt sent when network releases USSD session
Bug: 17782840
Change-Id: I4ca1d6db3be89ce2f28986cbc96824276edc6c7f
diff --git a/src/java/com/android/internal/telephony/CommandsInterface.java b/src/java/com/android/internal/telephony/CommandsInterface.java
index 07662aa..a2cbf96 100644
--- a/src/java/com/android/internal/telephony/CommandsInterface.java
+++ b/src/java/com/android/internal/telephony/CommandsInterface.java
@@ -94,8 +94,12 @@
// Numeric representation of string values returned
// by messages sent to setOnUSSD handler
- static final int USSD_MODE_NOTIFY = 0;
- static final int USSD_MODE_REQUEST = 1;
+ static final int USSD_MODE_NOTIFY = 0;
+ static final int USSD_MODE_REQUEST = 1;
+ static final int USSD_MODE_NW_RELEASE = 2;
+ static final int USSD_MODE_LOCAL_CLIENT = 3;
+ static final int USSD_MODE_NOT_SUPPORTED = 4;
+ static final int USSD_MODE_NW_TIMEOUT = 5;
// GSM SMS fail cause for acknowledgeLastIncomingSMS. From TS 23.040, 9.2.3.22.
static final int GSM_SMS_FAIL_CAUSE_MEMORY_CAPACITY_EXCEEDED = 0xD3;
diff --git a/src/java/com/android/internal/telephony/gsm/GSMPhone.java b/src/java/com/android/internal/telephony/gsm/GSMPhone.java
index f96fdc2..272dfc8 100644
--- a/src/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/src/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -1322,6 +1322,7 @@
onIncomingUSSD (int ussdMode, String ussdMessage) {
boolean isUssdError;
boolean isUssdRequest;
+ boolean isUssdRelease;
isUssdRequest
= (ussdMode == CommandsInterface.USSD_MODE_REQUEST);
@@ -1330,6 +1331,8 @@
= (ussdMode != CommandsInterface.USSD_MODE_NOTIFY
&& ussdMode != CommandsInterface.USSD_MODE_REQUEST);
+ isUssdRelease = (ussdMode == CommandsInterface.USSD_MODE_NW_RELEASE);
+
// See comments in GsmMmiCode.java
// USSD requests aren't finished until one
// of these two events happen
@@ -1344,7 +1347,9 @@
if (found != null) {
// Complete pending USSD
- if (isUssdError) {
+ if (isUssdRelease) {
+ found.onUssdRelease();
+ } else if (isUssdError) {
found.onUssdFinishedError();
} else {
found.onUssdFinished(ussdMessage, isUssdRequest);
diff --git a/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java b/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
index 90e783e..0e7885a 100644
--- a/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
+++ b/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
@@ -898,6 +898,25 @@
}
}
+ /**
+ * Called from GSMPhone
+ *
+ * An unsolicited USSD NOTIFY or REQUEST has come in matching
+ * up with this pending USSD request
+ *
+ * Note: If REQUEST, this exchange is complete, but the session remains
+ * active (ie, the network expects user input).
+ */
+ void
+ onUssdRelease() {
+ if (mState == State.PENDING) {
+ mState = State.COMPLETE;
+ mMessage = null;
+
+ mPhone.onMMIDone(this);
+ }
+ }
+
void sendUssd(String ussdMessage) {
// Treat this as a USSD string
mIsPendingUSSD = true;