aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-07-18 07:27:52 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-07-18 07:27:52 +0000
commit62ba0c5727bfac4329cd044e81af6d40a13512a2 (patch)
tree7df1ba410ecb32216fd5ea9ee700e6f81e47f42c
parentcf33bc560fbc856707cc2b94d5de1dd68ced3b52 (diff)
parent28552fbbf08d9652b259aaae8661f98d865408c1 (diff)
downloadims-62ba0c5727bfac4329cd044e81af6d40a13512a2.tar.gz
Change-Id: I27b25216ecabea44682354a1bd30de9ec6bfca34
-rw-r--r--src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java23
-rw-r--r--src/java/com/android/ims/internal/VideoPauseTracker.java8
2 files changed, 27 insertions, 4 deletions
diff --git a/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java b/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
index cf203d35..ca4078f9 100644
--- a/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
+++ b/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
@@ -69,6 +69,7 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider {
new ConcurrentHashMap<ImsVideoProviderWrapperCallback, Boolean>(8, 0.9f, 1));
private VideoPauseTracker mVideoPauseTracker = new VideoPauseTracker();
private boolean mUseVideoPauseWorkaround = false;
+ private int mCurrentVideoState;
private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
@Override
@@ -283,6 +284,16 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider {
}
try {
+ if (isResumeRequest(fromProfile.getVideoState(), toProfile.getVideoState()) &&
+ !VideoProfile.isPaused(mCurrentVideoState)) {
+ // Request is to resume, but we're already resumed so ignore the request.
+ Log.i(this, "onSendSessionModifyRequest: fromVideoState=%s, toVideoState=%s; "
+ + "skipping resume request - already resumed.",
+ VideoProfile.videoStateToString(fromProfile.getVideoState()),
+ VideoProfile.videoStateToString(toProfile.getVideoState()));
+ return;
+ }
+
toProfile = maybeFilterPauseResume(fromProfile, toProfile,
VideoPauseTracker.SOURCE_INCALL);
@@ -541,10 +552,18 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider {
* @param newVideoState The new video state.
*/
public void onVideoStateChanged(int newVideoState) {
- if (mVideoPauseTracker.isPaused() && !VideoProfile.isPaused(newVideoState)) {
- Log.i(this, "onVideoStateChanged: newVideoState=%s, clearing pending pause requests.",
+ if (VideoProfile.isPaused(mCurrentVideoState) && !VideoProfile.isPaused(newVideoState)) {
+ // New video state is un-paused, so clear any pending pause requests.
+ Log.i(this, "onVideoStateChanged: currentVideoState=%s, newVideoState=%s, "
+ + "clearing pending pause requests.",
+ VideoProfile.videoStateToString(mCurrentVideoState),
VideoProfile.videoStateToString(newVideoState));
mVideoPauseTracker.clearPauseRequests();
+ } else {
+ Log.d(this, "onVideoStateChanged: currentVideoState=%s, newVideoState=%s",
+ VideoProfile.videoStateToString(mCurrentVideoState),
+ VideoProfile.videoStateToString(newVideoState));
}
+ mCurrentVideoState = newVideoState;
}
}
diff --git a/src/java/com/android/ims/internal/VideoPauseTracker.java b/src/java/com/android/ims/internal/VideoPauseTracker.java
index a23c5901..baa3163f 100644
--- a/src/java/com/android/ims/internal/VideoPauseTracker.java
+++ b/src/java/com/android/ims/internal/VideoPauseTracker.java
@@ -123,8 +123,12 @@ public class VideoPauseTracker {
} else {
Log.i(this, "shouldResumeVideoFor: source=%s, pendingRequests=%s - not paused",
sourceToString(source), sourcesToString(mPauseRequests));
- // Video wasn't paused, so don't resume.
- return false;
+ // Although there are no pending pause requests, it is possible that we cleared the
+ // pause tracker because the video state reported we're un-paused. In this case it
+ // is benign to just allow the resume request to be sent since it'll have no effect.
+ // Re-writing it to squelch the resume would end up causing it to be a pause
+ // request, which is bad.
+ return true;
}
}
}