diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-07-18 07:27:52 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-07-18 07:27:52 +0000 |
commit | 62ba0c5727bfac4329cd044e81af6d40a13512a2 (patch) | |
tree | 7df1ba410ecb32216fd5ea9ee700e6f81e47f42c | |
parent | cf33bc560fbc856707cc2b94d5de1dd68ced3b52 (diff) | |
parent | 28552fbbf08d9652b259aaae8661f98d865408c1 (diff) | |
download | ims-62ba0c5727bfac4329cd044e81af6d40a13512a2.tar.gz |
release-request-ce4c09a7-d626-4edd-9c59-231ca7b79b49-for-git_oc-dr1-release-4189381 snap-temp-L78500000083186779android-8.0.0_r34android-8.0.0_r33android-8.0.0_r27android-8.0.0_r26android-8.0.0_r25android-8.0.0_r24android-8.0.0_r23android-8.0.0_r22android-8.0.0_r21oreo-dr3-releaseoreo-dr2-releaseoreo-dr1-release
Change-Id: I27b25216ecabea44682354a1bd30de9ec6bfca34
-rw-r--r-- | src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java | 23 | ||||
-rw-r--r-- | src/java/com/android/ims/internal/VideoPauseTracker.java | 8 |
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; } } } |