Merge "Implement RemoteVvmTaskService"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0962108..3f224af 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -320,7 +320,7 @@
<!-- "Mobile network settings" screen, used on both
non-voice-capable tablets and regular phone devices. -->
<activity android:name="MobileNetworkSettings"
- android:label="@string/settings_label"
+ android:label="@string/mobile_networks"
android:theme="@style/NetworkOperatorsSettingsTheme">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index d3f1776..2d72056 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -160,6 +160,7 @@
private static final int EVENT_SET_ALLOWED_CARRIERS_DONE = 44;
private static final int CMD_GET_ALLOWED_CARRIERS = 45;
private static final int EVENT_GET_ALLOWED_CARRIERS_DONE = 46;
+ private static final int CMD_HANDLE_USSD_REQUEST = 47;
private static final int CMD_GET_FORBIDDEN_PLMNS = 48;
private static final int EVENT_GET_FORBIDDEN_PLMNS_DONE = 49;
@@ -271,6 +272,22 @@
IccAPDUArgument iccArgument;
switch (msg.what) {
+ case CMD_HANDLE_USSD_REQUEST: {
+ request = (MainThreadRequest) msg.obj;
+ final Phone phone = getPhoneFromRequest(request);
+ Pair<String, ResultReceiver> ussdObject = (Pair) request.argument;
+ String ussdRequest = ussdObject.first;
+ ResultReceiver wrappedCallback = ussdObject.second;
+ request.result = phone != null ?
+ phone.handleUssdRequest(ussdRequest, wrappedCallback)
+ :false;
+ // Wake up the requesting thread
+ synchronized (request) {
+ request.notifyAll();
+ }
+ break;
+ }
+
case CMD_HANDLE_PIN_MMI: {
request = (MainThreadRequest) msg.obj;
final Phone phone = getPhoneFromRequest(request);
@@ -1534,6 +1551,15 @@
return handlePinMmiForSubscriber(getDefaultSubscription(), dialString);
}
+ public void handleUssdRequest(int subId, String ussdRequest, ResultReceiver wrappedCallback) {
+ enforceCallPermission();
+ if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+ return;
+ }
+ Pair<String, ResultReceiver> ussdObject = new Pair(ussdRequest, wrappedCallback);
+ sendRequest(CMD_HANDLE_USSD_REQUEST, ussdObject, subId);
+ };
+
public boolean handlePinMmiForSubscriber(int subId, String dialString) {
enforceModifyPermission();
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index b5dcba6..9ac40fd 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -50,6 +50,7 @@
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.imsphone.ImsPhone;
import com.android.internal.telephony.imsphone.ImsPhoneCallTracker;
+import com.android.internal.telephony.imsphone.ImsPhoneConnection;
import com.android.phone.ImsUtil;
import com.android.phone.PhoneGlobals;
import com.android.phone.PhoneUtils;
@@ -417,6 +418,20 @@
public void onConnectionEvent(String event, Bundle extras) {
sendConnectionEvent(event, extras);
}
+
+ @Override
+ public void onRttModifyRequestReceived() {
+ sendRemoteRttRequest();
+ }
+
+ @Override
+ public void onRttModifyResponseReceived(int status) {
+ if (status == RttModifyStatus.SESSION_MODIFY_REQUEST_SUCCESS) {
+ sendRttInitiationSuccess();
+ } else {
+ sendRttInitiationFailure(status);
+ }
+ }
};
protected com.android.internal.telephony.Connection mOriginalConnection;
@@ -618,6 +633,31 @@
}
}
+ @Override
+ public void onStartRtt(RttTextStream textStream) {
+ if (isImsConnection()) {
+ ImsPhoneConnection originalConnection = (ImsPhoneConnection) mOriginalConnection;
+ originalConnection.sendRttModifyRequest(textStream);
+ } else {
+ Log.w(this, "onStartRtt - not in IMS, so RTT cannot be enabled.");
+ }
+ }
+
+ @Override
+ public void onStopRtt() {
+ // This is not supported by carriers/vendor yet. No-op for now.
+ }
+
+ @Override
+ public void handleRttUpgradeResponse(RttTextStream textStream) {
+ if (!isImsConnection()) {
+ Log.w(this, "handleRttUpgradeResponse - not in IMS, so RTT cannot be enabled.");
+ return;
+ }
+ ImsPhoneConnection originalConnection = (ImsPhoneConnection) mOriginalConnection;
+ originalConnection.sendRttModifyResponse(textStream);
+ }
+
public void performHold() {
Log.v(this, "performHold");
// TODO: Can dialing calls be put on hold as well since they take up the