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