WindowAnimator.java revision 6fbda63e68513ece4409dac845588711ab25c39d
1764983d16925daeeba3f29fd1f844187655d1386Craig Mautner// Copyright 2012 Google Inc. All Rights Reserved.
2764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
3764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerpackage com.android.server.wm;
4764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
5764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
6f12100e0255c86d0d05dba2e7ba87a745870423dCraig Mautnerimport static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
7764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
8a608b882327fbb393bde3854953cd322a6fea675Craig Mautnerimport static com.android.server.wm.WindowManagerService.LayoutFields.SET_UPDATE_ROTATION;
9a608b882327fbb393bde3854953cd322a6fea675Craig Mautnerimport static com.android.server.wm.WindowManagerService.LayoutFields.SET_WALLPAPER_MAY_CHANGE;
10d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautnerimport static com.android.server.wm.WindowManagerService.LayoutFields.SET_FORCE_HIDING_CHANGED;
11d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner
12d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautnerimport static com.android.server.wm.WindowManagerService.H.SET_DIM_PARAMETERS;
13a608b882327fbb393bde3854953cd322a6fea675Craig Mautner
14764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.content.Context;
15764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.os.SystemClock;
16764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.util.Log;
17764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.util.Slog;
181caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautnerimport android.view.Choreographer;
19764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.view.Surface;
20764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.view.WindowManagerPolicy;
21764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.view.animation.Animation;
22764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
23764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport com.android.internal.policy.impl.PhoneWindowManager;
24764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
25e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautnerimport java.io.PrintWriter;
260c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackbornimport java.util.ArrayList;
27e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner
28764983d16925daeeba3f29fd1f844187655d1386Craig Mautner/**
29764983d16925daeeba3f29fd1f844187655d1386Craig Mautner * Singleton class that carries out the animations and Surface operations in a separate task
30764983d16925daeeba3f29fd1f844187655d1386Craig Mautner * on behalf of WindowManagerService.
31764983d16925daeeba3f29fd1f844187655d1386Craig Mautner */
32764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerpublic class WindowAnimator {
33bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner    private static final String TAG = "WindowAnimator";
34764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
35764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    final WindowManagerService mService;
36764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    final Context mContext;
37764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    final WindowManagerPolicy mPolicy;
38764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
391caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    final Choreographer mChoreographer = Choreographer.getInstance();
401caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner
417358fbfeb2febb60085067fcacc192f429b06545Craig Mautner    ArrayList<WindowStateAnimator> mWinAnimators = new ArrayList<WindowStateAnimator>();
42bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner
43764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    boolean mAnimating;
4401cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner
4501cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner    /** Variables only intended to be valid within each pass through animate(). Does not contain
4601cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner     * persistent state. */
4701cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner    private class InnerLoopParams {
4801cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner        boolean mForceHiding;
4901cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner    }
5001cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner    InnerLoopParams mInner = new InnerLoopParams();
5101cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner
521caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    static class LayoutToAnimatorParams {
531caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        boolean mAnimationScheduled;
541caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        ArrayList<WindowStateAnimator> mWinAnimators = new ArrayList<WindowStateAnimator>();
551caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        WindowState mWallpaperTarget;
561caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    }
571caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    /** Params from WindowManagerService. Do not modify or read without first locking on
581caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner     * either WindowManagerService.mWindowMap or WindowManagerService.mAnimator.and then on
591caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner     * mLayoutToAnim */
601caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    final LayoutToAnimatorParams mLayoutToAnim = new LayoutToAnimatorParams();
611caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner
621caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    final Runnable mAnimationRunnable;
631caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner
64764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    int mAdjResult;
65764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
66764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    int mPendingLayoutChanges;
67764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
68764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    /** Overall window dimensions */
69764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    int mDw, mDh;
70764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
71764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    /** Interior window dimensions */
72764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    int mInnerDw, mInnerDh;
73764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
74764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    /** Time of current animation step. Reset on each iteration */
75764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    long mCurrentTime;
76764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
77764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    /** Skip repeated AppWindowTokens initialization. Note that AppWindowsToken's version of this
78764983d16925daeeba3f29fd1f844187655d1386Craig Mautner     * is a long initialized to Long.MIN_VALUE so that it doesn't match this value on startup. */
796fbda63e68513ece4409dac845588711ab25c39dCraig Mautner    private int mAnimTransactionSequence;
80764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
81764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    /** The one and only screen rotation if one is happening */
82764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    ScreenRotationAnimation mScreenRotationAnimation = null;
83764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
84e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner    // Window currently running an animation that has requested it be detached
85e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner    // from the wallpaper.  This means we need to ensure the wallpaper is
86e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner    // visible behind it in case it animates in a way that would allow it to be
8701cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner    // seen. If multiple windows satisfy this, use the lowest window.
88e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner    WindowState mWindowDetachedWallpaper = null;
8901cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner
90e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner    DimSurface mWindowAnimationBackgroundSurface = null;
91e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner
92a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn    WindowStateAnimator mUniverseBackground = null;
93a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn    int mAboveUniverseLayer = 0;
94a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn
95a608b882327fbb393bde3854953cd322a6fea675Craig Mautner    int mBulkUpdateParams = 0;
96a608b882327fbb393bde3854953cd322a6fea675Craig Mautner
97d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner    DimAnimator mDimAnimator = null;
98d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner    DimAnimator.Parameters mDimParams = null;
99d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner
1004d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner    static final int WALLPAPER_ACTION_PENDING = 1;
1014d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner    int mPendingActions;
1024d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner
1031caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    WindowState mWallpaperTarget = null;
1041caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner
105764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    WindowAnimator(final WindowManagerService service, final Context context,
106764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            final WindowManagerPolicy policy) {
107764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mService = service;
108764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mContext = context;
109764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mPolicy = policy;
1101caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner
1111caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        mAnimationRunnable = new Runnable() {
1121caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            @Override
1131caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            public void run() {
1141caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                // TODO(cmautner): When full isolation is achieved for animation, the first lock
1151caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                // goes away and only the WindowAnimator.this remains.
1161caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                synchronized(mService.mWindowMap) {
1171caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                    synchronized(WindowAnimator.this) {
1181caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                        copyLayoutToAnimParamsLocked();
1191caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                        animateLocked();
1201caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                    }
1211caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                }
1221caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            }
1231caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        };
1249e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner
1259e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        mWindowAnimationBackgroundSurface = new DimSurface(mService.mFxSession);
1261caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    }
1271caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner
1281caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    /** Copy all WindowManagerService params into local params here. Locked on 'this'. */
1291caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    private void copyLayoutToAnimParamsLocked() {
1301caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        final LayoutToAnimatorParams layoutToAnim = mLayoutToAnim;
1311caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        synchronized(layoutToAnim) {
1321caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            layoutToAnim.mAnimationScheduled = false;
1331caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner
1341caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            mWinAnimators = new ArrayList<WindowStateAnimator>(layoutToAnim.mWinAnimators);
1351caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            mWallpaperTarget = layoutToAnim.mWallpaperTarget;
1361caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        }
1371caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    }
1381caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner
1391caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    /** Note that Locked in this case is on mLayoutToAnim */
1401caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    void scheduleAnimationLocked() {
1411caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        final LayoutToAnimatorParams layoutToAnim = mLayoutToAnim;
1421caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        if (!layoutToAnim.mAnimationScheduled) {
1431caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            layoutToAnim.mAnimationScheduled = true;
1441caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            mChoreographer.postCallback(
1451caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                    Choreographer.CALLBACK_ANIMATION, mAnimationRunnable, null);
1461caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner        }
147764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    }
148764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
149b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner    void hideWallpapersLocked(final WindowState w) {
150b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner        if ((mService.mWallpaperTarget == w && mService.mLowerWallpaperTarget == null)
151b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                || mService.mWallpaperTarget == null) {
152b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner            for (final WindowToken token : mService.mWallpaperTokens) {
153b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                for (final WindowState wallpaper : token.windows) {
154b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                    final WindowStateAnimator winAnimator = wallpaper.mWinAnimator;
155b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                    if (!winAnimator.mLastHidden) {
156b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                        winAnimator.hide();
157507a2ee12b6d1d683e4a5806804c472b3fe32e61Craig Mautner                        mService.dispatchWallpaperVisibility(wallpaper, false);
158b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                        mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
159b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                    }
160b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                }
161b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner                token.hidden = true;
1620afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner            }
1630afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner        }
1640afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner    }
1650afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner
166764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    private void updateWindowsAppsAndRotationAnimationsLocked() {
167ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner        final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens;
168764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        int i;
169ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner        final int NAT = appTokens.size();
170764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        for (i=0; i<NAT; i++) {
171ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner            final AppWindowAnimator appAnimator = appTokens.get(i).mAppAnimator;
172594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner            final boolean wasAnimating = appAnimator.animation != null
173fbf378c736a973b8edaf1fc4c187d11dc0f5e291Craig Mautner                    && appAnimator.animation != AppWindowAnimator.sDummyAnimation;
174594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner            if (appAnimator.stepAnimationLocked(mCurrentTime, mInnerDw, mInnerDh)) {
175764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                mAnimating = true;
176bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner            } else if (wasAnimating) {
177bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner                // stopped animating, do one more pass through the layout
178bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner                mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
179cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
180594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                    mService.debugLayoutRepeats("appToken " + appAnimator.mAppToken + " done",
181d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                        mPendingLayoutChanges);
182cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                }
18383339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner                if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG,
18483339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner                        "updateWindowsApps...: done animating " + appAnimator.mAppToken);
185bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner            }
186bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner        }
187a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner
188bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner        final int NEAT = mService.mExitingAppTokens.size();
189bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner        for (i=0; i<NEAT; i++) {
190e4d8a5dd42070d919dbd774f24c6684ecf1e350eCraig Mautner            final AppWindowAnimator appAnimator = mService.mExitingAppTokens.get(i).mAppAnimator;
191594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner            final boolean wasAnimating = appAnimator.animation != null
192fbf378c736a973b8edaf1fc4c187d11dc0f5e291Craig Mautner                    && appAnimator.animation != AppWindowAnimator.sDummyAnimation;
193594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner            if (appAnimator.stepAnimationLocked(mCurrentTime, mInnerDw, mInnerDh)) {
194bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner                mAnimating = true;
195bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner            } else if (wasAnimating) {
196bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner                // stopped animating, do one more pass through the layout
197bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner                mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
198cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
19983339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner                    mService.debugLayoutRepeats("exiting appToken " + appAnimator.mAppToken
200594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                        + " done", mPendingLayoutChanges);
201cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                }
20283339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner                if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG,
20383339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner                        "updateWindowsApps...: done animating exiting " + appAnimator.mAppToken);
204764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
205764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        }
206764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
207187ae2105eb771e10ef54e0e9f2796e7fb7cb4e9Dianne Hackborn        if (mScreenRotationAnimation != null && mScreenRotationAnimation.isAnimating()) {
208764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            if (mScreenRotationAnimation.stepAnimationLocked(mCurrentTime)) {
209764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                mAnimating = true;
210764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            } else {
211a608b882327fbb393bde3854953cd322a6fea675Craig Mautner                mBulkUpdateParams |= SET_UPDATE_ROTATION;
212764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                mScreenRotationAnimation.kill();
213764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                mScreenRotationAnimation = null;
214764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
215764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        }
216764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    }
217764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
218764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    private void updateWindowsAndWallpaperLocked() {
2196fbda63e68513ece4409dac845588711ab25c39dCraig Mautner        ++mAnimTransactionSequence;
220764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
2210c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn        ArrayList<WindowStateAnimator> unForceHiding = null;
2220c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn        boolean wallpaperInUnForceHiding = false;
2239e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        WindowStateAnimator windowAnimationBackground = null;
2249e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        int windowAnimationBackgroundColor = 0;
2259e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        WindowState detachedWallpaper = null;
2260c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn
22701cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner        for (int i = mWinAnimators.size() - 1; i >= 0; i--) {
22801cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner            WindowStateAnimator winAnimator = mWinAnimators.get(i);
22901cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner            WindowState win = winAnimator.mWin;
230bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner            final int flags = winAnimator.mAttrFlags;
231764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
232c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner            if (winAnimator.mSurface != null) {
233a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner                final boolean wasAnimating = winAnimator.mWasAnimating;
234a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner                final boolean nowAnimating = winAnimator.stepAnimationLocked(mCurrentTime);
235764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
236764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                if (WindowManagerService.DEBUG_WALLPAPER) {
237bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                    Slog.v(TAG, win + ": wasAnimating=" + wasAnimating +
238764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                            ", nowAnimating=" + nowAnimating);
239764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                }
240764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
241764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                // If this window is animating, make a note that we have
242764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                // an animating window and take care of a request to run
243764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                // a detached wallpaper animation.
244764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                if (nowAnimating) {
245a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner                    if (winAnimator.mAnimation != null) {
246bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                        if ((flags & FLAG_SHOW_WALLPAPER) != 0
247a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner                                && winAnimator.mAnimation.getDetachWallpaper()) {
2489e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                            detachedWallpaper = win;
249764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        }
250d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                        final int backgroundColor = winAnimator.mAnimation.getBackgroundColor();
251d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                        if (backgroundColor != 0) {
2529e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                            if (windowAnimationBackground == null || (winAnimator.mAnimLayer <
2539e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                                    windowAnimationBackground.mAnimLayer)) {
2549e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                                windowAnimationBackground = winAnimator;
2559e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                                windowAnimationBackgroundColor = backgroundColor;
256764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                            }
257764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        }
258764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    }
259764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    mAnimating = true;
260764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                }
261764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
262764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                // If this window's app token is running a detached wallpaper
263764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                // animation, make a note so we can ensure the wallpaper is
264764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                // displayed behind it.
265594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                final AppWindowAnimator appAnimator =
266bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                        win.mAppToken == null ? null : win.mAppToken.mAppAnimator;
267594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                if (appAnimator != null && appAnimator.animation != null
268594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                        && appAnimator.animating) {
269bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                    if ((flags & FLAG_SHOW_WALLPAPER) != 0
270594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                            && appAnimator.animation.getDetachWallpaper()) {
2719e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                        detachedWallpaper = win;
272764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    }
273594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                    final int backgroundColor = appAnimator.animation.getBackgroundColor();
274d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                    if (backgroundColor != 0) {
2759e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                        if (windowAnimationBackground == null || (winAnimator.mAnimLayer <
2769e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                                windowAnimationBackground.mAnimLayer)) {
2779e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                            windowAnimationBackground = winAnimator;
2789e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                            windowAnimationBackgroundColor = backgroundColor;
279764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        }
280764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    }
281764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                }
282764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
283bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                if (wasAnimating && !winAnimator.mAnimating && mService.mWallpaperTarget == win) {
284a608b882327fbb393bde3854953cd322a6fea675Craig Mautner                    mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE;
285764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
286cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                    if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
287d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                        mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 2",
288d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                            mPendingLayoutChanges);
289cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                    }
290764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                }
291764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
292bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                if (mPolicy.doesForceHide(win, win.mAttrs)) {
293764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    if (!wasAnimating && nowAnimating) {
29483339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner                        if (WindowManagerService.DEBUG_ANIM ||
29583339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner                                WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
29683339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner                                "Animation started that could impact force hide: " + win);
297d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                        mBulkUpdateParams |= SET_FORCE_HIDING_CHANGED;
298764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
299cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                        if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
300d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                            mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 3",
301d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                                mPendingLayoutChanges);
302cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                        }
303764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        mService.mFocusMayChange = true;
304ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                    }
305f12100e0255c86d0d05dba2e7ba87a745870423dCraig Mautner                    if (win.isReadyForDisplay() && winAnimator.mAnimationIsEntrance) {
30601cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner                        mInner.mForceHiding = true;
307764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    }
308ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                    if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
30901cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner                            "Force hide " + mInner.mForceHiding
310ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                            + " hasSurface=" + win.mHasSurface
311ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                            + " policyVis=" + win.mPolicyVisibility
312ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                            + " destroying=" + win.mDestroying
313ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                            + " attHidden=" + win.mAttachedHidden
314ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                            + " vis=" + win.mViewVisibility
315ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                            + " hidden=" + win.mRootToken.hidden
316ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn                            + " anim=" + win.mWinAnimator.mAnimation);
317bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                } else if (mPolicy.canBeForceHidden(win, win.mAttrs)) {
318d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                    final boolean changed;
319f12100e0255c86d0d05dba2e7ba87a745870423dCraig Mautner                    if (mInner.mForceHiding && (!winAnimator.isAnimating()
320f12100e0255c86d0d05dba2e7ba87a745870423dCraig Mautner                            || (winAnimator.mAttrFlags & FLAG_SHOW_WHEN_LOCKED) == 0)) {
321bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                        changed = win.hideLw(false, false);
322764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG,
323bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                                "Now policy hidden: " + win);
324764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    } else {
325bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                        changed = win.showLw(false, false);
326764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG,
327bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                                "Now policy shown: " + win);
328764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        if (changed) {
329d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                            if ((mBulkUpdateParams & SET_FORCE_HIDING_CHANGED) != 0
330bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                                    && win.isVisibleNow() /*w.isReadyForDisplay()*/) {
3310c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn                                if (unForceHiding == null) {
3320c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn                                    unForceHiding = new ArrayList<WindowStateAnimator>();
3330c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn                                }
3340c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn                                unForceHiding.add(winAnimator);
33501cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner                                if ((flags & FLAG_SHOW_WALLPAPER) != 0) {
3360c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn                                    wallpaperInUnForceHiding = true;
337764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                                }
338764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                            }
339bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                            if (mCurrentFocus == null || mCurrentFocus.mLayer < win.mLayer) {
340764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                                // We are showing on to of the current
341764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                                // focus, so re-evaluate focus to make
342764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                                // sure it is correct.
343764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                                mService.mFocusMayChange = true;
344764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                            }
345764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        }
346764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    }
34701cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner                    if (changed && (flags & FLAG_SHOW_WALLPAPER) != 0) {
348a608b882327fbb393bde3854953cd322a6fea675Craig Mautner                        mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE;
349764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
350cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                        if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
351d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                            mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 4",
352d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                                mPendingLayoutChanges);
353cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                        }
354764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    }
355764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                }
356764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
357764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
358bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner            final AppWindowToken atoken = win.mAppToken;
3596fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            if (winAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW) {
3606fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                if (atoken == null || atoken.allDrawn) {
3616fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                    if (winAnimator.performShowLocked()) {
3626fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM;
3636fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
3646fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                            mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 5",
3656fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                                mPendingLayoutChanges);
366764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        }
367cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                    }
368cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner                }
369764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
370594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner            final AppWindowAnimator appAnimator =
371594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                    atoken == null ? null : atoken.mAppAnimator;
372594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner            if (appAnimator != null && appAnimator.thumbnail != null) {
3736fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                if (appAnimator.thumbnailTransactionSeq != mAnimTransactionSequence) {
3746fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                    appAnimator.thumbnailTransactionSeq = mAnimTransactionSequence;
375594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                    appAnimator.thumbnailLayer = 0;
3768078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                }
377594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                if (appAnimator.thumbnailLayer < winAnimator.mAnimLayer) {
378594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner                    appAnimator.thumbnailLayer = winAnimator.mAnimLayer;
3798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                }
3808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            }
381764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        } // end forall windows
3820c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn
3839e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        if (mWindowDetachedWallpaper != detachedWallpaper) {
3849e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            if (WindowManagerService.DEBUG_WALLPAPER) Slog.v(TAG,
3859e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    "Detached wallpaper changed from " + mWindowDetachedWallpaper
3869e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    + " to " + detachedWallpaper);
3879e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            mWindowDetachedWallpaper = detachedWallpaper;
3889e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE;
3899e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        }
3909e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner
3919e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        if (windowAnimationBackgroundColor != 0) {
3929e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            // If the window that wants black is the current wallpaper
3939e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            // target, then the black goes *below* the wallpaper so we
3949e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            // don't cause the wallpaper to suddenly disappear.
3959e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            int animLayer = windowAnimationBackground.mAnimLayer;
3969e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            WindowState win = windowAnimationBackground.mWin;
3979e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            if (windowAnimationBackground != null && mService.mWallpaperTarget == win
3989e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    || mService.mLowerWallpaperTarget == win
3999e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    || mService.mUpperWallpaperTarget == win) {
4009e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                final int N = mWinAnimators.size();
4019e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                for (int i = 0; i < N; i++) {
4029e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    WindowStateAnimator winAnimator = mWinAnimators.get(i);
4039e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    if (winAnimator.mWin.mIsWallpaper) {
4049e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                        animLayer = winAnimator.mAnimLayer;
4059e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                        break;
4069e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    }
4079e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                }
4089e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            }
4099e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner
4109e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            final int dw = mDw;
4119e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            final int dh = mDh;
4129e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            mWindowAnimationBackgroundSurface.show(dw, dh,
4139e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    animLayer - WindowManagerService.LAYER_OFFSET_DIM,
4149e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                    windowAnimationBackgroundColor);
4159e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        } else {
4169e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner            mWindowAnimationBackgroundSurface.hide();
4179e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner        }
4189e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner
4190c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn        // If we have windows that are being show due to them no longer
4200c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn        // being force-hidden, apply the appropriate animation to them.
4210c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn        if (unForceHiding != null) {
4220c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn            for (int i=unForceHiding.size()-1; i>=0; i--) {
4230c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn                Animation a = mPolicy.createForceHideEnterAnimation(wallpaperInUnForceHiding);
4240c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn                if (a != null) {
4254d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner                    final WindowStateAnimator winAnimator = unForceHiding.get(i);
4264d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner                    winAnimator.setAnimation(a);
4274d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner                    winAnimator.mAnimationIsEntrance = true;
4280c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn                }
4290c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn            }
4300c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn        }
431764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    }
432764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
433764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    private void testTokenMayBeDrawnLocked() {
434764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        // See if any windows have been drawn, so they (and others
435764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        // associated with them) can now be shown.
436ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner        final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens;
437ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner        final int NT = appTokens.size();
438764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        for (int i=0; i<NT; i++) {
439ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner            AppWindowToken wtoken = appTokens.get(i);
4406fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            final boolean allDrawn = wtoken.allDrawn;
4416fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            if (allDrawn != wtoken.mAppAnimator.allDrawn) {
4426fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                wtoken.mAppAnimator.allDrawn = allDrawn;
4436fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                if (allDrawn) {
4446fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                    // The token has now changed state to having all
4456fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                    // windows shown...  what to do, what to do?
4466fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                    if (wtoken.mAppAnimator.freezingScreen) {
4476fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        wtoken.mAppAnimator.showAllWindowsLocked();
4486fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        mService.unsetAppFreezingScreenLocked(wtoken, false, true);
4496fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        if (WindowManagerService.DEBUG_ORIENTATION) Slog.i(TAG,
4506fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                                "Setting mOrientationChangeComplete=true because wtoken "
4516fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                                + wtoken + " numInteresting=" + wtoken.numInterestingWindows
4526fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                                + " numDrawn=" + wtoken.numDrawnWindows);
4536fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        // This will set mOrientationChangeComplete and cause a pass through layout.
4546fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
4556fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                    } else {
4566fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        mPendingLayoutChanges |= PhoneWindowManager.FINISH_LAYOUT_REDO_ANIM;
4576fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
4586fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                            mService.debugLayoutRepeats("testTokenMayBeDrawnLocked",
4596fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                                mPendingLayoutChanges);
4606fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        }
461764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
4626fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        // We can now show all of the drawn windows!
4636fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        if (!mService.mOpeningApps.contains(wtoken)) {
4646fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                            mAnimating |= wtoken.mAppAnimator.showAllWindowsLocked();
4656fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        }
466764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    }
467764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                }
468764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
469764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        }
470764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    }
471764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
472764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    private void performAnimationsLocked() {
47301cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner        mInner.mForceHiding = false;
474764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
475764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        updateWindowsAndWallpaperLocked();
4764d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner        if ((mPendingLayoutChanges & WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER) != 0) {
4774d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner            mPendingActions |= WALLPAPER_ACTION_PENDING;
4784d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner        }
479764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
4806fbda63e68513ece4409dac845588711ab25c39dCraig Mautner        testTokenMayBeDrawnLocked();
481764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    }
482764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
4831caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    // TODO(cmautner): Change the following comment when no longer locked on mWindowMap */
4841caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    /** Locked on mService.mWindowMap and this. */
4851caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner    private void animateLocked() {
486bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner        mPendingLayoutChanges = 0;
487764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mCurrentTime = SystemClock.uptimeMillis();
488a608b882327fbb393bde3854953cd322a6fea675Craig Mautner        mBulkUpdateParams = 0;
489198e564c9a66010cfe93e0b1a75f84d696bda494Chet Haase        boolean wasAnimating = mAnimating;
4907d8df3905d294127cc58100912a57c816bfb2502Craig Mautner        mAnimating = false;
4917d8df3905d294127cc58100912a57c816bfb2502Craig Mautner        if (WindowManagerService.DEBUG_WINDOW_TRACE) {
4927d8df3905d294127cc58100912a57c816bfb2502Craig Mautner            Slog.i(TAG, "!!! animate: entry time=" + mCurrentTime);
4937d8df3905d294127cc58100912a57c816bfb2502Craig Mautner        }
494764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
495764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        // Update animations of all applications, including those
496764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        // associated with exiting/removed apps
497764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        Surface.openTransaction();
498764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
499764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        try {
500764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            updateWindowsAppsAndRotationAnimationsLocked();
501764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            performAnimationsLocked();
502764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
503764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            // THIRD LOOP: Update the surfaces of all windows.
504764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
505764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            if (mScreenRotationAnimation != null) {
506764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                mScreenRotationAnimation.updateSurfaces();
507764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
508764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
5097358fbfeb2febb60085067fcacc192f429b06545Craig Mautner            final int N = mWinAnimators.size();
5107358fbfeb2febb60085067fcacc192f429b06545Craig Mautner            for (int i = 0; i < N; i++) {
5110fa77c1e0fc218040efc570936e988dbeece399cCraig Mautner                mWinAnimators.get(i).prepareSurfaceLocked(true);
512764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
513764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
5146af9b92b75c820661ea995a98898395f22871498Craig Mautner            if (mDimParams != null) {
5156af9b92b75c820661ea995a98898395f22871498Craig Mautner                mDimAnimator.updateParameters(mContext.getResources(), mDimParams, mCurrentTime);
5166af9b92b75c820661ea995a98898395f22871498Craig Mautner            }
517d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner            if (mDimAnimator != null && mDimAnimator.mDimShown) {
518f8d4fbb9c87201350534861c4d988e63691fe24fCraig Mautner                mAnimating |= mDimAnimator.updateSurface(isDimming(), mCurrentTime,
5196af9b92b75c820661ea995a98898395f22871498Craig Mautner                        !mService.okToDisplay());
520764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
521764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
522764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            if (mService.mBlackFrame != null) {
523764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                if (mScreenRotationAnimation != null) {
524764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    mService.mBlackFrame.setMatrix(
525764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                            mScreenRotationAnimation.getEnterTransformation().getMatrix());
526764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                } else {
527764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                    mService.mBlackFrame.clearMatrix();
528764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                }
529764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            }
5307358fbfeb2febb60085067fcacc192f429b06545Craig Mautner
5317358fbfeb2febb60085067fcacc192f429b06545Craig Mautner            if (mService.mWatermark != null) {
5327358fbfeb2febb60085067fcacc192f429b06545Craig Mautner                mService.mWatermark.drawIfNeeded();
5337358fbfeb2febb60085067fcacc192f429b06545Craig Mautner            }
534764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        } catch (RuntimeException e) {
535764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            Log.wtf(TAG, "Unhandled exception in Window Manager", e);
536764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        } finally {
537764983d16925daeeba3f29fd1f844187655d1386Craig Mautner            Surface.closeTransaction();
538764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        }
539c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner
54001cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner        if (mBulkUpdateParams != 0 || mPendingLayoutChanges != 0) {
54101cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner            final WindowManagerService.AnimatorToLayoutParams animToLayout = mService.mAnimToLayout;
54201cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner            synchronized (animToLayout) {
54301cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner                animToLayout.mBulkUpdateParams = mBulkUpdateParams;
54401cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner                animToLayout.mPendingLayoutChanges = mPendingLayoutChanges;
54501cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner                animToLayout.mWindowDetachedWallpaper = mWindowDetachedWallpaper;
5469e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner                mService.setAnimatorParametersLocked();
54701cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner            }
54801cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner        }
5497d8df3905d294127cc58100912a57c816bfb2502Craig Mautner
5507d8df3905d294127cc58100912a57c816bfb2502Craig Mautner        if (mAnimating) {
5511caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            synchronized (mLayoutToAnim) {
5521caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner                scheduleAnimationLocked();
5531caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner            }
554198e564c9a66010cfe93e0b1a75f84d696bda494Chet Haase        } else if (wasAnimating) {
555198e564c9a66010cfe93e0b1a75f84d696bda494Chet Haase            mService.requestTraversalLocked();
5567d8df3905d294127cc58100912a57c816bfb2502Craig Mautner        }
5577d8df3905d294127cc58100912a57c816bfb2502Craig Mautner        if (WindowManagerService.DEBUG_WINDOW_TRACE) {
5587d8df3905d294127cc58100912a57c816bfb2502Craig Mautner            Slog.i(TAG, "!!! animate: exit mAnimating=" + mAnimating
5597d8df3905d294127cc58100912a57c816bfb2502Craig Mautner                + " mBulkUpdateParams=" + Integer.toHexString(mBulkUpdateParams)
5607d8df3905d294127cc58100912a57c816bfb2502Craig Mautner                + " mPendingLayoutChanges=" + Integer.toHexString(mPendingLayoutChanges));
5617d8df3905d294127cc58100912a57c816bfb2502Craig Mautner        }
562764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    }
563764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
564764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    WindowState mCurrentFocus;
565d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner    void setCurrentFocus(final WindowState currentFocus) {
566764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mCurrentFocus = currentFocus;
567764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    }
568764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
569764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    void setDisplayDimensions(final int curWidth, final int curHeight,
570764983d16925daeeba3f29fd1f844187655d1386Craig Mautner                        final int appWidth, final int appHeight) {
571764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mDw = curWidth;
572764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mDh = curHeight;
573764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mInnerDw = appWidth;
574764983d16925daeeba3f29fd1f844187655d1386Craig Mautner        mInnerDh = appHeight;
575764983d16925daeeba3f29fd1f844187655d1386Craig Mautner    }
576764983d16925daeeba3f29fd1f844187655d1386Craig Mautner
577d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner    void startDimming(final WindowStateAnimator winAnimator, final float target,
578d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner                      final int width, final int height) {
579d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner        if (mDimAnimator == null) {
580d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner            mDimAnimator = new DimAnimator(mService.mFxSession);
581d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner        }
582067ca32a526113bdae8756cda0369883f8227199Craig Mautner        // Only set dim params on the highest dimmed layer.
583067ca32a526113bdae8756cda0369883f8227199Craig Mautner        final WindowStateAnimator dimWinAnimator = mDimParams == null
584067ca32a526113bdae8756cda0369883f8227199Craig Mautner                ? null : mDimParams.mDimWinAnimator;
585067ca32a526113bdae8756cda0369883f8227199Craig Mautner        // Don't turn on for an unshown surface, or for any layer but the highest dimmed one.
586067ca32a526113bdae8756cda0369883f8227199Craig Mautner        if (winAnimator.mSurfaceShown &&
587067ca32a526113bdae8756cda0369883f8227199Craig Mautner                (dimWinAnimator == null || !dimWinAnimator.mSurfaceShown
588067ca32a526113bdae8756cda0369883f8227199Craig Mautner                || dimWinAnimator.mAnimLayer < winAnimator.mAnimLayer)) {
589067ca32a526113bdae8756cda0369883f8227199Craig Mautner            mService.mH.sendMessage(mService.mH.obtainMessage(SET_DIM_PARAMETERS,
590067ca32a526113bdae8756cda0369883f8227199Craig Mautner                    new DimAnimator.Parameters(winAnimator, width, height, target)));
591067ca32a526113bdae8756cda0369883f8227199Craig Mautner        }
592d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner    }
593d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner
594d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner    // TODO(cmautner): Move into Handler
595d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner    void stopDimming() {
596d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner        mService.mH.sendMessage(mService.mH.obtainMessage(SET_DIM_PARAMETERS, null));
597d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner    }
598d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner
599f8d4fbb9c87201350534861c4d988e63691fe24fCraig Mautner    boolean isDimming() {
600f8d4fbb9c87201350534861c4d988e63691fe24fCraig Mautner        return mDimParams != null;
601f8d4fbb9c87201350534861c4d988e63691fe24fCraig Mautner    }
602f8d4fbb9c87201350534861c4d988e63691fe24fCraig Mautner
603acafd19c5ea05a8d465f97204f8d63468bdaa2a4Craig Mautner    boolean isDimming(final WindowStateAnimator winAnimator) {
604acafd19c5ea05a8d465f97204f8d63468bdaa2a4Craig Mautner        return mDimParams != null && mDimParams.mDimWinAnimator == winAnimator;
605acafd19c5ea05a8d465f97204f8d63468bdaa2a4Craig Mautner    }
606acafd19c5ea05a8d465f97204f8d63468bdaa2a4Craig Mautner
607e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner    public void dump(PrintWriter pw, String prefix, boolean dumpAll) {
6086fbda63e68513ece4409dac845588711ab25c39dCraig Mautner        if (dumpAll) {
6096fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            if (mWindowDetachedWallpaper != null) {
6106fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                pw.print(prefix); pw.print("mWindowDetachedWallpaper=");
6116fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        pw.println(mWindowDetachedWallpaper);
6126fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            }
6136fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            pw.print(prefix); pw.print("mAnimTransactionSequence=");
6146fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                    pw.println(mAnimTransactionSequence);
6156fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            if (mWindowAnimationBackgroundSurface != null) {
6166fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                pw.print(prefix); pw.print("mWindowAnimationBackgroundSurface:");
6176fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                        mWindowAnimationBackgroundSurface.printTo(prefix + "  ", pw);
6186fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            }
6196fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            if (mDimAnimator != null) {
6206fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                pw.print(prefix); pw.print("mDimAnimator:");
6216fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                mDimAnimator.printTo(prefix + "  ", pw);
6226fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            } else {
6236fbda63e68513ece4409dac845588711ab25c39dCraig Mautner                pw.print(prefix); pw.print("no DimAnimator ");
6246fbda63e68513ece4409dac845588711ab25c39dCraig Mautner            }
625d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner        }
626e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner    }
627bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner
628bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner    static class SetAnimationParams {
629bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner        final WindowStateAnimator mWinAnimator;
630bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner        final Animation mAnimation;
631bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner        final int mAnimDw;
632bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner        final int mAnimDh;
633bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner        public SetAnimationParams(final WindowStateAnimator winAnimator,
634bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner                                  final Animation animation, final int animDw, final int animDh) {
635bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner            mWinAnimator = winAnimator;
636bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner            mAnimation = animation;
637bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner            mAnimDw = animDw;
638bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner            mAnimDh = animDh;
639bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner        }
640bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner    }
6414d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner
6424d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner    synchronized void clearPendingActions() {
6434d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner        mPendingActions = 0;
6444d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner    }
645764983d16925daeeba3f29fd1f844187655d1386Craig Mautner}
646