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

Commit 48458e1d authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Fixed NPE in TaskStack.stepAppWindowAnimation

It is possible for an app token to be removed from the list if its last
window is removed. The problem was probably exposed by ag/2267916

Change-Id: Ie4f36dfd0977e8a47b987e47a6ca97889bd3ef27
Fixes: 62368998
Test: go/wm-smoke
parent faf86491
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye

    /** Application tokens that are exiting, but still on screen for animations. */
    final AppTokenList mExitingAppTokens = new AppTokenList();
    final AppTokenList mTmpAppTokens = new AppTokenList();

    /** Detach this stack from its display when animation completes. */
    // TODO: maybe tie this to WindowContainer#removeChild some how...
@@ -1626,9 +1627,14 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye

        // TODO: Why aren't we just using the loop above for this? mAppAnimator.animating isn't set
        // below but is set in the loop above. See if it really matters...
        final int exitingCount = mExitingAppTokens.size();
        for (int i = 0; i < exitingCount; i++) {
            final AppWindowAnimator appAnimator = mExitingAppTokens.get(i).mAppAnimator;

        // Clear before using.
        mTmpAppTokens.clear();
        // We copy the list as things can be removed from the exiting token list while we are
        // processing.
        mTmpAppTokens.addAll(mExitingAppTokens);
        for (int i = 0; i < mTmpAppTokens.size(); i++) {
            final AppWindowAnimator appAnimator = mTmpAppTokens.get(i).mAppAnimator;
            appAnimator.wasAnimating = appAnimator.animating;
            if (appAnimator.stepAnimationLocked(currentTime)) {
                mService.mAnimator.setAnimating(true);
@@ -1641,6 +1647,8 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye
                        "updateWindowsApps...: done animating exiting " + appAnimator.mAppToken);
            }
        }
        // Clear to avoid holding reference to tokens.
        mTmpAppTokens.clear();
    }

    @Override