summaryrefslogtreecommitdiffstats
path: root/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java')
-rw-r--r--java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java42
1 files changed, 24 insertions, 18 deletions
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java b/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
index d254d6df6..3e6f4417b 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
@@ -103,8 +103,6 @@ public class ImsVideoCallCallback extends VideoCall.Callback {
if (videoTech.getSessionModificationState()
== SessionModificationState.WAITING_FOR_UPGRADE_TO_VIDEO_RESPONSE) {
- handler.removeCallbacksAndMessages(null); // Clear everything
-
final int newSessionModificationState = getSessionModificationStateFromTelecomStatus(status);
if (status == VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS) {
// Telecom manages audio route for us
@@ -114,31 +112,21 @@ public class ImsVideoCallCallback extends VideoCall.Callback {
videoTech.setSessionModificationState(newSessionModificationState);
}
- // Wait for 4 seconds and then clean the session modification state. This allows the video UI
- // to stay up so that the user can read the error message.
- //
// If the other person accepted the upgrade request then this will keep the video UI up until
// the call's video state change. Without this we would switch to the voice call and then
// switch back to video UI.
- handler.postDelayed(
- () -> {
- if (videoTech.getSessionModificationState() == newSessionModificationState) {
- LogUtil.i("ImsVideoCallCallback.onSessionModifyResponseReceived", "clearing state");
- videoTech.setSessionModificationState(SessionModificationState.NO_REQUEST);
- } else {
- LogUtil.i(
- "ImsVideoCallCallback.onSessionModifyResponseReceived",
- "session modification state has changed, not clearing state");
- }
- },
- CLEAR_FAILED_REQUEST_TIMEOUT_MILLIS);
+ clearFailedResponseState(newSessionModificationState);
} else if (videoTech.getSessionModificationState()
== SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST) {
requestedVideoState = VideoProfile.STATE_AUDIO_ONLY;
videoTech.setSessionModificationState(SessionModificationState.NO_REQUEST);
} else if (videoTech.getSessionModificationState()
== SessionModificationState.WAITING_FOR_RESPONSE) {
- videoTech.setSessionModificationState(getSessionModificationStateFromTelecomStatus(status));
+ final int newSessionModificationState = getSessionModificationStateFromTelecomStatus(status);
+ videoTech.setSessionModificationState(newSessionModificationState);
+ if (status != VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS) {
+ clearFailedResponseState(newSessionModificationState);
+ }
} else {
LogUtil.i(
"ImsVideoCallCallback.onSessionModifyResponseReceived",
@@ -146,6 +134,24 @@ public class ImsVideoCallCallback extends VideoCall.Callback {
}
}
+ private void clearFailedResponseState(final int newSessionModificationState) {
+ handler.removeCallbacksAndMessages(null); // Clear everything
+ // Wait for 4 seconds and then clean the session modification state. This allows the video UI
+ // to stay up so that the user can read the error message.
+ handler.postDelayed(
+ () -> {
+ if (videoTech.getSessionModificationState() == newSessionModificationState) {
+ LogUtil.i("ImsVideoCallCallback.onSessionModifyResponseReceived", "clearing state");
+ videoTech.setSessionModificationState(SessionModificationState.NO_REQUEST);
+ } else {
+ LogUtil.i(
+ "ImsVideoCallCallback.onSessionModifyResponseReceived",
+ "session modification state has changed, not clearing state");
+ }
+ },
+ CLEAR_FAILED_REQUEST_TIMEOUT_MILLIS);
+ }
+
@SessionModificationState
private int getSessionModificationStateFromTelecomStatus(int telecomStatus) {
switch (telecomStatus) {