Merge "Block USSD requests via TelephonyManager when carrier does not allow it." into oc-dev
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index b5b4bb6..92da36f 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -36,6 +36,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.Process;
+import android.os.PersistableBundle;
import android.os.ResultReceiver;
import android.os.ServiceManager;
import android.os.UserHandle;
@@ -54,12 +55,14 @@
import android.telephony.ModemActivityInfo;
import android.telephony.NeighboringCellInfo;
import android.telephony.RadioAccessFamily;
+import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.SmsManager;
import android.telephony.SubscriptionInfo;
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;
@@ -282,6 +285,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)
@@ -3808,6 +3827,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