Loading services/core/java/com/android/server/wm/WindowAnimator.java +0 −29 Original line number Diff line number Diff line Loading @@ -146,35 +146,6 @@ public class WindowAnimator { mDisplayContentsAnimators.delete(displayId); } void hideWallpapersLocked(final WindowState w) { final WindowState wallpaperTarget = mService.mWallpaperTarget; final WindowState lowerWallpaperTarget = mService.mLowerWallpaperTarget; final ArrayList<WindowToken> wallpaperTokens = mService.mWallpaperTokens; if ((wallpaperTarget == w && lowerWallpaperTarget == null) || wallpaperTarget == null) { final int numTokens = wallpaperTokens.size(); for (int i = numTokens - 1; i >= 0; i--) { final WindowToken token = wallpaperTokens.get(i); final int numWindows = token.windows.size(); for (int j = numWindows - 1; j >= 0; j--) { final WindowState wallpaper = token.windows.get(j); final WindowStateAnimator winAnimator = wallpaper.mWinAnimator; if (!winAnimator.mLastHidden) { winAnimator.hide(); mService.dispatchWallpaperVisibility(wallpaper, false); setPendingLayoutChanges(Display.DEFAULT_DISPLAY, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); } } if (WindowManagerService.DEBUG_WALLPAPER_LIGHT && !token.hidden) Slog.d(TAG, "Hiding wallpaper " + token + " from " + w + " target=" + wallpaperTarget + " lower=" + lowerWallpaperTarget + "\n" + Debug.getCallers(5, " ")); token.hidden = true; } } } private void updateAppWindowsLocked(int displayId) { ArrayList<TaskStack> stacks = mService.getDisplayContentLocked(displayId).getStacks(); for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { Loading services/core/java/com/android/server/wm/WindowManagerService.java +75 −95 Original line number Diff line number Diff line Loading @@ -582,7 +582,7 @@ public class WindowManagerService extends IWindowManager.Stub } } final ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); private final ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); // If non-null, this is the currently visible window that is associated // with the wallpaper. Loading Loading @@ -1694,7 +1694,7 @@ public class WindowManagerService extends IWindowManager.Stub return true; } final boolean isWallpaperVisible(WindowState wallpaperTarget) { private boolean isWallpaperVisible(WindowState wallpaperTarget) { if (DEBUG_WALLPAPER) Slog.v(TAG, "Wallpaper vis: target " + wallpaperTarget + ", obscured=" + (wallpaperTarget != null ? Boolean.toString(wallpaperTarget.mObscured) : "??") + " anim=" + ((wallpaperTarget != null && wallpaperTarget.mAppToken != null) Loading @@ -1708,6 +1708,34 @@ public class WindowManagerService extends IWindowManager.Stub || mLowerWallpaperTarget != null; } void hideWallpapersLocked(final WindowState winGoingAway) { if (mWallpaperTarget != null && (mWallpaperTarget != winGoingAway || mLowerWallpaperTarget != null)) { return; } for (int i = mWallpaperTokens.size() - 1; i >= 0; i--) { final WindowToken token = mWallpaperTokens.get(i); for (int j = token.windows.size() - 1; j >= 0; j--) { final WindowState wallpaper = token.windows.get(j); final WindowStateAnimator winAnimator = wallpaper.mWinAnimator; if (!winAnimator.mLastHidden) { winAnimator.hide(); dispatchWallpaperVisibility(wallpaper, false); final DisplayContent displayContent = wallpaper.getDisplayContent(); if (displayContent != null) { displayContent.pendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; } } } if (DEBUG_WALLPAPER_LIGHT && !token.hidden) Slog.d(TAG, "Hiding wallpaper " + token + " from " + winGoingAway + " target=" + mWallpaperTarget + " lower=" + mLowerWallpaperTarget + "\n" + Debug.getCallers(5, " ")); token.hidden = true; } } static final int ADJUST_WALLPAPER_LAYERS_CHANGED = 1<<1; static final int ADJUST_WALLPAPER_VISIBILITY_CHANGED = 1<<2; Loading Loading @@ -1939,43 +1967,37 @@ public class WindowManagerService extends IWindowManager.Stub // Start stepping backwards from here, ensuring that our wallpaper windows // are correctly placed. int changed = 0; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowToken token = mWallpaperTokens.get(curTokenNdx); if (token.hidden == visible) { if (DEBUG_WALLPAPER_LIGHT) Slog.d(TAG, "Wallpaper token " + token + " hidden=" + !visible); changed |= ADJUST_WALLPAPER_VISIBILITY_CHANGED; token.hidden = !visible; // Need to do a layout to ensure the wallpaper now has the // correct size. // Need to do a layout to ensure the wallpaper now has the correct size. getDefaultDisplayContentLocked().layoutNeeded = true; } int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); final WindowList tokenWindows = token.windows; for (int wallpaperNdx = tokenWindows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = tokenWindows.get(wallpaperNdx); if (visible) { updateWallpaperOffsetLocked(wallpaper, dw, dh, false); } // First, make sure the client has the current visibility // state. // First, make sure the client has the current visibility state. dispatchWallpaperVisibility(wallpaper, visible); wallpaper.mWinAnimator.mAnimLayer = wallpaper.mLayer + mWallpaperAnimLayerAdjustment; wallpaper.mWinAnimator.mAnimLayer = wallpaper.mLayer + mWallpaperAnimLayerAdjustment; if (DEBUG_LAYERS || DEBUG_WALLPAPER_LIGHT) Slog.v(TAG, "adjustWallpaper win " + wallpaper + " anim layer: " + wallpaper.mWinAnimator.mAnimLayer); // First, if this window is at the current index, then all // is well. // First, if this window is at the current index, then all is well. if (wallpaper == foundW) { foundI--; foundW = foundI > 0 ? windows.get(foundI-1) : null; foundW = foundI > 0 ? windows.get(foundI - 1) : null; continue; } Loading Loading @@ -2015,48 +2037,20 @@ public class WindowManagerService extends IWindowManager.Stub } } /* final TaskStack targetStack = mWallpaperTarget == null ? null : mWallpaperTarget.getStack(); if ((changed & ADJUST_WALLPAPER_LAYERS_CHANGED) != 0 && targetStack != null && !targetStack.isHomeStack()) { // If the wallpaper target is not on the home stack then make sure that all windows // from other non-home stacks are above the wallpaper. for (i = foundI - 1; i >= 0; --i) { WindowState win = windows.get(i); if (!win.isVisibleLw()) { continue; } final TaskStack winStack = win.getStack(); if (winStack != null && !winStack.isHomeStack() && winStack != targetStack) { windows.remove(i); windows.add(foundI + 1, win); } } } */ if (targetChanged && DEBUG_WALLPAPER_LIGHT) { Slog.d(TAG, "New wallpaper: target=" + mWallpaperTarget + " lower=" + mLowerWallpaperTarget + " upper=" if (targetChanged && DEBUG_WALLPAPER_LIGHT) Slog.d(TAG, "New wallpaper: target=" + mWallpaperTarget + " lower=" + mLowerWallpaperTarget + " upper=" + mUpperWallpaperTarget); } return changed; } void setWallpaperAnimLayerAdjustmentLocked(int adj) { if (DEBUG_LAYERS || DEBUG_WALLPAPER) Slog.v(TAG, "Setting wallpaper layer adj to " + adj); if (DEBUG_LAYERS || DEBUG_WALLPAPER) Slog.v(TAG, "Setting wallpaper layer adj to " + adj); mWallpaperAnimLayerAdjustment = adj; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowList windows = mWallpaperTokens.get(curTokenNdx).windows; for (int wallpaperNdx = windows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = windows.get(wallpaperNdx); wallpaper.mWinAnimator.mAnimLayer = wallpaper.mLayer + adj; if (DEBUG_LAYERS || DEBUG_WALLPAPER) Slog.v(TAG, "setWallpaper win " + wallpaper + " anim layer: " + wallpaper.mWinAnimator.mAnimLayer); Loading Loading @@ -2190,14 +2184,10 @@ public class WindowManagerService extends IWindowManager.Stub } } int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowList windows = mWallpaperTokens.get(curTokenNdx).windows; for (int wallpaperNdx = windows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = windows.get(wallpaperNdx); if (updateWallpaperOffsetLocked(wallpaper, dw, dh, sync)) { WindowStateAnimator winAnimator = wallpaper.mWinAnimator; winAnimator.computeShownFrameLocked(); Loading Loading @@ -2229,7 +2219,7 @@ public class WindowManagerService extends IWindowManager.Stub } } void updateWallpaperVisibilityLocked() { private void updateWallpaperVisibilityLocked() { final boolean visible = isWallpaperVisible(mWallpaperTarget); final DisplayContent displayContent = mWallpaperTarget.getDisplayContent(); if (displayContent == null) { Loading @@ -2239,21 +2229,18 @@ public class WindowManagerService extends IWindowManager.Stub final int dw = displayInfo.logicalWidth; final int dh = displayInfo.logicalHeight; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowToken token = mWallpaperTokens.get(curTokenNdx); if (token.hidden == visible) { token.hidden = !visible; // Need to do a layout to ensure the wallpaper now has the // correct size. getDefaultDisplayContentLocked().layoutNeeded = true; displayContent.layoutNeeded = true; } int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); final WindowList windows = token.windows; for (int wallpaperNdx = windows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = windows.get(wallpaperNdx); if (visible) { updateWallpaperOffsetLocked(wallpaper, dw, dh, false); } Loading Loading @@ -2911,14 +2898,10 @@ public class WindowManagerService extends IWindowManager.Stub if (window == mWallpaperTarget || window == mLowerWallpaperTarget || window == mUpperWallpaperTarget) { boolean doWait = sync; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { final WindowList windows = mWallpaperTokens.get(curTokenNdx).windows; for (int wallpaperNdx = windows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = windows.get(wallpaperNdx); try { wallpaper.mClient.dispatchWallpaperCommand(action, x, y, z, extras, sync); Loading Loading @@ -3556,13 +3539,13 @@ public class WindowManagerService extends IWindowManager.Stub false /*updateInputWindows*/); } if (delayed) { if (displayContent != null) { if (delayed && displayContent != null) { displayContent.mExitingTokens.add(wtoken); } } else if (wtoken.windowType == TYPE_WALLPAPER) { mWallpaperTokens.remove(wtoken); } } else if (wtoken.windowType == TYPE_WALLPAPER) { mWallpaperTokens.remove(wtoken); } mInputMonitor.updateInputWindowsLw(true /*force*/); Loading Loading @@ -9583,9 +9566,6 @@ public class WindowManagerService extends IWindowManager.Stub // it is animating. displayContent.pendingLayoutChanges = 0; if (DEBUG_LAYOUT_REPEATS) debugLayoutRepeats("loop number " + mLayoutRepeatCount, displayContent.pendingLayoutChanges); if (isDefaultDisplay) { mPolicy.beginPostLayoutPolicyLw(dw, dh); for (i = windows.size() - 1; i >= 0; i--) { Loading Loading @@ -9669,7 +9649,7 @@ public class WindowManagerService extends IWindowManager.Stub if (w.mHasSurface && !w.isHiddenFromUserLocked()) { // Take care of the window being ready to display. final boolean committed = winAnimator.commitFinishDrawingLocked(currentTime); winAnimator.commitFinishDrawingLocked(); if (isDefaultDisplay && committed) { if (w.mAttrs.type == TYPE_DREAM) { // HACK: When a dream is shown, it may at that Loading Loading @@ -10799,7 +10779,7 @@ public class WindowManagerService extends IWindowManager.Stub void dumpTokensLocked(PrintWriter pw, boolean dumpAll) { pw.println("WINDOW MANAGER TOKENS (dumpsys window tokens)"); if (mTokenMap.size() > 0) { if (!mTokenMap.isEmpty()) { pw.println(" All tokens:"); Iterator<WindowToken> it = mTokenMap.values().iterator(); while (it.hasNext()) { Loading @@ -10813,7 +10793,7 @@ public class WindowManagerService extends IWindowManager.Stub } } } if (mWallpaperTokens.size() > 0) { if (!mWallpaperTokens.isEmpty()) { pw.println(); pw.println(" Wallpaper tokens:"); for (int i=mWallpaperTokens.size()-1; i>=0; i--) { Loading @@ -10828,7 +10808,7 @@ public class WindowManagerService extends IWindowManager.Stub } } } if (mFinishedStarting.size() > 0) { if (!mFinishedStarting.isEmpty()) { pw.println(); pw.println(" Finishing start of application tokens:"); for (int i=mFinishedStarting.size()-1; i>=0; i--) { Loading @@ -10843,7 +10823,7 @@ public class WindowManagerService extends IWindowManager.Stub } } } if (mOpeningApps.size() > 0 || mClosingApps.size() > 0) { if (!mOpeningApps.isEmpty() || !mClosingApps.isEmpty()) { pw.println(); if (mOpeningApps.size() > 0) { pw.print(" mOpeningApps="); pw.println(mOpeningApps); Loading services/core/java/com/android/server/wm/WindowStateAnimator.java +9 −18 Original line number Diff line number Diff line Loading @@ -53,21 +53,16 @@ import android.view.View; import android.view.WindowManager; import android.view.WindowManagerPolicy; import android.view.WindowManager.LayoutParams; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; import android.view.animation.Transformation; import com.android.internal.R; import com.android.server.wm.WindowManagerService.H; import java.io.PrintWriter; import java.util.ArrayList; class WinAnimatorList extends ArrayList<WindowStateAnimator> { } /** * Keep track of animations and surface operations for a single WindowState. **/ Loading Loading @@ -185,7 +180,7 @@ class WindowStateAnimator { int mAttrType; public WindowStateAnimator(final WindowState win) { WindowStateAnimator(final WindowState win) { final WindowManagerService service = win.mService; mService = service; Loading Loading @@ -482,7 +477,7 @@ class WindowStateAnimator { mService.mPendingRemove.add(mWin); mWin.mRemoveOnExit = false; } mAnimator.hideWallpapersLocked(mWin); mService.hideWallpapersLocked(mWin); } void hide() { Loading Loading @@ -523,7 +518,7 @@ class WindowStateAnimator { } // This must be called while inside a transaction. boolean commitFinishDrawingLocked(long currentTime) { boolean commitFinishDrawingLocked() { if (DEBUG_STARTING_WINDOW && mWin.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING) { Slog.i(TAG, "commitFinishDrawingLocked: " + mWin + " cur mDrawState=" Loading Loading @@ -980,7 +975,7 @@ class WindowStateAnimator { } mSurfaceControl.destroy(); } mAnimator.hideWallpapersLocked(mWin); mService.hideWallpapersLocked(mWin); } catch (RuntimeException e) { Slog.w(TAG, "Exception thrown when destroying Window " + this + " surface " + mSurfaceControl + " session " + mSession Loading @@ -1006,7 +1001,7 @@ class WindowStateAnimator { WindowManagerService.logSurface(mWin, "DESTROY PENDING", e); } mPendingDestroySurface.destroy(); mAnimator.hideWallpapersLocked(mWin); mService.hideWallpapersLocked(mWin); } } catch (RuntimeException e) { Slog.w(TAG, "Exception thrown when destroying Window " Loading Loading @@ -1454,7 +1449,7 @@ class WindowStateAnimator { hide(); } else if (w.mAttachedHidden || !w.isOnScreen()) { hide(); mAnimator.hideWallpapersLocked(w); mService.hideWallpapersLocked(w); // If we are waiting for this window to handle an // orientation change, well, it is hidden, so Loading Loading @@ -1626,13 +1621,8 @@ class WindowStateAnimator { } if (DEBUG_VISIBILITY || (DEBUG_STARTING_WINDOW && mWin.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING)) { RuntimeException e = null; if (!WindowManagerService.HIDE_STACK_CRAWLS) { e = new RuntimeException(); e.fillInStackTrace(); } Slog.v(TAG, "performShow on " + this + ": mDrawState=" + mDrawState + " readyForDisplay=" + ": mDrawState=" + drawStateToString() + " readyForDisplay=" + mWin.isReadyForDisplayIgnoringKeyguard() + " starting=" + (mWin.mAttrs.type == TYPE_APPLICATION_STARTING) + " during animation: policyVis=" + mWin.mPolicyVisibility Loading @@ -1643,7 +1633,8 @@ class WindowStateAnimator { + (mWin.mAppToken != null ? mWin.mAppToken.hidden : false) + " animating=" + mAnimating + " tok animating=" + (mAppAnimator != null ? mAppAnimator.animating : false), e); + (mAppAnimator != null ? mAppAnimator.animating : false) + " Callers=" + Debug.getCallers(3)); } if (mDrawState == READY_TO_SHOW && mWin.isReadyForDisplayIgnoringKeyguard()) { if (SHOW_TRANSACTIONS || DEBUG_ORIENTATION) Loading Loading
services/core/java/com/android/server/wm/WindowAnimator.java +0 −29 Original line number Diff line number Diff line Loading @@ -146,35 +146,6 @@ public class WindowAnimator { mDisplayContentsAnimators.delete(displayId); } void hideWallpapersLocked(final WindowState w) { final WindowState wallpaperTarget = mService.mWallpaperTarget; final WindowState lowerWallpaperTarget = mService.mLowerWallpaperTarget; final ArrayList<WindowToken> wallpaperTokens = mService.mWallpaperTokens; if ((wallpaperTarget == w && lowerWallpaperTarget == null) || wallpaperTarget == null) { final int numTokens = wallpaperTokens.size(); for (int i = numTokens - 1; i >= 0; i--) { final WindowToken token = wallpaperTokens.get(i); final int numWindows = token.windows.size(); for (int j = numWindows - 1; j >= 0; j--) { final WindowState wallpaper = token.windows.get(j); final WindowStateAnimator winAnimator = wallpaper.mWinAnimator; if (!winAnimator.mLastHidden) { winAnimator.hide(); mService.dispatchWallpaperVisibility(wallpaper, false); setPendingLayoutChanges(Display.DEFAULT_DISPLAY, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER); } } if (WindowManagerService.DEBUG_WALLPAPER_LIGHT && !token.hidden) Slog.d(TAG, "Hiding wallpaper " + token + " from " + w + " target=" + wallpaperTarget + " lower=" + lowerWallpaperTarget + "\n" + Debug.getCallers(5, " ")); token.hidden = true; } } } private void updateAppWindowsLocked(int displayId) { ArrayList<TaskStack> stacks = mService.getDisplayContentLocked(displayId).getStacks(); for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { Loading
services/core/java/com/android/server/wm/WindowManagerService.java +75 −95 Original line number Diff line number Diff line Loading @@ -582,7 +582,7 @@ public class WindowManagerService extends IWindowManager.Stub } } final ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); private final ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); // If non-null, this is the currently visible window that is associated // with the wallpaper. Loading Loading @@ -1694,7 +1694,7 @@ public class WindowManagerService extends IWindowManager.Stub return true; } final boolean isWallpaperVisible(WindowState wallpaperTarget) { private boolean isWallpaperVisible(WindowState wallpaperTarget) { if (DEBUG_WALLPAPER) Slog.v(TAG, "Wallpaper vis: target " + wallpaperTarget + ", obscured=" + (wallpaperTarget != null ? Boolean.toString(wallpaperTarget.mObscured) : "??") + " anim=" + ((wallpaperTarget != null && wallpaperTarget.mAppToken != null) Loading @@ -1708,6 +1708,34 @@ public class WindowManagerService extends IWindowManager.Stub || mLowerWallpaperTarget != null; } void hideWallpapersLocked(final WindowState winGoingAway) { if (mWallpaperTarget != null && (mWallpaperTarget != winGoingAway || mLowerWallpaperTarget != null)) { return; } for (int i = mWallpaperTokens.size() - 1; i >= 0; i--) { final WindowToken token = mWallpaperTokens.get(i); for (int j = token.windows.size() - 1; j >= 0; j--) { final WindowState wallpaper = token.windows.get(j); final WindowStateAnimator winAnimator = wallpaper.mWinAnimator; if (!winAnimator.mLastHidden) { winAnimator.hide(); dispatchWallpaperVisibility(wallpaper, false); final DisplayContent displayContent = wallpaper.getDisplayContent(); if (displayContent != null) { displayContent.pendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; } } } if (DEBUG_WALLPAPER_LIGHT && !token.hidden) Slog.d(TAG, "Hiding wallpaper " + token + " from " + winGoingAway + " target=" + mWallpaperTarget + " lower=" + mLowerWallpaperTarget + "\n" + Debug.getCallers(5, " ")); token.hidden = true; } } static final int ADJUST_WALLPAPER_LAYERS_CHANGED = 1<<1; static final int ADJUST_WALLPAPER_VISIBILITY_CHANGED = 1<<2; Loading Loading @@ -1939,43 +1967,37 @@ public class WindowManagerService extends IWindowManager.Stub // Start stepping backwards from here, ensuring that our wallpaper windows // are correctly placed. int changed = 0; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowToken token = mWallpaperTokens.get(curTokenNdx); if (token.hidden == visible) { if (DEBUG_WALLPAPER_LIGHT) Slog.d(TAG, "Wallpaper token " + token + " hidden=" + !visible); changed |= ADJUST_WALLPAPER_VISIBILITY_CHANGED; token.hidden = !visible; // Need to do a layout to ensure the wallpaper now has the // correct size. // Need to do a layout to ensure the wallpaper now has the correct size. getDefaultDisplayContentLocked().layoutNeeded = true; } int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); final WindowList tokenWindows = token.windows; for (int wallpaperNdx = tokenWindows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = tokenWindows.get(wallpaperNdx); if (visible) { updateWallpaperOffsetLocked(wallpaper, dw, dh, false); } // First, make sure the client has the current visibility // state. // First, make sure the client has the current visibility state. dispatchWallpaperVisibility(wallpaper, visible); wallpaper.mWinAnimator.mAnimLayer = wallpaper.mLayer + mWallpaperAnimLayerAdjustment; wallpaper.mWinAnimator.mAnimLayer = wallpaper.mLayer + mWallpaperAnimLayerAdjustment; if (DEBUG_LAYERS || DEBUG_WALLPAPER_LIGHT) Slog.v(TAG, "adjustWallpaper win " + wallpaper + " anim layer: " + wallpaper.mWinAnimator.mAnimLayer); // First, if this window is at the current index, then all // is well. // First, if this window is at the current index, then all is well. if (wallpaper == foundW) { foundI--; foundW = foundI > 0 ? windows.get(foundI-1) : null; foundW = foundI > 0 ? windows.get(foundI - 1) : null; continue; } Loading Loading @@ -2015,48 +2037,20 @@ public class WindowManagerService extends IWindowManager.Stub } } /* final TaskStack targetStack = mWallpaperTarget == null ? null : mWallpaperTarget.getStack(); if ((changed & ADJUST_WALLPAPER_LAYERS_CHANGED) != 0 && targetStack != null && !targetStack.isHomeStack()) { // If the wallpaper target is not on the home stack then make sure that all windows // from other non-home stacks are above the wallpaper. for (i = foundI - 1; i >= 0; --i) { WindowState win = windows.get(i); if (!win.isVisibleLw()) { continue; } final TaskStack winStack = win.getStack(); if (winStack != null && !winStack.isHomeStack() && winStack != targetStack) { windows.remove(i); windows.add(foundI + 1, win); } } } */ if (targetChanged && DEBUG_WALLPAPER_LIGHT) { Slog.d(TAG, "New wallpaper: target=" + mWallpaperTarget + " lower=" + mLowerWallpaperTarget + " upper=" if (targetChanged && DEBUG_WALLPAPER_LIGHT) Slog.d(TAG, "New wallpaper: target=" + mWallpaperTarget + " lower=" + mLowerWallpaperTarget + " upper=" + mUpperWallpaperTarget); } return changed; } void setWallpaperAnimLayerAdjustmentLocked(int adj) { if (DEBUG_LAYERS || DEBUG_WALLPAPER) Slog.v(TAG, "Setting wallpaper layer adj to " + adj); if (DEBUG_LAYERS || DEBUG_WALLPAPER) Slog.v(TAG, "Setting wallpaper layer adj to " + adj); mWallpaperAnimLayerAdjustment = adj; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowList windows = mWallpaperTokens.get(curTokenNdx).windows; for (int wallpaperNdx = windows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = windows.get(wallpaperNdx); wallpaper.mWinAnimator.mAnimLayer = wallpaper.mLayer + adj; if (DEBUG_LAYERS || DEBUG_WALLPAPER) Slog.v(TAG, "setWallpaper win " + wallpaper + " anim layer: " + wallpaper.mWinAnimator.mAnimLayer); Loading Loading @@ -2190,14 +2184,10 @@ public class WindowManagerService extends IWindowManager.Stub } } int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowList windows = mWallpaperTokens.get(curTokenNdx).windows; for (int wallpaperNdx = windows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = windows.get(wallpaperNdx); if (updateWallpaperOffsetLocked(wallpaper, dw, dh, sync)) { WindowStateAnimator winAnimator = wallpaper.mWinAnimator; winAnimator.computeShownFrameLocked(); Loading Loading @@ -2229,7 +2219,7 @@ public class WindowManagerService extends IWindowManager.Stub } } void updateWallpaperVisibilityLocked() { private void updateWallpaperVisibilityLocked() { final boolean visible = isWallpaperVisible(mWallpaperTarget); final DisplayContent displayContent = mWallpaperTarget.getDisplayContent(); if (displayContent == null) { Loading @@ -2239,21 +2229,18 @@ public class WindowManagerService extends IWindowManager.Stub final int dw = displayInfo.logicalWidth; final int dh = displayInfo.logicalHeight; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowToken token = mWallpaperTokens.get(curTokenNdx); if (token.hidden == visible) { token.hidden = !visible; // Need to do a layout to ensure the wallpaper now has the // correct size. getDefaultDisplayContentLocked().layoutNeeded = true; displayContent.layoutNeeded = true; } int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); final WindowList windows = token.windows; for (int wallpaperNdx = windows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = windows.get(wallpaperNdx); if (visible) { updateWallpaperOffsetLocked(wallpaper, dw, dh, false); } Loading Loading @@ -2911,14 +2898,10 @@ public class WindowManagerService extends IWindowManager.Stub if (window == mWallpaperTarget || window == mLowerWallpaperTarget || window == mUpperWallpaperTarget) { boolean doWait = sync; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { curTokenIndex--; WindowToken token = mWallpaperTokens.get(curTokenIndex); int curWallpaperIndex = token.windows.size(); while (curWallpaperIndex > 0) { curWallpaperIndex--; WindowState wallpaper = token.windows.get(curWallpaperIndex); for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { final WindowList windows = mWallpaperTokens.get(curTokenNdx).windows; for (int wallpaperNdx = windows.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) { WindowState wallpaper = windows.get(wallpaperNdx); try { wallpaper.mClient.dispatchWallpaperCommand(action, x, y, z, extras, sync); Loading Loading @@ -3556,13 +3539,13 @@ public class WindowManagerService extends IWindowManager.Stub false /*updateInputWindows*/); } if (delayed) { if (displayContent != null) { if (delayed && displayContent != null) { displayContent.mExitingTokens.add(wtoken); } } else if (wtoken.windowType == TYPE_WALLPAPER) { mWallpaperTokens.remove(wtoken); } } else if (wtoken.windowType == TYPE_WALLPAPER) { mWallpaperTokens.remove(wtoken); } mInputMonitor.updateInputWindowsLw(true /*force*/); Loading Loading @@ -9583,9 +9566,6 @@ public class WindowManagerService extends IWindowManager.Stub // it is animating. displayContent.pendingLayoutChanges = 0; if (DEBUG_LAYOUT_REPEATS) debugLayoutRepeats("loop number " + mLayoutRepeatCount, displayContent.pendingLayoutChanges); if (isDefaultDisplay) { mPolicy.beginPostLayoutPolicyLw(dw, dh); for (i = windows.size() - 1; i >= 0; i--) { Loading Loading @@ -9669,7 +9649,7 @@ public class WindowManagerService extends IWindowManager.Stub if (w.mHasSurface && !w.isHiddenFromUserLocked()) { // Take care of the window being ready to display. final boolean committed = winAnimator.commitFinishDrawingLocked(currentTime); winAnimator.commitFinishDrawingLocked(); if (isDefaultDisplay && committed) { if (w.mAttrs.type == TYPE_DREAM) { // HACK: When a dream is shown, it may at that Loading Loading @@ -10799,7 +10779,7 @@ public class WindowManagerService extends IWindowManager.Stub void dumpTokensLocked(PrintWriter pw, boolean dumpAll) { pw.println("WINDOW MANAGER TOKENS (dumpsys window tokens)"); if (mTokenMap.size() > 0) { if (!mTokenMap.isEmpty()) { pw.println(" All tokens:"); Iterator<WindowToken> it = mTokenMap.values().iterator(); while (it.hasNext()) { Loading @@ -10813,7 +10793,7 @@ public class WindowManagerService extends IWindowManager.Stub } } } if (mWallpaperTokens.size() > 0) { if (!mWallpaperTokens.isEmpty()) { pw.println(); pw.println(" Wallpaper tokens:"); for (int i=mWallpaperTokens.size()-1; i>=0; i--) { Loading @@ -10828,7 +10808,7 @@ public class WindowManagerService extends IWindowManager.Stub } } } if (mFinishedStarting.size() > 0) { if (!mFinishedStarting.isEmpty()) { pw.println(); pw.println(" Finishing start of application tokens:"); for (int i=mFinishedStarting.size()-1; i>=0; i--) { Loading @@ -10843,7 +10823,7 @@ public class WindowManagerService extends IWindowManager.Stub } } } if (mOpeningApps.size() > 0 || mClosingApps.size() > 0) { if (!mOpeningApps.isEmpty() || !mClosingApps.isEmpty()) { pw.println(); if (mOpeningApps.size() > 0) { pw.print(" mOpeningApps="); pw.println(mOpeningApps); Loading
services/core/java/com/android/server/wm/WindowStateAnimator.java +9 −18 Original line number Diff line number Diff line Loading @@ -53,21 +53,16 @@ import android.view.View; import android.view.WindowManager; import android.view.WindowManagerPolicy; import android.view.WindowManager.LayoutParams; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; import android.view.animation.Transformation; import com.android.internal.R; import com.android.server.wm.WindowManagerService.H; import java.io.PrintWriter; import java.util.ArrayList; class WinAnimatorList extends ArrayList<WindowStateAnimator> { } /** * Keep track of animations and surface operations for a single WindowState. **/ Loading Loading @@ -185,7 +180,7 @@ class WindowStateAnimator { int mAttrType; public WindowStateAnimator(final WindowState win) { WindowStateAnimator(final WindowState win) { final WindowManagerService service = win.mService; mService = service; Loading Loading @@ -482,7 +477,7 @@ class WindowStateAnimator { mService.mPendingRemove.add(mWin); mWin.mRemoveOnExit = false; } mAnimator.hideWallpapersLocked(mWin); mService.hideWallpapersLocked(mWin); } void hide() { Loading Loading @@ -523,7 +518,7 @@ class WindowStateAnimator { } // This must be called while inside a transaction. boolean commitFinishDrawingLocked(long currentTime) { boolean commitFinishDrawingLocked() { if (DEBUG_STARTING_WINDOW && mWin.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING) { Slog.i(TAG, "commitFinishDrawingLocked: " + mWin + " cur mDrawState=" Loading Loading @@ -980,7 +975,7 @@ class WindowStateAnimator { } mSurfaceControl.destroy(); } mAnimator.hideWallpapersLocked(mWin); mService.hideWallpapersLocked(mWin); } catch (RuntimeException e) { Slog.w(TAG, "Exception thrown when destroying Window " + this + " surface " + mSurfaceControl + " session " + mSession Loading @@ -1006,7 +1001,7 @@ class WindowStateAnimator { WindowManagerService.logSurface(mWin, "DESTROY PENDING", e); } mPendingDestroySurface.destroy(); mAnimator.hideWallpapersLocked(mWin); mService.hideWallpapersLocked(mWin); } } catch (RuntimeException e) { Slog.w(TAG, "Exception thrown when destroying Window " Loading Loading @@ -1454,7 +1449,7 @@ class WindowStateAnimator { hide(); } else if (w.mAttachedHidden || !w.isOnScreen()) { hide(); mAnimator.hideWallpapersLocked(w); mService.hideWallpapersLocked(w); // If we are waiting for this window to handle an // orientation change, well, it is hidden, so Loading Loading @@ -1626,13 +1621,8 @@ class WindowStateAnimator { } if (DEBUG_VISIBILITY || (DEBUG_STARTING_WINDOW && mWin.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING)) { RuntimeException e = null; if (!WindowManagerService.HIDE_STACK_CRAWLS) { e = new RuntimeException(); e.fillInStackTrace(); } Slog.v(TAG, "performShow on " + this + ": mDrawState=" + mDrawState + " readyForDisplay=" + ": mDrawState=" + drawStateToString() + " readyForDisplay=" + mWin.isReadyForDisplayIgnoringKeyguard() + " starting=" + (mWin.mAttrs.type == TYPE_APPLICATION_STARTING) + " during animation: policyVis=" + mWin.mPolicyVisibility Loading @@ -1643,7 +1633,8 @@ class WindowStateAnimator { + (mWin.mAppToken != null ? mWin.mAppToken.hidden : false) + " animating=" + mAnimating + " tok animating=" + (mAppAnimator != null ? mAppAnimator.animating : false), e); + (mAppAnimator != null ? mAppAnimator.animating : false) + " Callers=" + Debug.getCallers(3)); } if (mDrawState == READY_TO_SHOW && mWin.isReadyForDisplayIgnoringKeyguard()) { if (SHOW_TRANSACTIONS || DEBUG_ORIENTATION) Loading