OSDN Git Service

Prevent recents from closing while moving PiP to fullscreen.
authorRobert Carr <racarr@google.com>
Wed, 20 Apr 2016 19:53:16 +0000 (12:53 -0700)
committerRobert Carr <racarr@google.com>
Wed, 20 Apr 2016 19:56:56 +0000 (12:56 -0700)
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

packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java
services/core/java/com/android/server/wm/BoundsAnimationController.java

index 5febb9b..d7efca7 100644 (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();
index debb382..1f44b29 100644 (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