Merge "Fix domain selection while in ECBM on PS cellular" into main
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index a510e51..2abf1e2 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -2303,11 +2303,15 @@
// On GSM phones, null connection means that we dialed an MMI code
int telephonyDisconnectCause = handleMmiCode(
phone, android.telephony.DisconnectCause.OUTGOING_FAILURE);
- mNormalCallConnection.setTelephonyConnectionDisconnected(mDisconnectCauseFactory
- .toTelecomDisconnectCause(telephonyDisconnectCause,
- "Connection is null", phone.getPhoneId()));
+ if (mNormalCallConnection.getState() != Connection.STATE_DISCONNECTED) {
+ mNormalCallConnection.setTelephonyConnectionDisconnected(
+ mDisconnectCauseFactory.toTelecomDisconnectCause(
+ telephonyDisconnectCause,
+ "Connection is null",
+ phone.getPhoneId()));
+ mNormalCallConnection.close();
+ }
clearNormalCallDomainSelectionConnection();
- mNormalCallConnection.close();
return;
}
@@ -2354,6 +2358,7 @@
boolean isMmiCode = (dialPart.startsWith("*") || dialPart.startsWith("#"))
&& dialPart.endsWith("#");
boolean isSuppServiceCode = ImsPhoneMmiCode.isSuppServiceCodes(dialPart, phone);
+ boolean isPotentialUssdCode = isMmiCode && !isSuppServiceCode;
// If the number is both an MMI code and a supplementary service code,
// it shall be treated as UT. In this case, domain selection is not performed.
@@ -2362,6 +2367,10 @@
return false;
}
+ /* For USSD codes, connection is closed and MMIDialogActivity is started.
+ To avoid connection close and return false. isPotentialUssdCode is handled after
+ all condition checks. */
+
// Check and select same domain as ongoing call on the same subscription (if exists)
int activeCallDomain = getActiveCallDomain(phone.getSubId());
if (activeCallDomain != NetworkRegistrationInfo.DOMAIN_UNKNOWN
@@ -2397,6 +2406,15 @@
mNormalCallConnection = connection;
future.thenAcceptAsync((domain) -> handleOutgoingCallConnectionByCallDomainSelection(
domain, phone, number, videoState), mDomainSelectionMainExecutor);
+
+ if (isPotentialUssdCode) {
+ Log.v(LOG_TAG, "PotentialUssdCode. Closing connection with DisconnectCause.DIALED_MMI");
+ connection.setTelephonyConnectionDisconnected(
+ mDisconnectCauseFactory.toTelecomDisconnectCause(
+ android.telephony.DisconnectCause.DIALED_MMI,
+ "Dialing USSD", phone.getPhoneId()));
+ connection.close();
+ }
return true;
}