summaryrefslogtreecommitdiffstats
path: root/java/com/android/incallui/videotech/ims/ImsVideoTech.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/videotech/ims/ImsVideoTech.java')
-rw-r--r--java/com/android/incallui/videotech/ims/ImsVideoTech.java28
1 files changed, 21 insertions, 7 deletions
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoTech.java b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
index 40fdc6fde..363a19397 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoTech.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
@@ -39,6 +39,7 @@ public class ImsVideoTech implements VideoTech {
private @SessionModificationState int sessionModificationState =
SessionModificationState.NO_REQUEST;
private int previousVideoState = VideoProfile.STATE_AUDIO_ONLY;
+ private boolean paused = false;
public ImsVideoTech(LoggingBindings logger, VideoTechListener listener, Call call) {
this.logger = logger;
@@ -182,40 +183,52 @@ public class ImsVideoTech implements VideoTech {
public void stopTransmission() {
LogUtil.enterBlock("ImsVideoTech.stopTransmission");
+ int unpausedVideoState = getUnpausedVideoState(call.getDetails().getVideoState());
call.getVideoCall()
.sendSessionModifyRequest(
- new VideoProfile(call.getDetails().getVideoState() & ~VideoProfile.STATE_TX_ENABLED));
+ new VideoProfile(unpausedVideoState & ~VideoProfile.STATE_TX_ENABLED));
}
@Override
public void resumeTransmission() {
LogUtil.enterBlock("ImsVideoTech.resumeTransmission");
+ int unpausedVideoState = getUnpausedVideoState(call.getDetails().getVideoState());
call.getVideoCall()
.sendSessionModifyRequest(
- new VideoProfile(call.getDetails().getVideoState() | VideoProfile.STATE_TX_ENABLED));
+ new VideoProfile(unpausedVideoState | VideoProfile.STATE_TX_ENABLED));
setSessionModificationState(SessionModificationState.WAITING_FOR_RESPONSE);
}
@Override
public void pause() {
- if (canPause()) {
+ if (canPause() && !paused) {
LogUtil.i("ImsVideoTech.pause", "sending pause request");
+ paused = true;
int pausedVideoState = call.getDetails().getVideoState() | VideoProfile.STATE_PAUSED;
call.getVideoCall().sendSessionModifyRequest(new VideoProfile(pausedVideoState));
} else {
- LogUtil.i("ImsVideoTech.pause", "not sending request: canPause: %b", canPause());
+ LogUtil.i(
+ "ImsVideoTech.pause",
+ "not sending request: canPause: %b, paused: %b",
+ canPause(),
+ paused);
}
}
@Override
public void unpause() {
- if (canPause()) {
+ if (canPause() && paused) {
LogUtil.i("ImsVideoTech.unpause", "sending unpause request");
+ paused = false;
int unpausedVideoState = getUnpausedVideoState(call.getDetails().getVideoState());
call.getVideoCall().sendSessionModifyRequest(new VideoProfile(unpausedVideoState));
} else {
- LogUtil.i("ImsVideoTech.unpause", "not sending request: canPause: %b", canPause());
+ LogUtil.i(
+ "ImsVideoTech.unpause",
+ "not sending request: canPause: %b, paused: %b",
+ canPause(),
+ paused);
}
}
@@ -232,7 +245,8 @@ public class ImsVideoTech implements VideoTech {
private boolean canPause() {
return call.getDetails().can(Details.CAPABILITY_CAN_PAUSE_VIDEO)
- && call.getState() == Call.STATE_ACTIVE;
+ && call.getState() == Call.STATE_ACTIVE
+ && isTransmitting();
}
static int getUnpausedVideoState(int videoState) {