Clear video pause tracker when video un-pause reported by the modem.
am: 077dd3fef0
Change-Id: I6cfe5969c7c604c34e9a393b6be92789de255262
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..2f0bcec
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,3 @@
+breadley@google.com
+hallliu@google.com
+tgunn@google.com
diff --git a/src/java/com/android/ims/ImsCall.java b/src/java/com/android/ims/ImsCall.java
index b6370de..ad289fd 100644
--- a/src/java/com/android/ims/ImsCall.java
+++ b/src/java/com/android/ims/ImsCall.java
@@ -28,6 +28,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
+import android.os.Parcel;
import android.telecom.ConferenceParticipant;
import android.telecom.Connection;
import android.telephony.Rlog;
@@ -422,6 +423,33 @@
}
/**
+ * Called when the remote party issues an RTT modify request
+ *
+ * @param imsCall ImsCall object
+ */
+ public void onRttModifyRequestReceived(ImsCall imsCall) {
+ }
+
+ /**
+ * Called when the remote party responds to a locally-issued RTT request.
+ *
+ * @param imsCall ImsCall object
+ * @param status The status of the request. See
+ * {@link Connection.RttModifyStatus} for possible values.
+ */
+ public void onRttModifyResponseReceived(ImsCall imsCall, int status) {
+ }
+
+ /**
+ * Called when the remote party has sent some characters via RTT
+ *
+ * @param imsCall ImsCall object
+ * @param message A string containing the transmitted characters.
+ */
+ public void onRttMessageReceived(ImsCall imsCall, String message) {
+ }
+
+ /**
* Called when handover from one access technology to another fails.
*
* @param imsCall call that failed the handover.
@@ -1549,6 +1577,64 @@
}
}
+ public void sendRttMessage(String rttMessage) {
+ synchronized(mLockObj) {
+ if (mSession == null) {
+ loge("sendRttMessage::no session");
+ }
+ if (!mCallProfile.mMediaProfile.isRttCall()) {
+ logi("sendRttMessage::Not an rtt call, ignoring");
+ return;
+ }
+ mSession.sendRttMessage(rttMessage);
+ }
+ }
+
+ /**
+ * Sends a user-requested RTT upgrade request.
+ */
+ public void sendRttModifyRequest() {
+ logi("sendRttModifyRequest");
+
+ synchronized(mLockObj) {
+ if (mSession == null) {
+ loge("sendRttModifyRequest::no session");
+ }
+ if (mCallProfile.mMediaProfile.isRttCall()) {
+ logi("sendRttModifyRequest::Already RTT call, ignoring.");
+ return;
+ }
+ // Make a copy of the current ImsCallProfile and modify it to enable RTT
+ Parcel p = Parcel.obtain();
+ mCallProfile.writeToParcel(p, 0);
+ ImsCallProfile requestedProfile = new ImsCallProfile(p);
+ requestedProfile.mMediaProfile.setRttMode(ImsStreamMediaProfile.RTT_MODE_FULL);
+
+ mSession.sendRttModifyRequest(requestedProfile);
+ }
+ }
+
+ /**
+ * Sends the user's response to a remotely-issued RTT upgrade request
+ *
+ * @param textStream A valid {@link Connection.RttTextStream} if the user
+ * accepts, {@code null} if not.
+ */
+ public void sendRttModifyResponse(boolean status) {
+ logi("sendRttModifyResponse");
+
+ synchronized(mLockObj) {
+ if (mSession == null) {
+ loge("sendRttModifyResponse::no session");
+ }
+ if (mCallProfile.mMediaProfile.isRttCall()) {
+ logi("sendRttModifyResponse::Already RTT call, ignoring.");
+ return;
+ }
+ mSession.sendRttModifyResponse(status);
+ }
+ }
+
private void clear(ImsReasonInfo lastReasonInfo) {
mInCall = false;
mHold = false;
@@ -2953,6 +3039,64 @@
}
}
}
+
+ @Override
+ public void callSessionRttModifyRequestReceived(ImsCallSession session,
+ ImsCallProfile callProfile) {
+ ImsCall.Listener listener;
+
+ synchronized(ImsCall.this) {
+ listener = mListener;
+ }
+
+ if (!callProfile.mMediaProfile.isRttCall()) {
+ logi("callSessionRttModifyRequestReceived:: ignoring request, requested profile " +
+ "is not RTT.");
+ return;
+ }
+
+ if (listener != null) {
+ try {
+ listener.onRttModifyRequestReceived(ImsCall.this);
+ } catch (Throwable t) {
+ loge("callSessionRttModifyRequestReceived:: ", t);
+ }
+ }
+ }
+
+ @Override
+ public void callSessionRttModifyResponseReceived(int status) {
+ ImsCall.Listener listener;
+
+ synchronized(ImsCall.this) {
+ listener = mListener;
+ }
+
+ if (listener != null) {
+ try {
+ listener.onRttModifyResponseReceived(ImsCall.this, status);
+ } catch (Throwable t) {
+ loge("callSessionRttModifyResponseReceived:: ", t);
+ }
+ }
+ }
+
+ @Override
+ public void callSessionRttMessageReceived(String rttMessage) {
+ ImsCall.Listener listener;
+
+ synchronized(ImsCall.this) {
+ listener = mListener;
+ }
+
+ if (listener != null) {
+ try {
+ listener.onRttMessageReceived(ImsCall.this, rttMessage);
+ } catch (Throwable t) {
+ loge("callSessionRttModifyResponseReceived:: ", t);
+ }
+ }
+ }
}
/**
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 07b9ac0..080c372 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -432,13 +432,23 @@
}
/**
- * Indicates whether VoWifi is provisioned on device
+ * Indicates whether VoWifi is provisioned on device.
+ *
+ * When CarrierConfig KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL is true, and VoLTE is not
+ * provisioned on device, this method returns false.
*
* @deprecated Does not support MSIM devices. Please use
* {@link #isWfcProvisionedOnDeviceForSlot()} instead.
*/
public static boolean isWfcProvisionedOnDevice(Context context) {
if (getBooleanCarrierConfig(context,
+ CarrierConfigManager.KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL)) {
+ if (!isVolteProvisionedOnDevice(context)) {
+ return false;
+ }
+ }
+
+ if (getBooleanCarrierConfig(context,
CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
ImsManager mgr = ImsManager.getInstance(context,
SubscriptionManager.getDefaultVoicePhoneId());
@@ -452,11 +462,21 @@
/**
* Indicates whether VoWifi is provisioned on slot.
+ *
+ * When CarrierConfig KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL is true, and VoLTE is not
+ * provisioned on device, this method returns false.
*/
public boolean isWfcProvisionedOnDeviceForSlot() {
if (getBooleanCarrierConfigForSlot(
+ CarrierConfigManager.KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL)) {
+ if (!isVolteProvisionedOnDeviceForSlot()) {
+ return false;
+ }
+ }
+
+ if (getBooleanCarrierConfigForSlot(
CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
- return isWfcProvisioned();
+ return isWfcProvisioned();
}
return true;
diff --git a/src/java/com/android/ims/ImsUt.java b/src/java/com/android/ims/ImsUt.java
index 75a0b52..4cc7011 100644
--- a/src/java/com/android/ims/ImsUt.java
+++ b/src/java/com/android/ims/ImsUt.java
@@ -19,6 +19,7 @@
import java.util.HashMap;
import java.util.Map;
+import android.content.res.Resources;
import android.os.AsyncResult;
import android.os.Bundle;
import android.os.Message;
@@ -539,7 +540,8 @@
// If ImsReasonInfo object does not have a String error code, use a
// default error string.
if (error.mExtraMessage == null) {
- errorString = new String("IMS UT exception");
+ errorString = Resources.getSystem().getString(
+ com.android.internal.R.string.mmiError);
}
else {
errorString = new String(error.mExtraMessage);