Merge "Hang up original swapped connection" into oc-dr1-dev
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 1ce0c00..3b2ffc6 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -39,6 +39,7 @@
import android.os.Message;
import android.os.Messenger;
import android.os.Process;
+import android.os.PersistableBundle;
import android.os.ResultReceiver;
import android.os.ServiceManager;
import android.os.UserHandle;
@@ -58,6 +59,7 @@
import android.telephony.NeighboringCellInfo;
import android.telephony.NetworkScanRequest;
import android.telephony.RadioAccessFamily;
+import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SmsManager;
@@ -65,6 +67,7 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyHistogram;
import android.telephony.TelephonyManager;
+import android.telephony.UssdResponse;
import android.telephony.VisualVoicemailSmsFilterSettings;
import android.text.TextUtils;
import android.util.ArraySet;
@@ -287,6 +290,22 @@
Pair<String, ResultReceiver> ussdObject = (Pair) request.argument;
String ussdRequest = ussdObject.first;
ResultReceiver wrappedCallback = ussdObject.second;
+
+ if (!isUssdApiAllowed(request.subId)) {
+ // Carrier does not support use of this API, return failure.
+ Rlog.w(LOG_TAG, "handleUssdRequest: carrier does not support USSD apis.");
+ UssdResponse response = new UssdResponse(ussdRequest, null);
+ Bundle returnData = new Bundle();
+ returnData.putParcelable(TelephonyManager.USSD_RESPONSE, response);
+ wrappedCallback.send(TelephonyManager.USSD_RETURN_FAILURE, returnData);
+
+ request.result = true;
+ synchronized (request) {
+ request.notifyAll();
+ }
+ return;
+ }
+
try {
request.result = phone != null ?
phone.handleUssdRequest(ussdRequest, wrappedCallback)
@@ -3832,6 +3851,21 @@
}
}
+ private boolean isUssdApiAllowed(int subId) {
+ CarrierConfigManager configManager =
+ (CarrierConfigManager) mPhone.getContext().getSystemService(
+ Context.CARRIER_CONFIG_SERVICE);
+ if (configManager == null) {
+ return false;
+ }
+ PersistableBundle pb = configManager.getConfigForSubId(subId);
+ if (pb == null) {
+ return false;
+ }
+ return pb.getBoolean(
+ CarrierConfigManager.KEY_ALLOW_USSD_REQUESTS_VIA_TELEPHONY_MANAGER_BOOL);
+ }
+
/**
* Check if phone is in emergency callback mode
* @return true if phone is in emergency callback mode