Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 37875615 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Stop app transition based on mAppWindowAnimating field

Bug: 19440051
Change-Id: Ic385eab15cca8c5b814dc9cdbfd2d2f79fd84b02
parent 77ba4803
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -141,6 +141,10 @@ public class AppWindowAnimator {
        }
    }

    public boolean isAnimating() {
        return animation != null || mAppToken.inPendingTransaction;
    }

    public void clearThumbnail() {
        if (thumbnail != null) {
            thumbnail.destroy();
+7 −2
Original line number Diff line number Diff line
@@ -62,8 +62,12 @@ public class WindowAnimator {
    final Context mContext;
    final WindowManagerPolicy mPolicy;

    /** Is any window animating? */
    boolean mAnimating;

    /** Is any app window animating? */
    boolean mAppWindowAnimating;

    final Choreographer.FrameCallback mAnimationFrameCallback;

    /** Time of current animation step. Reset on each iteration */
@@ -158,7 +162,7 @@ public class WindowAnimator {
                    final boolean wasAnimating = appAnimator.animation != null
                            && appAnimator.animation != AppWindowAnimator.sDummyAnimation;
                    if (appAnimator.stepAnimationLocked(mCurrentTime)) {
                        mAnimating = true;
                        mAnimating = mAppWindowAnimating = true;
                    } else if (wasAnimating) {
                        // stopped animating, do one more pass through the layout
                        setAppLayoutChanges(appAnimator,
@@ -177,7 +181,7 @@ public class WindowAnimator {
                final boolean wasAnimating = appAnimator.animation != null
                        && appAnimator.animation != AppWindowAnimator.sDummyAnimation;
                if (appAnimator.stepAnimationLocked(mCurrentTime)) {
                    mAnimating = true;
                    mAnimating = mAppWindowAnimating = true;
                } else if (wasAnimating) {
                    // stopped animating, do one more pass through the layout
                    setAppLayoutChanges(appAnimator, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER,
@@ -601,6 +605,7 @@ public class WindowAnimator {
        mBulkUpdateParams = SET_ORIENTATION_CHANGE_COMPLETE;
        boolean wasAnimating = mAnimating;
        mAnimating = false;
        mAppWindowAnimating = false;
        if (WindowManagerService.DEBUG_WINDOW_TRACE) {
            Slog.i(TAG, "!!! animate: entry time=" + mCurrentTime);
        }
+4 −1
Original line number Diff line number Diff line
@@ -9055,6 +9055,7 @@ public class WindowManagerService extends IWindowManager.Stub
                    for (int j = 0; j < N; j++) {
                        appAnimator.mAllAppWinAnimators.add(wtoken.allAppWindows.get(j).mWinAnimator);
                    }
                    mAnimator.mAppWindowAnimating |= appAnimator.isAnimating();
                    mAnimator.mAnimating |= appAnimator.showAllWindowsLocked();
                }
            }
@@ -9077,6 +9078,7 @@ public class WindowManagerService extends IWindowManager.Stub
                    appAnimator.mAllAppWinAnimators.add(wtoken.allAppWindows.get(j).mWinAnimator);
                }
                mAnimator.mAnimating |= appAnimator.showAllWindowsLocked();
                mAnimator.mAppWindowAnimating |= appAnimator.isAnimating();

                if (animLp != null) {
                    int layer = -1;
@@ -9113,6 +9115,7 @@ public class WindowManagerService extends IWindowManager.Stub
                if (wtoken.startingWindow != null && !wtoken.startingWindow.mExiting) {
                    scheduleRemoveStartingWindowLocked(wtoken);
                }
                mAnimator.mAppWindowAnimating |= appAnimator.isAnimating();

                if (animLp != null) {
                    int layer = -1;
@@ -9780,7 +9783,7 @@ public class WindowManagerService extends IWindowManager.Stub
                    defaultDisplay.pendingLayoutChanges);
        }

        if (!mAnimator.mAnimating && mAppTransition.isRunning()) {
        if (!mAnimator.mAppWindowAnimating && mAppTransition.isRunning()) {
            // We have finished the animation of an app transition.  To do
            // this, we have delayed a lot of operations like showing and
            // hiding apps, moving apps in Z-order, etc.  The app token list
+1 −3
Original line number Diff line number Diff line
@@ -238,9 +238,7 @@ class WindowStateAnimator {
    boolean isAnimating() {
        return mAnimation != null
                || (mAttachedWinAnimator != null && mAttachedWinAnimator.mAnimation != null)
                || (mAppAnimator != null &&
                        (mAppAnimator.animation != null
                                || mAppAnimator.mAppToken.inPendingTransaction));
                || (mAppAnimator != null && mAppAnimator.isAnimating());
    }

    /** Is the window animating the DummyAnimation? */