Prevent recents from closing while moving PiP to fullscreen.

If we close recents when beginning the animation, we will
trigger a resume of the previous fullscreen app, which will
attempt to aniamte in at the same time we are animating
the PiP to fullscreen. These conflict causing flicker and
churn.

Bug: 27793381
Change-Id: I520181dadab938bbf62b25891f5ba0e4e9783967
This commit is contained in:
Robert Carr
2016-04-20 12:53:16 -07:00
parent 69016e3472
commit 744e6e3aef
2 changed files with 11 additions and 5 deletions

View File

@@ -276,9 +276,6 @@ public class PipManager {
void movePipToFullscreen() {
mState = STATE_NO_PIP;
mPipTaskId = TASK_ID_NO_PIP;
for (int i = mListeners.size() - 1; i >= 0; --i) {
mListeners.get(i).onMoveToFullscreen();
}
resizePinnedStack(mState);
}
@@ -638,6 +635,11 @@ public class PipManager {
public void onPinnedStackAnimationEnded() {
if (DEBUG) Log.d(TAG, "onPinnedStackAnimationEnded()");
switch (mState) {
case STATE_NO_PIP:
for (int i = mListeners.size() - 1; i >= 0; --i) {
mListeners.get(i).onMoveToFullscreen();
}
break;
case STATE_PIP_OVERLAY:
if (!mPipRecentsOverlayManager.isRecentsShown()) {
showPipOverlay();

View File

@@ -149,11 +149,15 @@ public class BoundsAnimationController {
public void onAnimationEnd(Animator animation) {
if (DEBUG) Slog.d(TAG, "onAnimationEnd: mTarget=" + mTarget
+ " mMoveToFullScreen=" + mMoveToFullScreen + " mWillReplace=" + mWillReplace);
finishAnimation();
if (mMoveToFullScreen && !mWillReplace) {
mTarget.moveToFullscreen();
}
// If we finish the animation before we move the target to fullscreen,
// recents may close itself and we may try and resume the previous
// fullscreen app leading to churn and flicker after we then move
// our target to fullscreen.
finishAnimation();
}
@Override