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; 12968683335e17c06504a11bc2e38a2580f613ea16Craig Mautnerimport static com.android.server.wm.WindowManagerService.LayoutFields.SET_WALLPAPER_ACTION_PENDING; 13a608b882327fbb393bde3854953cd322a6fea675Craig Mautner 14764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.content.Context; 1598129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackbornimport android.os.Debug; 16764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.os.SystemClock; 17764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.util.Log; 18764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.util.Slog; 19a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautnerimport android.util.SparseArray; 2076a7165719dc3ccce902953f6244e2c2668aa753Craig Mautnerimport android.util.SparseIntArray; 21529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackbornimport android.util.TimeUtils; 226881a10557acf3b0270de54799d6f19437acf584Craig Mautnerimport android.view.Display; 233866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopianimport android.view.SurfaceControl; 24764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.view.WindowManagerPolicy; 25764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerimport android.view.animation.Animation; 26764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 27529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackbornimport com.android.server.wm.WindowManagerService.LayoutFields; 28764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 29e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautnerimport java.io.PrintWriter; 300c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackbornimport java.util.ArrayList; 31e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner 32764983d16925daeeba3f29fd1f844187655d1386Craig Mautner/** 33764983d16925daeeba3f29fd1f844187655d1386Craig Mautner * Singleton class that carries out the animations and Surface operations in a separate task 34764983d16925daeeba3f29fd1f844187655d1386Craig Mautner * on behalf of WindowManagerService. 35764983d16925daeeba3f29fd1f844187655d1386Craig Mautner */ 36764983d16925daeeba3f29fd1f844187655d1386Craig Mautnerpublic class WindowAnimator { 37bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner private static final String TAG = "WindowAnimator"; 38764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 39764983d16925daeeba3f29fd1f844187655d1386Craig Mautner final WindowManagerService mService; 40764983d16925daeeba3f29fd1f844187655d1386Craig Mautner final Context mContext; 41764983d16925daeeba3f29fd1f844187655d1386Craig Mautner final WindowManagerPolicy mPolicy; 42764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 43764983d16925daeeba3f29fd1f844187655d1386Craig Mautner boolean mAnimating; 4401cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner 451caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner final Runnable mAnimationRunnable; 461caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner 47764983d16925daeeba3f29fd1f844187655d1386Craig Mautner /** Time of current animation step. Reset on each iteration */ 48764983d16925daeeba3f29fd1f844187655d1386Craig Mautner long mCurrentTime; 49764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 50764983d16925daeeba3f29fd1f844187655d1386Craig Mautner /** Skip repeated AppWindowTokens initialization. Note that AppWindowsToken's version of this 51764983d16925daeeba3f29fd1f844187655d1386Craig Mautner * is a long initialized to Long.MIN_VALUE so that it doesn't match this value on startup. */ 526fbda63e68513ece4409dac845588711ab25c39dCraig Mautner private int mAnimTransactionSequence; 53764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 54ae44659f30ddaba67581fbdf9c9255ac982d45abCraig Mautner /** Window currently running an animation that has requested it be detached 55ae44659f30ddaba67581fbdf9c9255ac982d45abCraig Mautner * from the wallpaper. This means we need to ensure the wallpaper is 56ae44659f30ddaba67581fbdf9c9255ac982d45abCraig Mautner * visible behind it in case it animates in a way that would allow it to be 57ae44659f30ddaba67581fbdf9c9255ac982d45abCraig Mautner * seen. If multiple windows satisfy this, use the lowest window. */ 58e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner WindowState mWindowDetachedWallpaper = null; 5901cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner 60a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn WindowStateAnimator mUniverseBackground = null; 61a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn int mAboveUniverseLayer = 0; 62a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn 63a608b882327fbb393bde3854953cd322a6fea675Craig Mautner int mBulkUpdateParams = 0; 64a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn Object mLastWindowFreezeSource; 65a608b882327fbb393bde3854953cd322a6fea675Craig Mautner 66a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner SparseArray<DisplayContentsAnimator> mDisplayContentsAnimators = 67f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new SparseArray<WindowAnimator.DisplayContentsAnimator>(2); 68d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner 69b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner boolean mInitialized = false; 70b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner 71178af5948d71c841278081c712506f7a7fca34b9Craig Mautner // forceHiding states. 72178af5948d71c841278081c712506f7a7fca34b9Craig Mautner static final int KEYGUARD_NOT_SHOWN = 0; 73178af5948d71c841278081c712506f7a7fca34b9Craig Mautner static final int KEYGUARD_ANIMATING_IN = 1; 74178af5948d71c841278081c712506f7a7fca34b9Craig Mautner static final int KEYGUARD_SHOWN = 2; 75178af5948d71c841278081c712506f7a7fca34b9Craig Mautner static final int KEYGUARD_ANIMATING_OUT = 3; 76178af5948d71c841278081c712506f7a7fca34b9Craig Mautner int mForceHiding = KEYGUARD_NOT_SHOWN; 77178af5948d71c841278081c712506f7a7fca34b9Craig Mautner 78178af5948d71c841278081c712506f7a7fca34b9Craig Mautner private String forceHidingToString() { 79178af5948d71c841278081c712506f7a7fca34b9Craig Mautner switch (mForceHiding) { 80178af5948d71c841278081c712506f7a7fca34b9Craig Mautner case KEYGUARD_NOT_SHOWN: return "KEYGUARD_NOT_SHOWN"; 81178af5948d71c841278081c712506f7a7fca34b9Craig Mautner case KEYGUARD_ANIMATING_IN: return "KEYGUARD_ANIMATING_IN"; 82178af5948d71c841278081c712506f7a7fca34b9Craig Mautner case KEYGUARD_SHOWN: return "KEYGUARD_SHOWN"; 83178af5948d71c841278081c712506f7a7fca34b9Craig Mautner case KEYGUARD_ANIMATING_OUT:return "KEYGUARD_ANIMATING_OUT"; 84178af5948d71c841278081c712506f7a7fca34b9Craig Mautner default: return "KEYGUARD STATE UNKNOWN " + mForceHiding; 85178af5948d71c841278081c712506f7a7fca34b9Craig Mautner } 86178af5948d71c841278081c712506f7a7fca34b9Craig Mautner } 87178af5948d71c841278081c712506f7a7fca34b9Craig Mautner 88918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner WindowAnimator(final WindowManagerService service) { 89764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mService = service; 90918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner mContext = service.mContext; 91918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner mPolicy = service.mPolicy; 921caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner 931caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner mAnimationRunnable = new Runnable() { 941caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner @Override 951caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner public void run() { 96968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner synchronized (mService.mWindowMap) { 97968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner mService.mAnimationScheduled = false; 98968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner animateLocked(); 991caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 1001caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 1011caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner }; 102b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner } 1039e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner 104a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner void addDisplayLocked(final int displayId) { 105ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner // Create the DisplayContentsAnimator object by retrieving it. 106ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner getDisplayContentsAnimatorLocked(displayId); 107a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (displayId == Display.DEFAULT_DISPLAY) { 108a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mInitialized = true; 109a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 110a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 111a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 112a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner void removeDisplayLocked(final int displayId) { 113d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner final DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId); 114d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (displayAnimator != null) { 115d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner if (displayAnimator.mScreenRotationAnimation != null) { 116d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner displayAnimator.mScreenRotationAnimation.kill(); 117d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner displayAnimator.mScreenRotationAnimation = null; 118d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner } 119d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner } 120d5523dc7b7318f2774109dd30716ff7b74560e61Craig Mautner 121a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mDisplayContentsAnimators.delete(displayId); 1221caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner } 1231caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner 124968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner void hideWallpapersLocked(final WindowState w) { 125968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final WindowState wallpaperTarget = mService.mWallpaperTarget; 126968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final WindowState lowerWallpaperTarget = mService.mLowerWallpaperTarget; 127968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final ArrayList<WindowToken> wallpaperTokens = mService.mWallpaperTokens; 12866f78d7a979775efb148873797bac4584ddb3b83Craig Mautner 12998129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn if ((wallpaperTarget == w && lowerWallpaperTarget == null) || wallpaperTarget == null) { 13098129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn final int numTokens = wallpaperTokens.size(); 131918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner for (int i = numTokens - 1; i >= 0; i--) { 13298129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn final WindowToken token = wallpaperTokens.get(i); 133918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner final int numWindows = token.windows.size(); 134918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner for (int j = numWindows - 1; j >= 0; j--) { 135918b53bc531f5bd1ea102e8b827d693bd4d0555bCraig Mautner final WindowState wallpaper = token.windows.get(j); 136b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner final WindowStateAnimator winAnimator = wallpaper.mWinAnimator; 137b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner if (!winAnimator.mLastHidden) { 138b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner winAnimator.hide(); 139507a2ee12b6d1d683e4a5806804c472b3fe32e61Craig Mautner mService.dispatchWallpaperVisibility(wallpaper, false); 14076a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(Display.DEFAULT_DISPLAY, 14176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); 142b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner } 143b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner } 144ef03a7f441cf0cbef5a5f7fafb58a7d5aea7ef52Dianne Hackborn if (WindowManagerService.DEBUG_WALLPAPER_LIGHT && !token.hidden) Slog.d(TAG, 1452ea9bae7121f1df5461437d7d08fa550cdf6e0b0Dianne Hackborn "Hiding wallpaper " + token + " from " + w 1462ea9bae7121f1df5461437d7d08fa550cdf6e0b0Dianne Hackborn + " target=" + wallpaperTarget + " lower=" + lowerWallpaperTarget 1472ea9bae7121f1df5461437d7d08fa550cdf6e0b0Dianne Hackborn + "\n" + Debug.getCallers(5, " ")); 148b9836b9185132974f6cfa9296bb3c28d1c9b668aCraig Mautner token.hidden = true; 1490afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner } 1500afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner } 1510afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner } 1520afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253Craig Mautner 153b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner private void updateAppWindowsLocked(int displayId) { 154b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner final DisplayContent displayContent = mService.getDisplayContentLocked(displayId); 155d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner final ArrayList<Task> tasks = displayContent.getTasks(); 156f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final int numTasks = tasks.size(); 157f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) { 158f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final AppTokenList tokens = tasks.get(taskNdx).mAppTokens; 159f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final int numTokens = tokens.size(); 160f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) { 161f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final AppWindowAnimator appAnimator = tokens.get(tokenNdx).mAppAnimator; 162f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final boolean wasAnimating = appAnimator.animation != null 163f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner && appAnimator.animation != AppWindowAnimator.sDummyAnimation; 164f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner if (appAnimator.stepAnimationLocked(mCurrentTime)) { 165f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner mAnimating = true; 166f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner } else if (wasAnimating) { 167f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner // stopped animating, do one more pass through the layout 168f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner setAppLayoutChanges(appAnimator, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, 169f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner "appToken " + appAnimator.mAppToken + " done"); 170f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG, 171f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner "updateWindowsApps...: done animating " + appAnimator.mAppToken); 172f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner } 173bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner } 174bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner } 175a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 176b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner final AppTokenList exitingAppTokens = displayContent.mExitingAppTokens; 177b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner final int NEAT = exitingAppTokens.size(); 17805d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner for (int i = 0; i < NEAT; i++) { 179b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner final AppWindowAnimator appAnimator = exitingAppTokens.get(i).mAppAnimator; 180594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner final boolean wasAnimating = appAnimator.animation != null 181fbf378c736a973b8edaf1fc4c187d11dc0f5e291Craig Mautner && appAnimator.animation != AppWindowAnimator.sDummyAnimation; 1829339c401cf1a056a3a1caddc648334069e6bd267Craig Mautner if (appAnimator.stepAnimationLocked(mCurrentTime)) { 183bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner mAnimating = true; 184bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner } else if (wasAnimating) { 185bb1449b392b4fb14f17fa747c2261d7195405df3Craig Mautner // stopped animating, do one more pass through the layout 18676a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setAppLayoutChanges(appAnimator, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, 18776a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner "exiting appToken " + appAnimator.mAppToken + " done"); 18883339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG, 18983339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner "updateWindowsApps...: done animating exiting " + appAnimator.mAppToken); 190764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 191764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 192764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 193764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 194a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private void updateWindowsLocked(final int displayId) { 1956fbda63e68513ece4409dac845588711ab25c39dCraig Mautner ++mAnimTransactionSequence; 196764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 197968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final WindowList windows = mService.getWindowListLocked(displayId); 1980c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn ArrayList<WindowStateAnimator> unForceHiding = null; 1990c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn boolean wallpaperInUnForceHiding = false; 200178af5948d71c841278081c712506f7a7fca34b9Craig Mautner mForceHiding = KEYGUARD_NOT_SHOWN; 2014bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner 202968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner for (int i = windows.size() - 1; i >= 0; i--) { 203968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner WindowState win = windows.get(i); 204968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner WindowStateAnimator winAnimator = win.mWinAnimator; 205bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner final int flags = winAnimator.mAttrFlags; 206764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 20729479ebe1007361222bf6ab4d5e2a27927d4b8e8Mathias Agopian if (winAnimator.mSurfaceControl != null) { 208a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner final boolean wasAnimating = winAnimator.mWasAnimating; 209a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner final boolean nowAnimating = winAnimator.stepAnimationLocked(mCurrentTime); 210764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 211764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (WindowManagerService.DEBUG_WALLPAPER) { 212bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner Slog.v(TAG, win + ": wasAnimating=" + wasAnimating + 213764983d16925daeeba3f29fd1f844187655d1386Craig Mautner ", nowAnimating=" + nowAnimating); 214764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 215764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 216968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner if (wasAnimating && !winAnimator.mAnimating && mService.mWallpaperTarget == win) { 217a608b882327fbb393bde3854953cd322a6fea675Craig Mautner mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; 21876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(Display.DEFAULT_DISPLAY, 21976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); 220cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 221d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 2", 22266f78d7a979775efb148873797bac4584ddb3b83Craig Mautner getPendingLayoutChanges(Display.DEFAULT_DISPLAY)); 223cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 224764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 225764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 226bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner if (mPolicy.doesForceHide(win, win.mAttrs)) { 227764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (!wasAnimating && nowAnimating) { 22883339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner if (WindowManagerService.DEBUG_ANIM || 22983339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, 23083339b465c3299abc47ced7dffdf470c5b0c0750Craig Mautner "Animation started that could impact force hide: " + win); 231d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mBulkUpdateParams |= SET_FORCE_HIDING_CHANGED; 23276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(displayId, 23376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); 234cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 235d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 3", 23666f78d7a979775efb148873797bac4584ddb3b83Craig Mautner getPendingLayoutChanges(displayId)); 237cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 238764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mService.mFocusMayChange = true; 239ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn } 2404bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner if (win.isReadyForDisplay()) { 2414bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner if (nowAnimating) { 2424bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner if (winAnimator.mAnimationIsEntrance) { 243178af5948d71c841278081c712506f7a7fca34b9Craig Mautner mForceHiding = KEYGUARD_ANIMATING_IN; 2444bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner } else { 245178af5948d71c841278081c712506f7a7fca34b9Craig Mautner mForceHiding = KEYGUARD_ANIMATING_OUT; 2464bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner } 2474bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner } else { 2485c7bd017058ff073b73e96726aa44c4a113f453fCraig Mautner mForceHiding = win.isDrawnLw() ? KEYGUARD_SHOWN : KEYGUARD_NOT_SHOWN; 2494bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner } 250764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 251ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, 252178af5948d71c841278081c712506f7a7fca34b9Craig Mautner "Force hide " + mForceHiding 253ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " hasSurface=" + win.mHasSurface 254ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " policyVis=" + win.mPolicyVisibility 255ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " destroying=" + win.mDestroying 256ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " attHidden=" + win.mAttachedHidden 257ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " vis=" + win.mViewVisibility 258ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " hidden=" + win.mRootToken.hidden 259ac92087a9a1c464d4b0a58c82dae01cbaa088e89Dianne Hackborn + " anim=" + win.mWinAnimator.mAnimation); 260bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner } else if (mPolicy.canBeForceHidden(win, win.mAttrs)) { 2614bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner final boolean hideWhenLocked = 2624bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner (winAnimator.mAttrFlags & FLAG_SHOW_WHEN_LOCKED) == 0; 263d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner final boolean changed; 264178af5948d71c841278081c712506f7a7fca34b9Craig Mautner if (((mForceHiding == KEYGUARD_ANIMATING_IN) 2654bf18a7c97c0f312ccf12bcd952b420af0c95e5fCraig Mautner && (!winAnimator.isAnimating() || hideWhenLocked)) 266178af5948d71c841278081c712506f7a7fca34b9Craig Mautner || ((mForceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) { 267bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner changed = win.hideLw(false, false); 268764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG, 269bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner "Now policy hidden: " + win); 270764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } else { 271bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner changed = win.showLw(false, false); 272764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG, 273bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner "Now policy shown: " + win); 274764983d16925daeeba3f29fd1f844187655d1386Craig Mautner if (changed) { 275d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner if ((mBulkUpdateParams & SET_FORCE_HIDING_CHANGED) != 0 276bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner && win.isVisibleNow() /*w.isReadyForDisplay()*/) { 2770c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn if (unForceHiding == null) { 2780c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn unForceHiding = new ArrayList<WindowStateAnimator>(); 2790c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn } 2800c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn unForceHiding.add(winAnimator); 28101cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner if ((flags & FLAG_SHOW_WALLPAPER) != 0) { 2820c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn wallpaperInUnForceHiding = true; 283764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 284764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 28529219d963d1ec29ddea3e5814eb82c2aeaccc1acCraig Mautner final WindowState currentFocus = mService.mCurrentFocus; 28629219d963d1ec29ddea3e5814eb82c2aeaccc1acCraig Mautner if (currentFocus == null || currentFocus.mLayer < win.mLayer) { 287764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // We are showing on to of the current 288764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // focus, so re-evaluate focus to make 289764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // sure it is correct. 2905845812780a29f4594dbdac12e65c4e063ddb4b0Craig Mautner if (WindowManagerService.DEBUG_FOCUS_LIGHT) Slog.v(TAG, 2915845812780a29f4594dbdac12e65c4e063ddb4b0Craig Mautner "updateWindowsLocked: setting mFocusMayChange true"); 292764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mService.mFocusMayChange = true; 293764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 294764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 295764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 29601cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner if (changed && (flags & FLAG_SHOW_WALLPAPER) != 0) { 297a608b882327fbb393bde3854953cd322a6fea675Craig Mautner mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; 29876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(Display.DEFAULT_DISPLAY, 29976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); 300cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 301d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 4", 30266f78d7a979775efb148873797bac4584ddb3b83Craig Mautner getPendingLayoutChanges(Display.DEFAULT_DISPLAY)); 303cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 304764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 305764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 306764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 307764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 308bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner final AppWindowToken atoken = win.mAppToken; 3096fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (winAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW) { 3106fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (atoken == null || atoken.allDrawn) { 3116fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (winAnimator.performShowLocked()) { 31266f78d7a979775efb148873797bac4584ddb3b83Craig Mautner setPendingLayoutChanges(displayId, 31376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM); 3146fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 3156fbda63e68513ece4409dac845588711ab25c39dCraig Mautner mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 5", 31666f78d7a979775efb148873797bac4584ddb3b83Craig Mautner getPendingLayoutChanges(displayId)); 317764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 318cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 319cf8cbbe77447d9cca28e789c5ec4e714694ab37dCraig Mautner } 320764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 321322e40315609acd5a608440bc469d873e09559caCraig Mautner final AppWindowAnimator appAnimator = winAnimator.mAppAnimator; 322594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner if (appAnimator != null && appAnimator.thumbnail != null) { 3236fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (appAnimator.thumbnailTransactionSeq != mAnimTransactionSequence) { 3246fbda63e68513ece4409dac845588711ab25c39dCraig Mautner appAnimator.thumbnailTransactionSeq = mAnimTransactionSequence; 325594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner appAnimator.thumbnailLayer = 0; 3268078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 327594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner if (appAnimator.thumbnailLayer < winAnimator.mAnimLayer) { 328594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner appAnimator.thumbnailLayer = winAnimator.mAnimLayer; 3298078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3308078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 331764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } // end forall windows 3320c2acffec8689f8721a454845b24a830bc37ce92Dianne Hackborn 333078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // If we have windows that are being show due to them no longer 334078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // being force-hidden, apply the appropriate animation to them. 335078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (unForceHiding != null) { 336078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner for (int i=unForceHiding.size()-1; i>=0; i--) { 337078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner Animation a = mPolicy.createForceHideEnterAnimation(wallpaperInUnForceHiding); 338078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (a != null) { 339078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner final WindowStateAnimator winAnimator = unForceHiding.get(i); 340078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner winAnimator.setAnimation(a); 341078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner winAnimator.mAnimationIsEntrance = true; 342078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 343078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 344078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 345078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 346078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 347a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private void updateWallpaperLocked(int displayId) { 34805d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner mService.getDisplayContentLocked(displayId).resetAnimationBackgroundAnimator(); 34905d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner 350968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final WindowList windows = mService.getWindowListLocked(displayId); 351078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner WindowState detachedWallpaper = null; 352078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 353968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner for (int i = windows.size() - 1; i >= 0; i--) { 354968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final WindowState win = windows.get(i); 355968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner WindowStateAnimator winAnimator = win.mWinAnimator; 35629479ebe1007361222bf6ab4d5e2a27927d4b8e8Mathias Agopian if (winAnimator.mSurfaceControl == null) { 357078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner continue; 358078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 359078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 360078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner final int flags = winAnimator.mAttrFlags; 361078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 362078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // If this window is animating, make a note that we have 363078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // an animating window and take care of a request to run 364078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // a detached wallpaper animation. 365078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (winAnimator.mAnimating) { 366078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (winAnimator.mAnimation != null) { 367078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if ((flags & FLAG_SHOW_WALLPAPER) != 0 368078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner && winAnimator.mAnimation.getDetachWallpaper()) { 369078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner detachedWallpaper = win; 370078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 37105d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner final int color = winAnimator.mAnimation.getBackgroundColor(); 37205d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner if (color != 0) { 37305d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner win.getStack().setAnimationBackground(winAnimator, color); 374078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 375078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 376078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner mAnimating = true; 377078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 378078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 379078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // If this window's app token is running a detached wallpaper 380078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // animation, make a note so we can ensure the wallpaper is 381078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner // displayed behind it. 382322e40315609acd5a608440bc469d873e09559caCraig Mautner final AppWindowAnimator appAnimator = winAnimator.mAppAnimator; 383078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if (appAnimator != null && appAnimator.animation != null 384078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner && appAnimator.animating) { 385078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner if ((flags & FLAG_SHOW_WALLPAPER) != 0 386078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner && appAnimator.animation.getDetachWallpaper()) { 387078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner detachedWallpaper = win; 388078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 389078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 39005d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner final int color = appAnimator.animation.getBackgroundColor(); 39105d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner if (color != 0) { 39205d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner win.getStack().setAnimationBackground(winAnimator, color); 393078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 394078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } 395078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner } // end forall windows 396078ea0a6444bfb5c7ab1678b1c8898e590828731Craig Mautner 3979e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner if (mWindowDetachedWallpaper != detachedWallpaper) { 3989e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner if (WindowManagerService.DEBUG_WALLPAPER) Slog.v(TAG, 3999e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner "Detached wallpaper changed from " + mWindowDetachedWallpaper 4009e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner + " to " + detachedWallpaper); 4019e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner mWindowDetachedWallpaper = detachedWallpaper; 4029e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; 4039e809448761878b72b47c0a0e703de95a3cf9815Craig Mautner } 404764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 405764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 4069339c401cf1a056a3a1caddc648334069e6bd267Craig Mautner /** See if any windows have been drawn, so they (and others associated with them) can now be 4079339c401cf1a056a3a1caddc648334069e6bd267Craig Mautner * shown. */ 408b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner private void testTokenMayBeDrawnLocked(int displayId) { 409968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner // See if any windows have been drawn, so they (and others 410968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner // associated with them) can now be shown. 411d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner final ArrayList<Task> tasks = mService.getDisplayContentLocked(displayId).getTasks(); 412f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final int numTasks = tasks.size(); 413f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) { 414f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final AppTokenList tokens = tasks.get(taskNdx).mAppTokens; 415f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final int numTokens = tokens.size(); 416f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) { 417f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final AppWindowToken wtoken = tokens.get(tokenNdx); 418f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner AppWindowAnimator appAnimator = wtoken.mAppAnimator; 419f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner final boolean allDrawn = wtoken.allDrawn; 420f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner if (allDrawn != appAnimator.allDrawn) { 421f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner appAnimator.allDrawn = allDrawn; 422f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner if (allDrawn) { 423f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner // The token has now changed state to having all 424f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner // windows shown... what to do, what to do? 425f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner if (appAnimator.freezingScreen) { 426f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner appAnimator.showAllWindowsLocked(); 427f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner mService.unsetAppFreezingScreenLocked(wtoken, false, true); 428f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner if (WindowManagerService.DEBUG_ORIENTATION) Slog.i(TAG, 429f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner "Setting mOrientationChangeComplete=true because wtoken " 430f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner + wtoken + " numInteresting=" + wtoken.numInterestingWindows 431f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner + " numDrawn=" + wtoken.numDrawnWindows); 432f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner // This will set mOrientationChangeComplete and cause a pass through layout. 433f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner setAppLayoutChanges(appAnimator, 434f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, 435f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner "testTokenMayBeDrawnLocked: freezingScreen"); 436f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner } else { 437f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner setAppLayoutChanges(appAnimator, 438f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM, 439f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner "testTokenMayBeDrawnLocked"); 440f8924150b3fa5a9afef66bcae0affab1e66b3629Craig Mautner 441f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner // We can now show all of the drawn windows! 442f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner if (!mService.mOpeningApps.contains(wtoken)) { 443f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner mAnimating |= appAnimator.showAllWindowsLocked(); 444f81b908752365fda62a6158bfe7d1559b0d52cddCraig Mautner } 4456fbda63e68513ece4409dac845588711ab25c39dCraig Mautner } 446764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 447764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 448764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 449764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 450764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 451764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 452a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private void performAnimationsLocked(final int displayId) { 453a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner updateWindowsLocked(displayId); 454a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner updateWallpaperLocked(displayId); 455764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 456764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 4571420b93fa5606979fd67eaf80f50294d4f8c191bCraig Mautner 4581420b93fa5606979fd67eaf80f50294d4f8c191bCraig Mautner /** Locked on mService.mWindowMap. */ 4591caa399baffe2a5dca018469761db6f77ea31ce8Craig Mautner private void animateLocked() { 460b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner if (!mInitialized) { 461b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner return; 462b47bbc3d80badb94229bc4ce7a2d5006faa9ef15Craig Mautner } 46359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner 464764983d16925daeeba3f29fd1f844187655d1386Craig Mautner mCurrentTime = SystemClock.uptimeMillis(); 4652639da500e3d53ea3a17d888b1c0001d043c6b98Craig Mautner mBulkUpdateParams = SET_ORIENTATION_CHANGE_COMPLETE; 466198e564c9a66010cfe93e0b1a75f84d696bda494Chet Haase boolean wasAnimating = mAnimating; 4677d8df3905d294127cc58100912a57c816bfb2502Craig Mautner mAnimating = false; 4687d8df3905d294127cc58100912a57c816bfb2502Craig Mautner if (WindowManagerService.DEBUG_WINDOW_TRACE) { 4697d8df3905d294127cc58100912a57c816bfb2502Craig Mautner Slog.i(TAG, "!!! animate: entry time=" + mCurrentTime); 4707d8df3905d294127cc58100912a57c816bfb2502Craig Mautner } 471764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 472ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i( 473ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner TAG, ">>> OPEN TRANSACTION animateLocked"); 4743866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.openTransaction(); 4753866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.setAnimationTransaction(); 476764983d16925daeeba3f29fd1f844187655d1386Craig Mautner try { 477a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final int numDisplays = mDisplayContentsAnimators.size(); 478a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner for (int i = 0; i < numDisplays; i++) { 479a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final int displayId = mDisplayContentsAnimators.keyAt(i); 480b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner updateAppWindowsLocked(displayId); 481a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); 482a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 483a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final ScreenRotationAnimation screenRotationAnimation = 484a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mScreenRotationAnimation; 485a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (screenRotationAnimation != null && screenRotationAnimation.isAnimating()) { 486a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (screenRotationAnimation.stepAnimationLocked(mCurrentTime)) { 487a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mAnimating = true; 488a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } else { 489a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mBulkUpdateParams |= SET_UPDATE_ROTATION; 490a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner screenRotationAnimation.kill(); 491a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner displayAnimator.mScreenRotationAnimation = null; 492a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 493a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 494764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 495ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner // Update animations of all applications, including those 496ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner // associated with exiting/removed apps 497a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner performAnimationsLocked(displayId); 498ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner 499968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final WindowList windows = mService.getWindowListLocked(displayId); 500968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final int N = windows.size(); 501ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner for (int j = 0; j < N; j++) { 502968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner windows.get(j).mWinAnimator.prepareSurfaceLocked(true); 503ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner } 504764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 505764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 506a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner for (int i = 0; i < numDisplays; i++) { 507a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner final int displayId = mDisplayContentsAnimators.keyAt(i); 508b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner 509b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner testTokenMayBeDrawnLocked(displayId); 510b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner 51111462cc0b0fd34151968b310833a0b8525457eb4Craig Mautner final ScreenRotationAnimation screenRotationAnimation = 51211462cc0b0fd34151968b310833a0b8525457eb4Craig Mautner mDisplayContentsAnimators.valueAt(i).mScreenRotationAnimation; 51311462cc0b0fd34151968b310833a0b8525457eb4Craig Mautner if (screenRotationAnimation != null) { 51411462cc0b0fd34151968b310833a0b8525457eb4Craig Mautner screenRotationAnimation.updateSurfacesInTransaction(); 51511462cc0b0fd34151968b310833a0b8525457eb4Craig Mautner } 51611462cc0b0fd34151968b310833a0b8525457eb4Craig Mautner 51705d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner mAnimating |= mService.getDisplayContentLocked(displayId).animateDimLayers(); 5181420b93fa5606979fd67eaf80f50294d4f8c191bCraig Mautner 519545252f4fde6fbb70b07e97a120c7d1405758017Svetoslav Ganov //TODO (multidisplay): Magnification is supported only for the default display. 520545252f4fde6fbb70b07e97a120c7d1405758017Svetoslav Ganov if (mService.mDisplayMagnifier != null && displayId == Display.DEFAULT_DISPLAY) { 521545252f4fde6fbb70b07e97a120c7d1405758017Svetoslav Ganov mService.mDisplayMagnifier.drawMagnifiedRegionBorderIfNeededLocked(); 522545252f4fde6fbb70b07e97a120c7d1405758017Svetoslav Ganov } 523764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 524764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 5259c72281d9799236ace861e151f642fc81f8128d2Mathias Agopian if (mAnimating) { 5269c72281d9799236ace861e151f642fc81f8128d2Mathias Agopian mService.scheduleAnimationLocked(); 5279c72281d9799236ace861e151f642fc81f8128d2Mathias Agopian } 5289c72281d9799236ace861e151f642fc81f8128d2Mathias Agopian 529f76664673eed1c7b2fa141ce99e01028bc7a1be0Craig Mautner mService.setFocusedStackLayer(); 530f76664673eed1c7b2fa141ce99e01028bc7a1be0Craig 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 { 5373866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.closeTransaction(); 538ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i( 539ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner TAG, "<<< CLOSE TRANSACTION animateLocked"); 540ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner } 541ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner 54266f78d7a979775efb148873797bac4584ddb3b83Craig Mautner boolean hasPendingLayoutChanges = false; 543f8924150b3fa5a9afef66bcae0affab1e66b3629Craig Mautner final int numDisplays = mService.mDisplayContents.size(); 544f8924150b3fa5a9afef66bcae0affab1e66b3629Craig Mautner for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) { 5450f4ab97c230e09256af9b7e232a3fe05b8f759b2Craig Mautner final DisplayContent displayContent = mService.mDisplayContents.valueAt(displayNdx); 54666f78d7a979775efb148873797bac4584ddb3b83Craig Mautner final int pendingChanges = getPendingLayoutChanges(displayContent.getDisplayId()); 54766f78d7a979775efb148873797bac4584ddb3b83Craig Mautner if ((pendingChanges & WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER) != 0) { 548968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner mBulkUpdateParams |= SET_WALLPAPER_ACTION_PENDING; 549ea3a09a5b9c8ae56b0c4975c7a7039a05d4c0b3cCraig Mautner } 55066f78d7a979775efb148873797bac4584ddb3b83Craig Mautner if (pendingChanges != 0) { 55166f78d7a979775efb148873797bac4584ddb3b83Craig Mautner hasPendingLayoutChanges = true; 55266f78d7a979775efb148873797bac4584ddb3b83Craig Mautner } 553764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 554c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner 55566f78d7a979775efb148873797bac4584ddb3b83Craig Mautner boolean doRequest = false; 55666f78d7a979775efb148873797bac4584ddb3b83Craig Mautner if (mBulkUpdateParams != 0) { 55766f78d7a979775efb148873797bac4584ddb3b83Craig Mautner doRequest = mService.copyAnimToLayoutParamsLocked(); 55866f78d7a979775efb148873797bac4584ddb3b83Craig Mautner } 55966f78d7a979775efb148873797bac4584ddb3b83Craig Mautner 56066f78d7a979775efb148873797bac4584ddb3b83Craig Mautner if (hasPendingLayoutChanges || doRequest) { 56166f78d7a979775efb148873797bac4584ddb3b83Craig Mautner mService.requestTraversalLocked(); 56201cd0e7df040659900e50f83c6b75d1d6fcc5655Craig Mautner } 5637d8df3905d294127cc58100912a57c816bfb2502Craig Mautner 5649c72281d9799236ace861e151f642fc81f8128d2Mathias Agopian if (!mAnimating && wasAnimating) { 565198e564c9a66010cfe93e0b1a75f84d696bda494Chet Haase mService.requestTraversalLocked(); 5667d8df3905d294127cc58100912a57c816bfb2502Craig Mautner } 5677d8df3905d294127cc58100912a57c816bfb2502Craig Mautner if (WindowManagerService.DEBUG_WINDOW_TRACE) { 5687d8df3905d294127cc58100912a57c816bfb2502Craig Mautner Slog.i(TAG, "!!! animate: exit mAnimating=" + mAnimating 5697d8df3905d294127cc58100912a57c816bfb2502Craig Mautner + " mBulkUpdateParams=" + Integer.toHexString(mBulkUpdateParams) 57076a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner + " mPendingLayoutChanges(DEFAULT_DISPLAY)=" 57166f78d7a979775efb148873797bac4584ddb3b83Craig Mautner + Integer.toHexString(getPendingLayoutChanges(Display.DEFAULT_DISPLAY))); 5727d8df3905d294127cc58100912a57c816bfb2502Craig Mautner } 573764983d16925daeeba3f29fd1f844187655d1386Craig Mautner } 574764983d16925daeeba3f29fd1f844187655d1386Craig Mautner 575529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn static String bulkUpdateParamsToString(int bulkUpdateParams) { 576529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn StringBuilder builder = new StringBuilder(128); 577529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) { 578529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" UPDATE_ROTATION"); 579529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 580529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) { 581529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" WALLPAPER_MAY_CHANGE"); 582529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 583529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) { 584529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" FORCE_HIDING_CHANGED"); 585529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 586529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE) != 0) { 587529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" ORIENTATION_CHANGE_COMPLETE"); 588529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 589529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if ((bulkUpdateParams & LayoutFields.SET_TURN_ON_SCREEN) != 0) { 590529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn builder.append(" TURN_ON_SCREEN"); 591529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 592529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn return builder.toString(); 593529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 594529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 595a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner public void dumpLocked(PrintWriter pw, String prefix, boolean dumpAll) { 596529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn final String subPrefix = " " + prefix; 597529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn final String subSubPrefix = " " + subPrefix; 598529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 599529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn for (int i = 0; i < mDisplayContentsAnimators.size(); i++) { 600529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("DisplayContentsAnimator #"); 601529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(mDisplayContentsAnimators.keyAt(i)); 602529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(":"); 603529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); 604968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final WindowList windows = 605968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner mService.getWindowListLocked(mDisplayContentsAnimators.keyAt(i)); 606968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final int N = windows.size(); 607968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner for (int j = 0; j < N; j++) { 608968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner WindowStateAnimator wanim = windows.get(j).mWinAnimator; 609529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.print("Window #"); pw.print(j); 610529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(": "); pw.println(wanim); 611529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 612529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (displayAnimator.mScreenRotationAnimation != null) { 613529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("mScreenRotationAnimation:"); 614529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn displayAnimator.mScreenRotationAnimation.printTo(subSubPrefix, pw); 615529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } else if (dumpAll) { 616529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(subPrefix); pw.println("no ScreenRotationAnimation "); 617529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 618529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 619529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 620529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(); 621529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn 622529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (dumpAll) { 623529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mAnimTransactionSequence="); 624529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(mAnimTransactionSequence); 625529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(" mForceHiding="); pw.println(forceHidingToString()); 626529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mCurrentTime="); 627529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(TimeUtils.formatUptime(mCurrentTime)); 628529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 629529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mBulkUpdateParams != 0) { 630529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mBulkUpdateParams=0x"); 631529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(Integer.toHexString(mBulkUpdateParams)); 632529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(bulkUpdateParamsToString(mBulkUpdateParams)); 633529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 634529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mWindowDetachedWallpaper != null) { 635529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mWindowDetachedWallpaper="); 636529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.println(mWindowDetachedWallpaper); 637529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 638529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn if (mUniverseBackground != null) { 639529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print("mUniverseBackground="); pw.print(mUniverseBackground); 640529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(" mAboveUniverseLayer="); pw.println(mAboveUniverseLayer); 641529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn } 642e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner } 643bec53f7066852c1c5877c51fcd8c55840891d866Craig Mautner 64466f78d7a979775efb148873797bac4584ddb3b83Craig Mautner int getPendingLayoutChanges(final int displayId) { 64566f78d7a979775efb148873797bac4584ddb3b83Craig Mautner return mService.getDisplayContentLocked(displayId).pendingLayoutChanges; 64666f78d7a979775efb148873797bac4584ddb3b83Craig Mautner } 64766f78d7a979775efb148873797bac4584ddb3b83Craig Mautner 64876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner void setPendingLayoutChanges(final int displayId, final int changes) { 64966f78d7a979775efb148873797bac4584ddb3b83Craig Mautner mService.getDisplayContentLocked(displayId).pendingLayoutChanges |= changes; 65076a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 65176a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner 65276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner void setAppLayoutChanges(final AppWindowAnimator appAnimator, final int changes, String s) { 65376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner // Used to track which displays layout changes have been done. 654f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn SparseIntArray displays = new SparseIntArray(2); 655968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner WindowList windows = appAnimator.mAppToken.allAppWindows; 656968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner for (int i = windows.size() - 1; i >= 0; i--) { 657968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final int displayId = windows.get(i).getDisplayId(); 65876a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner if (displays.indexOfKey(displayId) < 0) { 65976a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner setPendingLayoutChanges(displayId, changes); 66076a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { 66166f78d7a979775efb148873797bac4584ddb3b83Craig Mautner mService.debugLayoutRepeats(s, getPendingLayoutChanges(displayId)); 66276a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 66376a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner // Keep from processing this display again. 66476a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner displays.put(displayId, changes); 66576a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 66676a7165719dc3ccce902953f6244e2c2668aa753Craig Mautner } 6674d7349bb6df5a01ba451aa1abd4c9f6349a57016Craig Mautner } 668a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 669a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner private DisplayContentsAnimator getDisplayContentsAnimatorLocked(int displayId) { 670a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId); 671a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner if (displayAnimator == null) { 67205d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner displayAnimator = new DisplayContentsAnimator(); 673a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner mDisplayContentsAnimators.put(displayId, displayAnimator); 674a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 675a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner return displayAnimator; 676a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 677a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 678a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner void setScreenRotationAnimationLocked(int displayId, ScreenRotationAnimation animation) { 679a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner getDisplayContentsAnimatorLocked(displayId).mScreenRotationAnimation = animation; 680a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 681a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 682a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner ScreenRotationAnimation getScreenRotationAnimationLocked(int displayId) { 683a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner return getDisplayContentsAnimatorLocked(displayId).mScreenRotationAnimation; 684a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 685a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner 686ac439e57a795d48e287ea51a9bd999244a9b0e65Craig Mautner private class DisplayContentsAnimator { 687a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner ScreenRotationAnimation mScreenRotationAnimation = null; 688a91f9e2959ee905f97977a88fe45bde6ffb874b0Craig Mautner } 689764983d16925daeeba3f29fd1f844187655d1386Craig Mautner} 690