Merge "Add workaround for modem issue where pause bit is not set when on hold."
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 873152f..0898093 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -2332,10 +2332,21 @@
mPhone.stopOnHoldTone(conn);
mOnHoldToneStarted = false;
}
-
conn.onConnectionEvent(android.telecom.Connection.EVENT_CALL_REMOTELY_UNHELD, null);
}
+ boolean useVideoPauseWorkaround = mPhone.getContext().getResources().getBoolean(
+ com.android.internal.R.bool.config_useVideoPauseWorkaround);
+ if (useVideoPauseWorkaround && mSupportPauseVideo &&
+ VideoProfile.isVideo(conn.getVideoState())) {
+ // If we are using the video pause workaround, the vendor IMS code has issues
+ // with video pause signalling. In this case, when a call is remotely
+ // held, the modem does not reliably change the video state of the call to be
+ // paused.
+ // As a workaround, we will turn on that bit now.
+ conn.changeToUnPausedState();
+ }
+
SuppServiceNotification supp = new SuppServiceNotification();
// Type of notification: 0 = MO; 1 = MT
// Refer SuppServiceNotification class documentation.
@@ -2357,8 +2368,19 @@
mOnHoldToneStarted = true;
mOnHoldToneId = System.identityHashCode(conn);
}
-
conn.onConnectionEvent(android.telecom.Connection.EVENT_CALL_REMOTELY_HELD, null);
+
+ boolean useVideoPauseWorkaround = mPhone.getContext().getResources().getBoolean(
+ com.android.internal.R.bool.config_useVideoPauseWorkaround);
+ if (useVideoPauseWorkaround && mSupportPauseVideo &&
+ VideoProfile.isVideo(conn.getVideoState())) {
+ // If we are using the video pause workaround, the vendor IMS code has issues
+ // with video pause signalling. In this case, when a call is remotely
+ // held, the modem does not reliably change the video state of the call to be
+ // paused.
+ // As a workaround, we will turn on that bit now.
+ conn.changeToPausedState();
+ }
}
SuppServiceNotification supp = new SuppServiceNotification();
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneConnection.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneConnection.java
index 4f99a57..b39a6fb 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneConnection.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneConnection.java
@@ -828,10 +828,7 @@
}
if (!mShouldIgnoreVideoStateChanges) {
- if (mImsVideoCallProviderWrapper != null) {
- mImsVideoCallProviderWrapper.onVideoStateChanged(newVideoState);
- }
- setVideoState(newVideoState);
+ updateVideoState(newVideoState);
changed = true;
} else {
Rlog.d(LOG_TAG, "updateMediaCapabilities - ignoring video state change " +
@@ -894,6 +891,13 @@
return changed;
}
+ private void updateVideoState(int newVideoState) {
+ if (mImsVideoCallProviderWrapper != null) {
+ mImsVideoCallProviderWrapper.onVideoStateChanged(newVideoState);
+ }
+ setVideoState(newVideoState);
+ }
+
public void sendRttModifyRequest(android.telecom.Connection.RttTextStream textStream) {
getImsCall().sendRttModifyRequest();
setCurrentRttTextStream(textStream);
@@ -1175,4 +1179,18 @@
return mImsVideoCallProviderWrapper.wasVideoPausedFromSource(source);
}
+
+ public void changeToPausedState() {
+ int newVideoState = getVideoState() | VideoProfile.STATE_PAUSED;
+ Rlog.i(LOG_TAG, "ImsPhoneConnection: changeToPausedState - setting paused bit; "
+ + "newVideoState=" + VideoProfile.videoStateToString(newVideoState));
+ updateVideoState(newVideoState);
+ }
+
+ public void changeToUnPausedState() {
+ int newVideoState = getVideoState() & ~VideoProfile.STATE_PAUSED;
+ Rlog.i(LOG_TAG, "ImsPhoneConnection: changeToUnPausedState - unsetting paused bit; "
+ + "newVideoState=" + VideoProfile.videoStateToString(newVideoState));
+ updateVideoState(newVideoState);
+ }
}