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; 112639da500e3d53ea3a17d888b1c0001d043c6b98Craig Mautnerimport static com.android.server.wm.WindowManagerService.LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE; 12d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner 13711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautnerimport static com.android.server.wm.WindowManagerService.H.UPDATE_ANIM_PARAMETERS; 14a608b882327fbb393bde3854953cd322a6fea675Craig Mautner 15764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.content.Context; 1698129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackbornimport android.os.Debug; 17764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.os.SystemClock; 18764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.util.Log; 19764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.util.Slog; 20a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautnerimport android.util.SparseArray; 2176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautnerimport android.util.SparseIntArray; 22529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackbornimport android.util.TimeUtils; 236881a10557acf3b0270de54799d6f19437acf584Craig Mautnerimport android.view.Display; 24764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.view.Surface; 25764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.view.WindowManagerPolicy; 26764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.view.animation.Animation; 27764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 28322e40315609acd5a608440bc469d873e09559caCraig Mautnerimport com.android.server.wm.WindowManagerService.AppWindowAnimParams; 29529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackbornimport com.android.server.wm.WindowManagerService.LayoutFields; 30711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautnerimport com.android.server.wm.WindowManagerService.LayoutToAnimatorParams; 31764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 32e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautnerimport java.io.PrintWriter; 330c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackbornimport java.util.ArrayList; 34e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner 35764983d16925daeeba3f29fd1f844187655d1386Craig Mautner/** 36764983d16925daeeba3f29fd1f844187655d1386Craig Mautner * Singleton class that carries out the animations and Surface operations in a separate task 37764983d16925daeeba3f29fd1f844187655d1386Craig Mautner * on behalf of WindowManagerService. 38764983d16925daeeba3f29fd1f844187655d1386Craig Mautner */ 39764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerpublic class WindowAnimator { 40bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner private static final String TAG = "WindowAnimator"; 41764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 42764983d16925daeeba3f29fd1f844187655d1386Craig Mautner final WindowManagerService mService; 43764983d16925daeeba3f29fd1f844187655d1386Craig Mautner final Context mContext; 44764983d16925daeeba3f29fd1f844187655d1386Craig Mautner final WindowManagerPolicy mPolicy; 45764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 46764983d16925daeeba3f29fd1f844187655d1386Craig Mautner boolean mAnimating; 4701cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner 481caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner final Runnable mAnimationRunnable; 491caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner 50764983d16925daeeba3f29fd1f844187655d1386Craig Mautner int mAdjResult; 51764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 5276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner // Layout changes for individual Displays. Indexed by displayId. 5376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner SparseIntArray mPendingLayoutChanges = new SparseIntArray(); 54764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 5569b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner // TODO: Assign these from each iteration through DisplayContent. Only valid between loops. 56764983d16925daeeba3f29fd1f844187655d1386Craig Mautner /** Overall window dimensions */ 57764983d16925daeeba3f29fd1f844187655d1386Craig Mautner int mDw, mDh; 58764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 59764983d16925daeeba3f29fd1f844187655d1386Craig Mautner /** Interior window dimensions */ 60764983d16925daeeba3f29fd1f844187655d1386Craig Mautner int mInnerDw, mInnerDh; 61764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 62764983d16925daeeba3f29fd1f844187655d1386Craig Mautner /** Time of current animation step. Reset on each iteration */ 63764983d16925daeeba3f29fd1f844187655d1386Craig Mautner long mCurrentTime; 64764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 65764983d16925daeeba3f29fd1f844187655d1386Craig Mautner /** Skip repeated AppWindowTokens initialization. Note that AppWindowsToken's version of this 66764983d16925daeeba3f29fd1f844187655d1386Craig Mautner * is a long initialized to Long.MIN_VALUE so that it doesn't match this value on startup. */ 676fbda63e68513ece4409dac845588711ab25c39dCraig Mautner private int mAnimTransactionSequence; 68764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 69e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner // Window currently running an animation that has requested it be detached 70e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner // from the wallpaper. This means we need to ensure the wallpaper is 71e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner // visible behind it in case it animates in a way that would allow it to be 7201cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner // seen. If multiple windows satisfy this, use the lowest window. 73e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner WindowState mWindowDetachedWallpaper = null; 7401cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner 75a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn WindowStateAnimator mUniverseBackground = null; 76a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn int mAboveUniverseLayer = 0; 77a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn 78a608b882327fbb393bde3854953cd322a6fea675Craig Mautner int mBulkUpdateParams = 0; 79a608b882327fbb393bde3854953cd322a6fea675Craig Mautner 80a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner SparseArray<DisplayContentsAnimator> mDisplayContentsAnimators = 81a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner new SparseArray<WindowAnimator.DisplayContentsAnimator>(); 82d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner 834d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner static final int WALLPAPER_ACTION_PENDING = 1; 844d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner int mPendingActions; 854d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner 861caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner WindowState mWallpaperTarget = null; 87918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner AppWindowAnimator mWpAppAnimator = null; 88918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner WindowState mLowerWallpaperTarget = null; 89918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner WindowState mUpperWallpaperTarget = null; 90918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner 91322e40315609acd5a608440bc469d873e09559caCraig Mautner ArrayList<AppWindowAnimator> mAppAnimators = new ArrayList<AppWindowAnimator>(); 92322e40315609acd5a608440bc469d873e09559caCraig Mautner 93918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); 94918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner 95918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner /** Parameters being passed from this into mService. */ 96918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner static class AnimatorToLayoutParams { 97918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner boolean mUpdateQueued; 98918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner int mBulkUpdateParams; 9976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner SparseIntArray mPendingLayoutChanges; 100918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner WindowState mWindowDetachedWallpaper; 101918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner } 102918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner /** Do not modify unless holding mService.mWindowMap or this and mAnimToLayout in that order */ 103711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner final AnimatorToLayoutParams mAnimToLayout = new AnimatorToLayoutParams(); 104711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner 105b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner boolean mInitialized = false; 106b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner 107178af5948d71c841278081c712506f7a7fca34b9Craig Mautner // forceHiding states. 108178af5948d71c841278081c712506f7a7fca34b9Craig Mautner static final int KEYGUARD_NOT_SHOWN = 0; 109178af5948d71c841278081c712506f7a7fca34b9Craig Mautner static final int KEYGUARD_ANIMATING_IN = 1; 110178af5948d71c841278081c712506f7a7fca34b9Craig Mautner static final int KEYGUARD_SHOWN = 2; 111178af5948d71c841278081c712506f7a7fca34b9Craig Mautner static final int KEYGUARD_ANIMATING_OUT = 3; 112178af5948d71c841278081c712506f7a7fca34b9Craig Mautner int mForceHiding = KEYGUARD_NOT_SHOWN; 113178af5948d71c841278081c712506f7a7fca34b9Craig Mautner 114178af5948d71c841278081c712506f7a7fca34b9Craig Mautner private String forceHidingToString() { 115178af5948d71c841278081c712506f7a7fca34b9Craig Mautner switch (mForceHiding) { 116178af5948d71c841278081c712506f7a7fca34b9Craig Mautner case KEYGUARD_NOT_SHOWN: return "KEYGUARD_NOT_SHOWN"; 117178af5948d71c841278081c712506f7a7fca34b9Craig Mautner case KEYGUARD_ANIMATING_IN: return "KEYGUARD_ANIMATING_IN"; 118178af5948d71c841278081c712506f7a7fca34b9Craig Mautner case KEYGUARD_SHOWN: return "KEYGUARD_SHOWN"; 119178af5948d71c841278081c712506f7a7fca34b9Craig Mautner case KEYGUARD_ANIMATING_OUT:return "KEYGUARD_ANIMATING_OUT"; 120178af5948d71c841278081c712506f7a7fca34b9Craig Mautner default: return "KEYGUARD STATE UNKNOWN " + mForceHiding; 121178af5948d71c841278081c712506f7a7fca34b9Craig Mautner } 122178af5948d71c841278081c712506f7a7fca34b9Craig Mautner } 123178af5948d71c841278081c712506f7a7fca34b9Craig Mautner 124918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner WindowAnimator(final WindowManagerService service) { 125764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mService = service; 126918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner mContext = service.mContext; 127918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner mPolicy = service.mPolicy; 1281caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner 1291caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner mAnimationRunnable = new Runnable() { 1301caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner @Override 1311caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner public void run() { 1321caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner // TODO(cmautner): When full isolation is achieved for animation, the first lock 1331caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner // goes away and only the WindowAnimator.this remains. 1341caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner synchronized(mService.mWindowMap) { 1351caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner synchronized(WindowAnimator.this) { 1361caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner copyLayoutToAnimParamsLocked(); 1371caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner animateLocked(); 1381caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 1391caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 1401caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 1411caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner }; 142b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner } 1439e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner 144a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner void addDisplayLocked(final int displayId) { 145ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner // Create the DisplayContentsAnimator object by retrieving it. 146ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner getDisplayContentsAnimatorLocked(displayId); 147a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (displayId == Display.DEFAULT_DISPLAY) { 148a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mInitialized = true; 149a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 150a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 151a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 152a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner void removeDisplayLocked(final int displayId) { 153d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner final DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId); 154d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (displayAnimator != null) { 155d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (displayAnimator.mWindowAnimationBackgroundSurface != null) { 156d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner displayAnimator.mWindowAnimationBackgroundSurface.kill(); 157d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner displayAnimator.mWindowAnimationBackgroundSurface = null; 158d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner } 159d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (displayAnimator.mScreenRotationAnimation != null) { 160d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner displayAnimator.mScreenRotationAnimation.kill(); 161d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner displayAnimator.mScreenRotationAnimation = null; 162d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner } 163d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (displayAnimator.mDimAnimator != null) { 164d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner displayAnimator.mDimAnimator.kill(); 165d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner displayAnimator.mDimAnimator = null; 166d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner } 167d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner } 168d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner 169a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mDisplayContentsAnimators.delete(displayId); 1701caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 1711caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner 172711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner /** Locked on mAnimToLayout */ 173711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner void updateAnimToLayoutLocked() { 174711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner final AnimatorToLayoutParams animToLayout = mAnimToLayout; 175711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner synchronized (animToLayout) { 176711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner animToLayout.mBulkUpdateParams = mBulkUpdateParams; 17776a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner animToLayout.mPendingLayoutChanges = mPendingLayoutChanges.clone(); 178711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner animToLayout.mWindowDetachedWallpaper = mWindowDetachedWallpaper; 179711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner 180711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner if (!animToLayout.mUpdateQueued) { 181711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner animToLayout.mUpdateQueued = true; 182711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner mService.mH.sendMessage(mService.mH.obtainMessage(UPDATE_ANIM_PARAMETERS)); 183711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner } 184711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner } 185711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner } 186711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner 1871caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner /** Copy all WindowManagerService params into local params here. Locked on 'this'. */ 1881caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner private void copyLayoutToAnimParamsLocked() { 189711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner final LayoutToAnimatorParams layoutToAnim = mService.mLayoutToAnim; 1901caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner synchronized(layoutToAnim) { 1911caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner layoutToAnim.mAnimationScheduled = false; 1921caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner 193322e40315609acd5a608440bc469d873e09559caCraig Mautner if (!layoutToAnim.mParamsModified) { 194322e40315609acd5a608440bc469d873e09559caCraig Mautner return; 195322e40315609acd5a608440bc469d873e09559caCraig Mautner } 196322e40315609acd5a608440bc469d873e09559caCraig Mautner layoutToAnim.mParamsModified = false; 197322e40315609acd5a608440bc469d873e09559caCraig Mautner 198918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner if ((layoutToAnim.mChanges & LayoutToAnimatorParams.WALLPAPER_TOKENS_CHANGED) != 0) { 199918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner layoutToAnim.mChanges &= ~LayoutToAnimatorParams.WALLPAPER_TOKENS_CHANGED; 200918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner mWallpaperTokens = new ArrayList<WindowToken>(layoutToAnim.mWallpaperTokens); 201918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner } 202918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner 203529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (WindowManagerService.DEBUG_WALLPAPER_LIGHT) { 204529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mWallpaperTarget != layoutToAnim.mWallpaperTarget 205529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn || mLowerWallpaperTarget != layoutToAnim.mLowerWallpaperTarget 206529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn || mUpperWallpaperTarget != layoutToAnim.mUpperWallpaperTarget) { 20798129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn Slog.d(TAG, "Pulling anim wallpaper: target=" + layoutToAnim.mWallpaperTarget 20898129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn + " lower=" + layoutToAnim.mLowerWallpaperTarget + " upper=" 20998129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn + layoutToAnim.mUpperWallpaperTarget); 210529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 211529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 2121caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner mWallpaperTarget = layoutToAnim.mWallpaperTarget; 213918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner mWpAppAnimator = mWallpaperTarget == null 214918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner ? null : mWallpaperTarget.mAppToken == null 215918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner ? null : mWallpaperTarget.mAppToken.mAppAnimator; 216918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner mLowerWallpaperTarget = layoutToAnim.mLowerWallpaperTarget; 217918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner mUpperWallpaperTarget = layoutToAnim.mUpperWallpaperTarget; 218a76fdb7713d900763cff090557a10d3942b9b3caCraig Mautner 219a76fdb7713d900763cff090557a10d3942b9b3caCraig Mautner // Set the new DimAnimator params. 220a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final int numDisplays = mDisplayContentsAnimators.size(); 221a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner for (int i = 0; i < numDisplays; i++) { 222a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final int displayId = mDisplayContentsAnimators.keyAt(i); 223a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); 224a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 225a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mWinAnimators.clear(); 226a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final WinAnimatorList winAnimators = layoutToAnim.mWinAnimatorLists.get(displayId); 227a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (winAnimators != null) { 228a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mWinAnimators.addAll(winAnimators); 229a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 230a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 231a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DimAnimator.Parameters dimParams = layoutToAnim.mDimParams.get(displayId); 232a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (dimParams == null) { 233a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mDimParams = null; 234a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } else { 235a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final WindowStateAnimator newWinAnimator = dimParams.mDimWinAnimator; 236a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 237a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner // Only set dim params on the highest dimmed layer. 238a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final WindowStateAnimator existingDimWinAnimator = 239a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mDimParams == null ? 240a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner null : displayAnimator.mDimParams.mDimWinAnimator; 241a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner // Don't turn on for an unshown surface, or for any layer but the highest 242a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner // dimmed layer. 243a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (newWinAnimator.mSurfaceShown && (existingDimWinAnimator == null 244a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner || !existingDimWinAnimator.mSurfaceShown 245a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner || existingDimWinAnimator.mAnimLayer < newWinAnimator.mAnimLayer)) { 246a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mDimParams = new DimAnimator.Parameters(dimParams); 247a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 248a76fdb7713d900763cff090557a10d3942b9b3caCraig Mautner } 249a76fdb7713d900763cff090557a10d3942b9b3caCraig Mautner } 250322e40315609acd5a608440bc469d873e09559caCraig Mautner 251322e40315609acd5a608440bc469d873e09559caCraig Mautner mAppAnimators.clear(); 252322e40315609acd5a608440bc469d873e09559caCraig Mautner final int N = layoutToAnim.mAppWindowAnimParams.size(); 253322e40315609acd5a608440bc469d873e09559caCraig Mautner for (int i = 0; i < N; i++) { 254322e40315609acd5a608440bc469d873e09559caCraig Mautner final AppWindowAnimParams params = layoutToAnim.mAppWindowAnimParams.get(i); 255322e40315609acd5a608440bc469d873e09559caCraig Mautner AppWindowAnimator appAnimator = params.mAppAnimator; 256bea12bdc2e6d2b1158c1faa58a8197d5e971a817Craig Mautner appAnimator.mAllAppWinAnimators.clear(); 257bea12bdc2e6d2b1158c1faa58a8197d5e971a817Craig Mautner appAnimator.mAllAppWinAnimators.addAll(params.mWinAnimators); 258322e40315609acd5a608440bc469d873e09559caCraig Mautner mAppAnimators.add(appAnimator); 259322e40315609acd5a608440bc469d873e09559caCraig Mautner } 2601caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 2611caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 2621caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner 26398129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn void hideWallpapersLocked(final WindowState w, boolean fromAnimator) { 26498129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // There is an issue where this function can be called either from 26598129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // the animation or the layout side of the window manager. The problem 26698129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // is that if it is called from the layout side, we may not yet have 26798129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // propagated the current layout wallpaper state over into the animation 26898129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // state. If that is the case, we can do bad things like hide the 26998129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // wallpaper when we had just made it shown because the animation side 27098129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // doesn't yet see that there is now a wallpaper target. As a temporary 27198129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // work-around, we tell the function here which side of the window manager 27298129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn // is calling so it can use the right state. 27398129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn if (fromAnimator) { 27498129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn hideWallpapersLocked(w, mWallpaperTarget, mLowerWallpaperTarget, mWallpaperTokens); 27598129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn } else { 27698129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn hideWallpapersLocked(w, mService.mWallpaperTarget, 27798129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn mService.mLowerWallpaperTarget, mService.mWallpaperTokens); 27898129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn } 27998129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn } 28098129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn 28198129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn void hideWallpapersLocked(final WindowState w, final WindowState wallpaperTarget, 28298129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn final WindowState lowerWallpaperTarget, final ArrayList<WindowToken> wallpaperTokens) { 28398129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn if ((wallpaperTarget == w && lowerWallpaperTarget == null) || wallpaperTarget == null) { 28498129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn final int numTokens = wallpaperTokens.size(); 285918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner for (int i = numTokens - 1; i >= 0; i--) { 28698129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn final WindowToken token = wallpaperTokens.get(i); 287918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner final int numWindows = token.windows.size(); 288918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner for (int j = numWindows - 1; j >= 0; j--) { 289918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner final WindowState wallpaper = token.windows.get(j); 290b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner final WindowStateAnimator winAnimator = wallpaper.mWinAnimator; 291b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner if (!winAnimator.mLastHidden) { 292b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner winAnimator.hide(); 293507a2ee12b6d1d683e4a5806804c472b3fe32e61Craig Mautner mService.dispatchWallpaperVisibility(wallpaper, false); 29476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(Display.DEFAULT_DISPLAY, 29576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); 296b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner } 297b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner } 298ef03a7f441cf0cbef5a5f7fafb58a7d5aea7ef52Dianne Hackborn if (WindowManagerService.DEBUG_WALLPAPER_LIGHT && !token.hidden) Slog.d(TAG, 2992ea9bae7121f1df5461437d7d08fa550cdf6e0b0Dianne Hackborn "Hiding wallpaper " + token + " from " + w 3002ea9bae7121f1df5461437d7d08fa550cdf6e0b0Dianne Hackborn + " target=" + wallpaperTarget + " lower=" + lowerWallpaperTarget 3012ea9bae7121f1df5461437d7d08fa550cdf6e0b0Dianne Hackborn + "\n" + Debug.getCallers(5, " ")); 302b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner token.hidden = true; 3030afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner } 3040afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner } 3050afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner } 3060afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner 307a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private void updateAppWindowsLocked() { 308764983d16925daeeba3f29fd1f844187655d1386Craig Mautner int i; 309322e40315609acd5a608440bc469d873e09559caCraig Mautner final int NAT = mAppAnimators.size(); 310764983d16925daeeba3f29fd1f844187655d1386Craig Mautner for (i=0; i<NAT; i++) { 311322e40315609acd5a608440bc469d873e09559caCraig Mautner final AppWindowAnimator appAnimator = mAppAnimators.get(i); 312594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner final boolean wasAnimating = appAnimator.animation != null 313fbf378c736a973b8edaf1fc4c187d11dc0f5e291Craig Mautner && appAnimator.animation != AppWindowAnimator.sDummyAnimation; 314594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner if (appAnimator.stepAnimationLocked(mCurrentTime, mInnerDw, mInnerDh)) { 315764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mAnimating = true; 316bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner } else if (wasAnimating) { 317bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner // stopped animating, do one more pass through the layout 31876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setAppLayoutChanges(appAnimator, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, 31976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner "appToken " + appAnimator.mAppToken + " done"); 32083339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG, 32183339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner "updateWindowsApps...: done animating " + appAnimator.mAppToken); 322bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner } 323bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner } 324a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 325bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner final int NEAT = mService.mExitingAppTokens.size(); 326bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner for (i=0; i<NEAT; i++) { 327e4d8a5dd42070d919dbd774f24c6684ecf1e350eCraig Mautner final AppWindowAnimator appAnimator = mService.mExitingAppTokens.get(i).mAppAnimator; 328594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner final boolean wasAnimating = appAnimator.animation != null 329fbf378c736a973b8edaf1fc4c187d11dc0f5e291Craig Mautner && appAnimator.animation != AppWindowAnimator.sDummyAnimation; 330594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner if (appAnimator.stepAnimationLocked(mCurrentTime, mInnerDw, mInnerDh)) { 331bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner mAnimating = true; 332bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner } else if (wasAnimating) { 333bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner // stopped animating, do one more pass through the layout 33476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setAppLayoutChanges(appAnimator, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, 33576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner "exiting appToken " + appAnimator.mAppToken + " done"); 33683339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG, 33783339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner "updateWindowsApps...: done animating exiting " + appAnimator.mAppToken); 338764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 339764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 340764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 341764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 342a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private void updateWindowsLocked(final int displayId) { 3436fbda63e68513ece4409dac845588711ab25c39dCraig Mautner ++mAnimTransactionSequence; 344764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 345a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final WinAnimatorList winAnimatorList = 346a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner getDisplayContentsAnimatorLocked(displayId).mWinAnimators; 3470c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn ArrayList<WindowStateAnimator> unForceHiding = null; 3480c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn boolean wallpaperInUnForceHiding = false; 349178af5948d71c841278081c712506f7a7fca34b9Craig Mautner mForceHiding = KEYGUARD_NOT_SHOWN; 3504bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner 35159c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner for (int i = winAnimatorList.size() - 1; i >= 0; i--) { 35259c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner WindowStateAnimator winAnimator = winAnimatorList.get(i); 35301cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner WindowState win = winAnimator.mWin; 354bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner final int flags = winAnimator.mAttrFlags; 355764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 356c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner if (winAnimator.mSurface != null) { 357a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner final boolean wasAnimating = winAnimator.mWasAnimating; 358a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner final boolean nowAnimating = winAnimator.stepAnimationLocked(mCurrentTime); 359764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 360764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (WindowManagerService.DEBUG_WALLPAPER) { 361bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner Slog.v(TAG, win + ": wasAnimating=" + wasAnimating + 362764983d16925daeeba3f29fd1f844187655d1386Craig Mautner ", nowAnimating=" + nowAnimating); 363764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 364764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 365918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner if (wasAnimating && !winAnimator.mAnimating && mWallpaperTarget == win) { 366a608b882327fbb393bde3854953cd322a6fea675Craig Mautner mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; 36776a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(Display.DEFAULT_DISPLAY, 36876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); 369cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 370d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 2", 37176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mPendingLayoutChanges.get(Display.DEFAULT_DISPLAY)); 372cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 373764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 374764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 375bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner if (mPolicy.doesForceHide(win, win.mAttrs)) { 376764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (!wasAnimating && nowAnimating) { 37783339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner if (WindowManagerService.DEBUG_ANIM || 37883339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, 37983339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner "Animation started that could impact force hide: " + win); 380d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mBulkUpdateParams |= SET_FORCE_HIDING_CHANGED; 38176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(displayId, 38276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); 383cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 384d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 3", 38576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mPendingLayoutChanges.get(displayId)); 386cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 387764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mService.mFocusMayChange = true; 388ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn } 3894bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner if (win.isReadyForDisplay()) { 3904bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner if (nowAnimating) { 3914bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner if (winAnimator.mAnimationIsEntrance) { 392178af5948d71c841278081c712506f7a7fca34b9Craig Mautner mForceHiding = KEYGUARD_ANIMATING_IN; 3934bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner } else { 394178af5948d71c841278081c712506f7a7fca34b9Craig Mautner mForceHiding = KEYGUARD_ANIMATING_OUT; 3954bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner } 3964bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner } else { 397178af5948d71c841278081c712506f7a7fca34b9Craig Mautner mForceHiding = KEYGUARD_SHOWN; 3984bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner } 399764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 400ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, 401178af5948d71c841278081c712506f7a7fca34b9Craig Mautner "Force hide " + mForceHiding 402ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " hasSurface=" + win.mHasSurface 403ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " policyVis=" + win.mPolicyVisibility 404ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " destroying=" + win.mDestroying 405ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " attHidden=" + win.mAttachedHidden 406ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " vis=" + win.mViewVisibility 407ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " hidden=" + win.mRootToken.hidden 408ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " anim=" + win.mWinAnimator.mAnimation); 409bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner } else if (mPolicy.canBeForceHidden(win, win.mAttrs)) { 4104bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner final boolean hideWhenLocked = 4114bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner (winAnimator.mAttrFlags & FLAG_SHOW_WHEN_LOCKED) == 0; 412d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner final boolean changed; 413178af5948d71c841278081c712506f7a7fca34b9Craig Mautner if (((mForceHiding == KEYGUARD_ANIMATING_IN) 4144bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner && (!winAnimator.isAnimating() || hideWhenLocked)) 415178af5948d71c841278081c712506f7a7fca34b9Craig Mautner || ((mForceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) { 416bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner changed = win.hideLw(false, false); 417764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG, 418bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner "Now policy hidden: " + win); 419764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } else { 420bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner changed = win.showLw(false, false); 421764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG, 422bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner "Now policy shown: " + win); 423764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (changed) { 424d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner if ((mBulkUpdateParams & SET_FORCE_HIDING_CHANGED) != 0 425bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner && win.isVisibleNow() /*w.isReadyForDisplay()*/) { 4260c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn if (unForceHiding == null) { 4270c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn unForceHiding = new ArrayList<WindowStateAnimator>(); 4280c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn } 4290c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn unForceHiding.add(winAnimator); 43001cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner if ((flags & FLAG_SHOW_WALLPAPER) != 0) { 4310c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn wallpaperInUnForceHiding = true; 432764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 433764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 434bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner if (mCurrentFocus == null || mCurrentFocus.mLayer < win.mLayer) { 435764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // We are showing on to of the current 436764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // focus, so re-evaluate focus to make 437764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // sure it is correct. 438764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mService.mFocusMayChange = true; 439764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 440764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 441764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 44201cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner if (changed && (flags & FLAG_SHOW_WALLPAPER) != 0) { 443a608b882327fbb393bde3854953cd322a6fea675Craig Mautner mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; 44476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(Display.DEFAULT_DISPLAY, 44576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); 446cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 447d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 4", 44876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mPendingLayoutChanges.get(Display.DEFAULT_DISPLAY)); 449cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 450764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 451764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 452764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 453764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 454bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner final AppWindowToken atoken = win.mAppToken; 4556fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (winAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW) { 4566fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (atoken == null || atoken.allDrawn) { 4576fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (winAnimator.performShowLocked()) { 45876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mPendingLayoutChanges.put(displayId, 45976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM); 4606fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 4616fbda63e68513ece4409dac845588711ab25c39dCraig Mautner mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 5", 46276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mPendingLayoutChanges.get(displayId)); 463764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 464cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 465cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 466764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 467322e40315609acd5a608440bc469d873e09559caCraig Mautner final AppWindowAnimator appAnimator = winAnimator.mAppAnimator; 468594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner if (appAnimator != null && appAnimator.thumbnail != null) { 4696fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (appAnimator.thumbnailTransactionSeq != mAnimTransactionSequence) { 4706fbda63e68513ece4409dac845588711ab25c39dCraig Mautner appAnimator.thumbnailTransactionSeq = mAnimTransactionSequence; 471594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner appAnimator.thumbnailLayer = 0; 4728078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 473594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner if (appAnimator.thumbnailLayer < winAnimator.mAnimLayer) { 474594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner appAnimator.thumbnailLayer = winAnimator.mAnimLayer; 4758078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 4768078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 477764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } // end forall windows 4780c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn 479078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // If we have windows that are being show due to them no longer 480078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // being force-hidden, apply the appropriate animation to them. 481078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (unForceHiding != null) { 482078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner for (int i=unForceHiding.size()-1; i>=0; i--) { 483078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner Animation a = mPolicy.createForceHideEnterAnimation(wallpaperInUnForceHiding); 484078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (a != null) { 485078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner final WindowStateAnimator winAnimator = unForceHiding.get(i); 486078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner winAnimator.setAnimation(a); 487078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner winAnimator.mAnimationIsEntrance = true; 488078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 489078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 490078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 491078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 492078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 493a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private void updateWallpaperLocked(int displayId) { 494a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final DisplayContentsAnimator displayAnimator = 495a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner getDisplayContentsAnimatorLocked(displayId); 496a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final WinAnimatorList winAnimatorList = displayAnimator.mWinAnimators; 497078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner WindowStateAnimator windowAnimationBackground = null; 498078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner int windowAnimationBackgroundColor = 0; 499078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner WindowState detachedWallpaper = null; 500a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final DimSurface windowAnimationBackgroundSurface = 501a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mWindowAnimationBackgroundSurface; 502078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 50359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner for (int i = winAnimatorList.size() - 1; i >= 0; i--) { 50459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner WindowStateAnimator winAnimator = winAnimatorList.get(i); 505078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (winAnimator.mSurface == null) { 506078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner continue; 507078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 508078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 509078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner final int flags = winAnimator.mAttrFlags; 510078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner final WindowState win = winAnimator.mWin; 511078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 512078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // If this window is animating, make a note that we have 513078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // an animating window and take care of a request to run 514078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // a detached wallpaper animation. 515078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (winAnimator.mAnimating) { 516078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (winAnimator.mAnimation != null) { 517078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if ((flags & FLAG_SHOW_WALLPAPER) != 0 518078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner && winAnimator.mAnimation.getDetachWallpaper()) { 519078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner detachedWallpaper = win; 520078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 521078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner final int backgroundColor = winAnimator.mAnimation.getBackgroundColor(); 522078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (backgroundColor != 0) { 523078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (windowAnimationBackground == null || (winAnimator.mAnimLayer < 524078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner windowAnimationBackground.mAnimLayer)) { 525078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner windowAnimationBackground = winAnimator; 526078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner windowAnimationBackgroundColor = backgroundColor; 527078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 528078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 529078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 530078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner mAnimating = true; 531078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 532078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 533078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // If this window's app token is running a detached wallpaper 534078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // animation, make a note so we can ensure the wallpaper is 535078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // displayed behind it. 536322e40315609acd5a608440bc469d873e09559caCraig Mautner final AppWindowAnimator appAnimator = winAnimator.mAppAnimator; 537078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (appAnimator != null && appAnimator.animation != null 538078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner && appAnimator.animating) { 539078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if ((flags & FLAG_SHOW_WALLPAPER) != 0 540078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner && appAnimator.animation.getDetachWallpaper()) { 541078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner detachedWallpaper = win; 542078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 543078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 544078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner final int backgroundColor = appAnimator.animation.getBackgroundColor(); 545078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (backgroundColor != 0) { 546078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (windowAnimationBackground == null || (winAnimator.mAnimLayer < 547078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner windowAnimationBackground.mAnimLayer)) { 548078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner windowAnimationBackground = winAnimator; 549078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner windowAnimationBackgroundColor = backgroundColor; 550078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 551078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 552078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 553078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } // end forall windows 554078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 5559e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner if (mWindowDetachedWallpaper != detachedWallpaper) { 5569e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner if (WindowManagerService.DEBUG_WALLPAPER) Slog.v(TAG, 5579e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner "Detached wallpaper changed from " + mWindowDetachedWallpaper 5589e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner + " to " + detachedWallpaper); 5599e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner mWindowDetachedWallpaper = detachedWallpaper; 5609e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; 5619e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner } 5629e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner 5639e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner if (windowAnimationBackgroundColor != 0) { 5649e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner // If the window that wants black is the current wallpaper 5659e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner // target, then the black goes *below* the wallpaper so we 5669e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner // don't cause the wallpaper to suddenly disappear. 5679e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner int animLayer = windowAnimationBackground.mAnimLayer; 5689e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner WindowState win = windowAnimationBackground.mWin; 56959c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner if (mWallpaperTarget == win 570918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner || mLowerWallpaperTarget == win || mUpperWallpaperTarget == win) { 57159c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner final int N = winAnimatorList.size(); 5729e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner for (int i = 0; i < N; i++) { 57359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner WindowStateAnimator winAnimator = winAnimatorList.get(i); 574918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner if (winAnimator.mIsWallpaper) { 5759e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner animLayer = winAnimator.mAnimLayer; 5769e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner break; 5779e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner } 5789e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner } 5799e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner } 5809e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner 581d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (windowAnimationBackgroundSurface != null) { 582d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner windowAnimationBackgroundSurface.show(mDw, mDh, 583d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner animLayer - WindowManagerService.LAYER_OFFSET_DIM, 584d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner windowAnimationBackgroundColor); 585d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner } 5869e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner } else { 587d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (windowAnimationBackgroundSurface != null) { 588d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner windowAnimationBackgroundSurface.hide(); 589d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner } 5909e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner } 591764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 592764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 593764983d16925daeeba3f29fd1f844187655d1386Craig Mautner private void testTokenMayBeDrawnLocked() { 594764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // See if any windows have been drawn, so they (and others 595764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // associated with them) can now be shown. 596322e40315609acd5a608440bc469d873e09559caCraig Mautner final int NT = mAppAnimators.size(); 597764983d16925daeeba3f29fd1f844187655d1386Craig Mautner for (int i=0; i<NT; i++) { 598322e40315609acd5a608440bc469d873e09559caCraig Mautner AppWindowAnimator appAnimator = mAppAnimators.get(i); 599322e40315609acd5a608440bc469d873e09559caCraig Mautner AppWindowToken wtoken = appAnimator.mAppToken; 6006fbda63e68513ece4409dac845588711ab25c39dCraig Mautner final boolean allDrawn = wtoken.allDrawn; 601322e40315609acd5a608440bc469d873e09559caCraig Mautner if (allDrawn != appAnimator.allDrawn) { 602322e40315609acd5a608440bc469d873e09559caCraig Mautner appAnimator.allDrawn = allDrawn; 6036fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (allDrawn) { 6046fbda63e68513ece4409dac845588711ab25c39dCraig Mautner // The token has now changed state to having all 6056fbda63e68513ece4409dac845588711ab25c39dCraig Mautner // windows shown... what to do, what to do? 606322e40315609acd5a608440bc469d873e09559caCraig Mautner if (appAnimator.freezingScreen) { 607322e40315609acd5a608440bc469d873e09559caCraig Mautner appAnimator.showAllWindowsLocked(); 6086fbda63e68513ece4409dac845588711ab25c39dCraig Mautner mService.unsetAppFreezingScreenLocked(wtoken, false, true); 6096fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (WindowManagerService.DEBUG_ORIENTATION) Slog.i(TAG, 6106fbda63e68513ece4409dac845588711ab25c39dCraig Mautner "Setting mOrientationChangeComplete=true because wtoken " 6116fbda63e68513ece4409dac845588711ab25c39dCraig Mautner + wtoken + " numInteresting=" + wtoken.numInterestingWindows 6126fbda63e68513ece4409dac845588711ab25c39dCraig Mautner + " numDrawn=" + wtoken.numDrawnWindows); 6136fbda63e68513ece4409dac845588711ab25c39dCraig Mautner // This will set mOrientationChangeComplete and cause a pass through layout. 61476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setAppLayoutChanges(appAnimator, 61576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, 61676a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner "testTokenMayBeDrawnLocked: freezingScreen"); 6176fbda63e68513ece4409dac845588711ab25c39dCraig Mautner } else { 61876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setAppLayoutChanges(appAnimator, 61976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM, 62076a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner "testTokenMayBeDrawnLocked"); 62176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner 6226fbda63e68513ece4409dac845588711ab25c39dCraig Mautner // We can now show all of the drawn windows! 6236fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (!mService.mOpeningApps.contains(wtoken)) { 624322e40315609acd5a608440bc469d873e09559caCraig Mautner mAnimating |= appAnimator.showAllWindowsLocked(); 6256fbda63e68513ece4409dac845588711ab25c39dCraig Mautner } 626764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 627764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 628764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 629764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 630764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 631764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 632a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private void performAnimationsLocked(final int displayId) { 633a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner updateWindowsLocked(displayId); 634a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner updateWallpaperLocked(displayId); 635764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 636764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 6371caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner // TODO(cmautner): Change the following comment when no longer locked on mWindowMap */ 6381caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner /** Locked on mService.mWindowMap and this. */ 6391caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner private void animateLocked() { 640b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner if (!mInitialized) { 641b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner return; 642b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner } 64359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner 64476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mPendingLayoutChanges.clear(); 645764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mCurrentTime = SystemClock.uptimeMillis(); 6462639da500e3d53ea3a17d888b1c0001d043c6b98Craig Mautner mBulkUpdateParams = SET_ORIENTATION_CHANGE_COMPLETE; 647198e564c9a66010cfe93e0b1a75f84d696bda494Chet Haase boolean wasAnimating = mAnimating; 6487d8df3905d294127cc58100912a57c816bfb2502Craig Mautner mAnimating = false; 6497d8df3905d294127cc58100912a57c816bfb2502Craig Mautner if (WindowManagerService.DEBUG_WINDOW_TRACE) { 6507d8df3905d294127cc58100912a57c816bfb2502Craig Mautner Slog.i(TAG, "!!! animate: entry time=" + mCurrentTime); 6517d8df3905d294127cc58100912a57c816bfb2502Craig Mautner } 652764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 653ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i( 654ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner TAG, ">>> OPEN TRANSACTION animateLocked"); 655764983d16925daeeba3f29fd1f844187655d1386Craig Mautner Surface.openTransaction(); 656b6ce6e42cc89864354c7ecb9ae80504a6c9dddcfJamie Gennis Surface.setAnimationTransaction(); 657764983d16925daeeba3f29fd1f844187655d1386Craig Mautner try { 658a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner updateAppWindowsLocked(); 659a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 660a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final int numDisplays = mDisplayContentsAnimators.size(); 661a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner for (int i = 0; i < numDisplays; i++) { 662a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final int displayId = mDisplayContentsAnimators.keyAt(i); 663a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); 664a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 665a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final ScreenRotationAnimation screenRotationAnimation = 666a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mScreenRotationAnimation; 667a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (screenRotationAnimation != null && screenRotationAnimation.isAnimating()) { 668a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (screenRotationAnimation.stepAnimationLocked(mCurrentTime)) { 669a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mAnimating = true; 670a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } else { 671a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mBulkUpdateParams |= SET_UPDATE_ROTATION; 672a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner screenRotationAnimation.kill(); 673a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mScreenRotationAnimation = null; 674a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 675a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 676764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 677ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner // Update animations of all applications, including those 678ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner // associated with exiting/removed apps 679a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner performAnimationsLocked(displayId); 680ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner 681a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final WinAnimatorList winAnimatorList = displayAnimator.mWinAnimators; 682ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner final int N = winAnimatorList.size(); 683ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner for (int j = 0; j < N; j++) { 684ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner winAnimatorList.get(j).prepareSurfaceLocked(true); 685ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner } 686764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 687764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 688ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner testTokenMayBeDrawnLocked(); 689ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner 690a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner for (int i = 0; i < numDisplays; i++) { 691a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final int displayId = mDisplayContentsAnimators.keyAt(i); 692a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); 693764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 694a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final ScreenRotationAnimation screenRotationAnimation = 695a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mScreenRotationAnimation; 696a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (screenRotationAnimation != null) { 697a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner screenRotationAnimation.updateSurfacesInTransaction(); 698a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 699a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 700a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final DimAnimator.Parameters dimParams = displayAnimator.mDimParams; 701a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final DimAnimator dimAnimator = displayAnimator.mDimAnimator; 702d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (dimAnimator != null && dimParams != null) { 703d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner dimAnimator.updateParameters(mContext.getResources(), dimParams, mCurrentTime); 704a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 705a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (dimAnimator != null && dimAnimator.mDimShown) { 706a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mAnimating |= dimAnimator.updateSurface(isDimmingLocked(displayId), 707a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mCurrentTime, !mService.okToDisplay()); 708a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 709764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 710764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 7117358fbfeb2febb60085067fcacc192f429b06545Craig Mautner if (mService.mWatermark != null) { 7127358fbfeb2febb60085067fcacc192f429b06545Craig Mautner mService.mWatermark.drawIfNeeded(); 7137358fbfeb2febb60085067fcacc192f429b06545Craig Mautner } 714764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } catch (RuntimeException e) { 715764983d16925daeeba3f29fd1f844187655d1386Craig Mautner Log.wtf(TAG, "Unhandled exception in Window Manager", e); 716764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } finally { 717764983d16925daeeba3f29fd1f844187655d1386Craig Mautner Surface.closeTransaction(); 718ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i( 719ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner TAG, "<<< CLOSE TRANSACTION animateLocked"); 720ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner } 721ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner 722ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner for (int i = mPendingLayoutChanges.size() - 1; i >= 0; i--) { 723ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner if ((mPendingLayoutChanges.valueAt(i) 724ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner & WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER) != 0) { 725ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner mPendingActions |= WALLPAPER_ACTION_PENDING; 726ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner } 727764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 728c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner 72976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner if (mBulkUpdateParams != 0 || mPendingLayoutChanges.size() > 0) { 730711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner updateAnimToLayoutLocked(); 73101cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner } 7327d8df3905d294127cc58100912a57c816bfb2502Craig Mautner 7337d8df3905d294127cc58100912a57c816bfb2502Craig Mautner if (mAnimating) { 734711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner synchronized (mService.mLayoutToAnim) { 735711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner mService.scheduleAnimationLocked(); 7361caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 737198e564c9a66010cfe93e0b1a75f84d696bda494Chet Haase } else if (wasAnimating) { 738198e564c9a66010cfe93e0b1a75f84d696bda494Chet Haase mService.requestTraversalLocked(); 7397d8df3905d294127cc58100912a57c816bfb2502Craig Mautner } 7407d8df3905d294127cc58100912a57c816bfb2502Craig Mautner if (WindowManagerService.DEBUG_WINDOW_TRACE) { 7417d8df3905d294127cc58100912a57c816bfb2502Craig Mautner Slog.i(TAG, "!!! animate: exit mAnimating=" + mAnimating 7427d8df3905d294127cc58100912a57c816bfb2502Craig Mautner + " mBulkUpdateParams=" + Integer.toHexString(mBulkUpdateParams) 74376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner + " mPendingLayoutChanges(DEFAULT_DISPLAY)=" 74476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner + Integer.toHexString(mPendingLayoutChanges.get(Display.DEFAULT_DISPLAY))); 7457d8df3905d294127cc58100912a57c816bfb2502Craig Mautner } 746764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 747764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 748764983d16925daeeba3f29fd1f844187655d1386Craig Mautner WindowState mCurrentFocus; 749d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner void setCurrentFocus(final WindowState currentFocus) { 750764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mCurrentFocus = currentFocus; 751764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 752764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 753764983d16925daeeba3f29fd1f844187655d1386Craig Mautner void setDisplayDimensions(final int curWidth, final int curHeight, 754764983d16925daeeba3f29fd1f844187655d1386Craig Mautner final int appWidth, final int appHeight) { 755764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mDw = curWidth; 756764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mDh = curHeight; 757764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mInnerDw = appWidth; 758764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mInnerDh = appHeight; 759764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 760764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 761a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner boolean isDimmingLocked(int displayId) { 762a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner return getDisplayContentsAnimatorLocked(displayId).mDimParams != null; 763f8d4fbb9c87201350534861c4d988e63691fe24fCraig Mautner } 764f8d4fbb9c87201350534861c4d988e63691fe24fCraig Mautner 765a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner boolean isDimmingLocked(final WindowStateAnimator winAnimator) { 766a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DimAnimator.Parameters dimParams = 767a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner getDisplayContentsAnimatorLocked(winAnimator.mWin.getDisplayId()).mDimParams; 768a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner return dimParams != null && dimParams.mDimWinAnimator == winAnimator; 769acafd19c5ea05a8d465f97204f8d63468bdaa2a4Craig Mautner } 770acafd19c5ea05a8d465f97204f8d63468bdaa2a4Craig Mautner 771529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn static String bulkUpdateParamsToString(int bulkUpdateParams) { 772529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn StringBuilder builder = new StringBuilder(128); 773529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) { 774529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" UPDATE_ROTATION"); 775529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 776529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) { 777529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" WALLPAPER_MAY_CHANGE"); 778529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 779529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) { 780529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" FORCE_HIDING_CHANGED"); 781529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 782529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE) != 0) { 783529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" ORIENTATION_CHANGE_COMPLETE"); 784529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 785529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_TURN_ON_SCREEN) != 0) { 786529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" TURN_ON_SCREEN"); 787529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 788529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn return builder.toString(); 789529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 790529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 791a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner public void dumpLocked(PrintWriter pw, String prefix, boolean dumpAll) { 792529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn final String subPrefix = " " + prefix; 793529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn final String subSubPrefix = " " + subPrefix; 794529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 795529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn boolean needSep = false; 796529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mAppAnimators.size() > 0) { 797529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn needSep = true; 798529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(" App Animators:"); 799529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn for (int i=mAppAnimators.size()-1; i>=0; i--) { 800529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn AppWindowAnimator anim = mAppAnimators.get(i); 801529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("App Animator #"); pw.print(i); 802529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(' '); pw.print(anim); 803529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (dumpAll) { 804529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(':'); 805529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn anim.dump(pw, subPrefix, dumpAll); 806a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } else { 807529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(); 808a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 809529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 810529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 811529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mWallpaperTokens.size() > 0) { 812529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (needSep) { 813529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(); 814529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 815529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn needSep = true; 816529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.println("Wallpaper tokens:"); 817529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn for (int i=mWallpaperTokens.size()-1; i>=0; i--) { 818529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn WindowToken token = mWallpaperTokens.get(i); 819529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("Wallpaper #"); pw.print(i); 820529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(' '); pw.print(token); 821529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (dumpAll) { 822529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(':'); 823529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn token.dump(pw, subPrefix); 824a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } else { 825529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(); 826a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 8276fbda63e68513ece4409dac845588711ab25c39dCraig Mautner } 828529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 829529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 830529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (needSep) { 831a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner pw.println(); 832d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner } 833529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn for (int i = 0; i < mDisplayContentsAnimators.size(); i++) { 834529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("DisplayContentsAnimator #"); 835529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(mDisplayContentsAnimators.keyAt(i)); 836529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(":"); 837529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); 838529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn for (int j=0; j<displayAnimator.mWinAnimators.size(); j++) { 839529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn WindowStateAnimator wanim = displayAnimator.mWinAnimators.get(j); 840529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.print("Window #"); pw.print(j); 841529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(": "); pw.println(wanim); 842529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 843529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (displayAnimator.mWindowAnimationBackgroundSurface != null) { 844529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (dumpAll || displayAnimator.mWindowAnimationBackgroundSurface.mDimShown) { 845529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("mWindowAnimationBackgroundSurface:"); 846529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn displayAnimator.mWindowAnimationBackgroundSurface.printTo(subSubPrefix, pw); 847529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 848529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 849529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (displayAnimator.mDimAnimator != null) { 850529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (dumpAll || displayAnimator.mDimAnimator.mDimShown) { 851529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("mDimAnimator:"); 852529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn displayAnimator.mDimAnimator.printTo(subSubPrefix, pw); 853529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 854529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } else if (dumpAll) { 855529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("no DimAnimator "); 856529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 857529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (displayAnimator.mDimParams != null) { 858529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("mDimParams:"); 859529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn displayAnimator.mDimParams.printTo(subSubPrefix, pw); 860529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } else if (dumpAll) { 861529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("no DimParams "); 862529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 863529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (displayAnimator.mScreenRotationAnimation != null) { 864529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("mScreenRotationAnimation:"); 865529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn displayAnimator.mScreenRotationAnimation.printTo(subSubPrefix, pw); 866529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } else if (dumpAll) { 867529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("no ScreenRotationAnimation "); 868529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 869529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 870529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 871529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(); 872529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 873529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (dumpAll) { 874529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mAnimTransactionSequence="); 875529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(mAnimTransactionSequence); 876529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(" mForceHiding="); pw.println(forceHidingToString()); 877529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mCurrentTime="); 878529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(TimeUtils.formatUptime(mCurrentTime)); 879529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mDw="); 880529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(mDw); pw.print(" mDh="); pw.print(mDh); 881529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(" mInnerDw="); pw.print(mInnerDw); 882529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(" mInnerDh="); pw.println(mInnerDh); 883529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 884529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mBulkUpdateParams != 0) { 885529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mBulkUpdateParams=0x"); 886529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(Integer.toHexString(mBulkUpdateParams)); 887529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(bulkUpdateParamsToString(mBulkUpdateParams)); 888529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 889529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mPendingActions != 0) { 890529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mPendingActions=0x"); 891529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(Integer.toHexString(mPendingActions)); 892529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 893529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mWindowDetachedWallpaper != null) { 894529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mWindowDetachedWallpaper="); 895529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(mWindowDetachedWallpaper); 896529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 897529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mWallpaperTarget="); pw.println(mWallpaperTarget); 898529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mWpAppAnimator="); pw.println(mWpAppAnimator); 899529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mLowerWallpaperTarget != null || mUpperWallpaperTarget != null) { 900529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mLowerWallpaperTarget="); 901529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(mLowerWallpaperTarget); 902529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mUpperWallpaperTarget="); 903529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(mUpperWallpaperTarget); 904529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 905529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mUniverseBackground != null) { 906529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mUniverseBackground="); pw.print(mUniverseBackground); 907529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(" mAboveUniverseLayer="); pw.println(mAboveUniverseLayer); 908529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 909e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner } 910bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner 91176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner void clearPendingActions() { 91276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner synchronized (this) { 91376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mPendingActions = 0; 91476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 91576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 91676a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner 91776a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner void setPendingLayoutChanges(final int displayId, final int changes) { 91876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mPendingLayoutChanges.put(displayId, mPendingLayoutChanges.get(displayId) | changes); 91976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 92076a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner 92176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner void setAppLayoutChanges(final AppWindowAnimator appAnimator, final int changes, String s) { 92276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner // Used to track which displays layout changes have been done. 92376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner SparseIntArray displays = new SparseIntArray(); 92476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner for (int i = appAnimator.mAllAppWinAnimators.size() - 1; i >= 0; i--) { 92576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowStateAnimator winAnimator = appAnimator.mAllAppWinAnimators.get(i); 92676a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner final int displayId = winAnimator.mWin.mDisplayContent.getDisplayId(); 92776a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner if (displays.indexOfKey(displayId) < 0) { 92876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(displayId, changes); 92976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 93076a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner mService.debugLayoutRepeats(s, mPendingLayoutChanges.get(displayId)); 93176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 93276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner // Keep from processing this display again. 93376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner displays.put(displayId, changes); 93476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 93576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 9364d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner } 937a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 938a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private DisplayContentsAnimator getDisplayContentsAnimatorLocked(int displayId) { 939a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId); 940a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (displayAnimator == null) { 941ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner displayAnimator = new DisplayContentsAnimator(displayId); 942a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mDisplayContentsAnimators.put(displayId, displayAnimator); 943a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 944a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner return displayAnimator; 945a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 946a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 947a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner void setScreenRotationAnimationLocked(int displayId, ScreenRotationAnimation animation) { 948a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner getDisplayContentsAnimatorLocked(displayId).mScreenRotationAnimation = animation; 949a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 950a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 951a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner ScreenRotationAnimation getScreenRotationAnimationLocked(int displayId) { 952a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner return getDisplayContentsAnimatorLocked(displayId).mScreenRotationAnimation; 953a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 954a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 955ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner private class DisplayContentsAnimator { 956a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner WinAnimatorList mWinAnimators = new WinAnimatorList(); 957d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner DimAnimator mDimAnimator = null; 958a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DimAnimator.Parameters mDimParams = null; 959d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner DimSurface mWindowAnimationBackgroundSurface = null; 960a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner ScreenRotationAnimation mScreenRotationAnimation = null; 961ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner 962ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner public DisplayContentsAnimator(int displayId) { 963ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner mDimAnimator = new DimAnimator(mService.mFxSession, displayId); 964ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner mWindowAnimationBackgroundSurface = 965ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner new DimSurface(mService.mFxSession, displayId); 966ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner } 967a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 968764983d16925daeeba3f29fd1f844187655d1386Craig Mautner} 969