diff options
| author | 2018-10-02 15:04:25 +0000 | |
|---|---|---|
| committer | 2018-10-02 15:04:25 +0000 | |
| commit | 75d2c1f13a2a452ccd8096bef591f590e84a126a (patch) | |
| tree | 55ad8725d0eabc35f32b0c9b429049619eb05bcc | |
| parent | a99cd4293ea327f89b381a0127a77431ef175d63 (diff) | |
| parent | 8f52087d8a42c26cdd3a5d8909c9d4f24b57547e (diff) | |
Merge changes I1276375c,I3fd96558,I39f7b1af
* changes:
Remove detached wallpaper animations
Remove WSA.mAnimLayer
Remove WindowStateAnimator.isAnimationSet
18 files changed, 72 insertions, 282 deletions
diff --git a/api/current.txt b/api/current.txt index 6ce400f4a442..e6a31afafa1d 100755 --- a/api/current.txt +++ b/api/current.txt @@ -50337,7 +50337,7 @@ package android.view.animation { method public long computeDurationHint(); method protected void ensureInterpolator(); method public int getBackgroundColor(); - method public boolean getDetachWallpaper(); + method public deprecated boolean getDetachWallpaper(); method public long getDuration(); method public boolean getFillAfter(); method public boolean getFillBefore(); @@ -50361,7 +50361,7 @@ package android.view.animation { method public void scaleCurrentDuration(float); method public void setAnimationListener(android.view.animation.Animation.AnimationListener); method public void setBackgroundColor(int); - method public void setDetachWallpaper(boolean); + method public deprecated void setDetachWallpaper(boolean); method public void setDuration(long); method public void setFillAfter(boolean); method public void setFillBefore(boolean); diff --git a/core/java/android/view/animation/Animation.java b/core/java/android/view/animation/Animation.java index 87b7b057e668..0e1f7675c8c3 100644 --- a/core/java/android/view/animation/Animation.java +++ b/core/java/android/view/animation/Animation.java @@ -203,11 +203,6 @@ public abstract class Animation implements Cloneable { */ private float mScaleFactor = 1f; - /** - * Don't animate the wallpaper. - */ - private boolean mDetachWallpaper = false; - private boolean mShowWallpaper; private boolean mMore = true; @@ -667,9 +662,10 @@ public abstract class Animation implements Cloneable { * * @param detachWallpaper true if the wallpaper should be detached from the animation * @attr ref android.R.styleable#Animation_detachWallpaper + * + * @deprecated All window animations are running with detached wallpaper. */ public void setDetachWallpaper(boolean detachWallpaper) { - mDetachWallpaper = detachWallpaper; } /** @@ -793,9 +789,11 @@ public abstract class Animation implements Cloneable { /** * Return value of {@link #setDetachWallpaper(boolean)}. * @attr ref android.R.styleable#Animation_detachWallpaper + * + * @deprecated All window animations are running with detached wallpaper. */ public boolean getDetachWallpaper() { - return mDetachWallpaper; + return false; } /** diff --git a/services/core/java/com/android/server/wm/AnimationAdapter.java b/services/core/java/com/android/server/wm/AnimationAdapter.java index 00e30507d232..be8a0bd7ad32 100644 --- a/services/core/java/com/android/server/wm/AnimationAdapter.java +++ b/services/core/java/com/android/server/wm/AnimationAdapter.java @@ -35,12 +35,6 @@ interface AnimationAdapter { long STATUS_BAR_TRANSITION_DURATION = 120L; /** - * @return Whether we should detach the wallpaper during the animation. - * @see Animation#setDetachWallpaper - */ - boolean getDetachWallpaper(); - - /** * @return Whether we should show the wallpaper during the animation. * @see Animation#getShowWallpaper() */ diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 6da9f104a212..fc7610239fa3 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -1632,17 +1632,6 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree return null; } - int getLowestAnimLayer() { - for (int i = 0; i < mChildren.size(); i++) { - final WindowState w = mChildren.get(i); - if (w.mRemoved) { - continue; - } - return w.mWinAnimator.mAnimLayer; - } - return Integer.MAX_VALUE; - } - WindowState getHighestAnimLayerWindow(WindowState currentTarget) { WindowState candidate = null; for (int i = mChildren.indexOf(currentTarget); i >= 0; i--) { @@ -1650,8 +1639,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree if (w.mRemoved) { continue; } - if (candidate == null || w.mWinAnimator.mAnimLayer > - candidate.mWinAnimator.mAnimLayer) { + if (candidate == null) { candidate = w; } } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 236982fd76ac..a762fe9362c5 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -439,36 +439,12 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return; } - final int flags = w.mAttrs.flags; - - // If this window is animating, make a note that we have an animating window and take - // care of a request to run a detached wallpaper animation. - if (winAnimator.isAnimationSet()) { - final AnimationAdapter anim = w.getAnimation(); - if (anim != null) { - if ((flags & FLAG_SHOW_WALLPAPER) != 0 && anim.getDetachWallpaper()) { - mTmpWindow = w; - } - final int color = anim.getBackgroundColor(); - if (color != 0) { - final TaskStack stack = w.getStack(); - if (stack != null) { - stack.setAnimationBackground(winAnimator, color); - } - } - } - } - - // If this window's app token is running a detached wallpaper animation, make a note so - // we can ensure the wallpaper is displayed behind it. - final AppWindowToken atoken = winAnimator.mWin.mAppToken; - final AnimationAdapter animation = atoken != null ? atoken.getAnimation() : null; - if (animation != null) { - if ((flags & FLAG_SHOW_WALLPAPER) != 0 && animation.getDetachWallpaper()) { - mTmpWindow = w; - } - - final int color = animation.getBackgroundColor(); + // If this window is animating, ensure the animation background is set. + final AnimationAdapter anim = w.mAppToken != null + ? w.mAppToken.getAnimation() + : w.getAnimation(); + if (anim != null) { + final int color = anim.getBackgroundColor(); if (color != 0) { final TaskStack stack = w.getStack(); if (stack != null) { @@ -2307,21 +2283,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mPinnedStackControllerLocked.setAdjustedForIme(imeVisible, imeHeight); } - /** - * If a window that has an animation specifying a colored background and the current wallpaper - * is visible, then the color goes *below* the wallpaper so we don't cause the wallpaper to - * suddenly disappear. - */ - int getLayerForAnimationBackground(WindowStateAnimator winAnimator) { - final WindowState visibleWallpaper = mBelowAppWindowsContainers.getWindow( - w -> w.mIsWallpaper && w.isVisibleNow()); - - if (visibleWallpaper != null) { - return visibleWallpaper.mWinAnimator.mAnimLayer; - } - return winAnimator.mAnimLayer; - } - void prepareFreezingTaskBounds() { for (int stackNdx = mTaskStackContainers.getChildCount() - 1; stackNdx >= 0; --stackNdx) { final TaskStack stack = mTaskStackContainers.getChildAt(stackNdx); @@ -2746,22 +2707,13 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo if (highestTarget != null) { final AppTransition appTransition = mService.mAppTransition; if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, appTransition + " " + highestTarget - + " animating=" + highestTarget.mWinAnimator.isAnimationSet() - + " layer=" + highestTarget.mWinAnimator.mAnimLayer - + " new layer=" + target.mWinAnimator.mAnimLayer); + + " animating=" + highestTarget.isAnimating()); if (appTransition.isTransitionSet()) { // If we are currently setting up for an animation, hold everything until we // can find out what will happen. setInputMethodTarget(highestTarget, true); return highestTarget; - } else if (highestTarget.mWinAnimator.isAnimationSet() && - highestTarget.mWinAnimator.mAnimLayer > target.mWinAnimator.mAnimLayer) { - // If the window we are currently targeting is involved with an animation, - // and it is on top of the next target we will be over, then hold off on - // moving until that is done. - setInputMethodTarget(highestTarget, true); - return highestTarget; } } } @@ -2934,26 +2886,16 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return false; } - void updateWindowsForAnimator(WindowAnimator animator) { - mTmpWindowAnimator = animator; + void updateWindowsForAnimator() { forAllWindows(mUpdateWindowsForAnimator, true /* traverseTopToBottom */); } - void updateWallpaperForAnimator(WindowAnimator animator) { + /** + * Updates the {@link TaskStack#setAnimationBackground} for all windows. + */ + void updateBackgroundForAnimator() { resetAnimationBackgroundAnimator(); - - // Used to indicate a detached wallpaper. - mTmpWindow = null; - mTmpWindowAnimator = animator; - forAllWindows(mUpdateWallpaperForAnimator, true /* traverseTopToBottom */); - - if (animator.mWindowDetachedWallpaper != mTmpWindow) { - if (DEBUG_WALLPAPER) Slog.v(TAG, "Detached wallpaper changed from " - + animator.mWindowDetachedWallpaper + " to " + mTmpWindow); - animator.mWindowDetachedWallpaper = mTmpWindow; - animator.mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; - } } boolean isInputMethodClientFocus(int uid, int pid) { diff --git a/services/core/java/com/android/server/wm/LocalAnimationAdapter.java b/services/core/java/com/android/server/wm/LocalAnimationAdapter.java index d89d6f056218..77a024cc2e99 100644 --- a/services/core/java/com/android/server/wm/LocalAnimationAdapter.java +++ b/services/core/java/com/android/server/wm/LocalAnimationAdapter.java @@ -44,11 +44,6 @@ class LocalAnimationAdapter implements AnimationAdapter { } @Override - public boolean getDetachWallpaper() { - return mSpec.getDetachWallpaper(); - } - - @Override public boolean getShowWallpaper() { return mSpec.getShowWallpaper(); } @@ -98,13 +93,6 @@ class LocalAnimationAdapter implements AnimationAdapter { interface AnimationSpec { /** - * @see AnimationAdapter#getDetachWallpaper - */ - default boolean getDetachWallpaper() { - return false; - } - - /** * @see AnimationAdapter#getShowWallpaper */ default boolean getShowWallpaper() { diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java index e718c7b2a36e..6fef16304d42 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimationController.java +++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java @@ -609,11 +609,6 @@ public class RecentsAnimationController implements DeathRecipient { } @Override - public boolean getDetachWallpaper() { - return false; - } - - @Override public boolean getShowWallpaper() { return false; } diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java index 00422e3497be..8ec0a014e4a9 100644 --- a/services/core/java/com/android/server/wm/RemoteAnimationController.java +++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java @@ -325,11 +325,6 @@ class RemoteAnimationController implements DeathRecipient { } @Override - public boolean getDetachWallpaper() { - return false; - } - - @Override public boolean getShowWallpaper() { return false; } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 2b8493749c79..00cacebe2960 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -1070,11 +1070,8 @@ public class TaskStack extends WindowContainer<Task> implements } void setAnimationBackground(WindowStateAnimator winAnimator, int color) { - int animLayer = winAnimator.mAnimLayer; - if (mAnimationBackgroundAnimator == null - || animLayer < mAnimationBackgroundAnimator.mAnimLayer) { + if (mAnimationBackgroundAnimator == null) { mAnimationBackgroundAnimator = winAnimator; - animLayer = mDisplayContent.getLayerForAnimationBackground(winAnimator); showAnimationSurface(((color >> 24) & 0xff) / 255f); } } diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java index 3d349ce34d6b..a448f97306f0 100644 --- a/services/core/java/com/android/server/wm/WallpaperController.java +++ b/services/core/java/com/android/server/wm/WallpaperController.java @@ -120,13 +120,11 @@ class WallpaperController { } mFindResults.resetTopWallpaper = true; - if (w != winAnimator.mWindowDetachedWallpaper && w.mAppToken != null) { + if (w.mAppToken != null && w.mAppToken.isHidden() && !w.mAppToken.isSelfAnimating()) { + // If this window's app token is hidden and not animating, it is of no interest to us. - if (w.mAppToken.isHidden() && !w.mAppToken.isSelfAnimating()) { - if (DEBUG_WALLPAPER) Slog.v(TAG, - "Skipping hidden and not animating token: " + w); - return false; - } + if (DEBUG_WALLPAPER) Slog.v(TAG, "Skipping hidden and not animating token: " + w); + return false; } if (DEBUG_WALLPAPER) Slog.v(TAG, "Win " + w + ": isOnScreen=" + w.isOnScreen() + " mDrawState=" + w.mWinAnimator.mDrawState); @@ -177,7 +175,7 @@ class WallpaperController { && (mWallpaperTarget == w || w.isDrawFinishedLw())) { if (DEBUG_WALLPAPER) Slog.v(TAG, "Found wallpaper target: " + w); mFindResults.setWallpaperTarget(w); - if (w == mWallpaperTarget && w.mWinAnimator.isAnimationSet()) { + if (w == mWallpaperTarget && w.isAnimating()) { // The current wallpaper target is animating, so we'll look behind it for // another possible target and figure out what is going on later. if (DEBUG_WALLPAPER) Slog.v(TAG, @@ -185,10 +183,6 @@ class WallpaperController { } // Found a target! End search. return true; - } else if (w == winAnimator.mWindowDetachedWallpaper) { - if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG, - "Found animating detached wallpaper target win: " + w); - mFindResults.setUseTopWallpaperAsTarget(true); } return false; }; @@ -243,7 +237,7 @@ class WallpaperController { } boolean isWallpaperTargetAnimating() { - return mWallpaperTarget != null && mWallpaperTarget.mWinAnimator.isAnimationSet() + return mWallpaperTarget != null && mWallpaperTarget.isAnimating() && (mWallpaperTarget.mAppToken == null || !mWallpaperTarget.mAppToken.isWaitingForTransitionStart()); } diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java index ddda027595da..e15b783b5606 100644 --- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java +++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java @@ -138,7 +138,7 @@ class WallpaperWindowToken extends WindowToken { wallpaper.dispatchWallpaperVisibility(visible); if (DEBUG_LAYERS || DEBUG_WALLPAPER_LIGHT) Slog.v(TAG, "adjustWallpaper win " - + wallpaper + " anim layer: " + wallpaper.mWinAnimator.mAnimLayer); + + wallpaper); } } diff --git a/services/core/java/com/android/server/wm/WindowAnimationSpec.java b/services/core/java/com/android/server/wm/WindowAnimationSpec.java index 825255e556ff..98c77ac719f9 100644 --- a/services/core/java/com/android/server/wm/WindowAnimationSpec.java +++ b/services/core/java/com/android/server/wm/WindowAnimationSpec.java @@ -72,11 +72,6 @@ public class WindowAnimationSpec implements AnimationSpec { } @Override - public boolean getDetachWallpaper() { - return mAnimation.getDetachWallpaper(); - } - - @Override public boolean getShowWallpaper() { return mAnimation.getShowWallpaper(); } diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java index a1d6ffd0249e..ad0b8ece7a80 100644 --- a/services/core/java/com/android/server/wm/WindowAnimator.java +++ b/services/core/java/com/android/server/wm/WindowAnimator.java @@ -58,17 +58,6 @@ public class WindowAnimator { /** Time of current animation step. Reset on each iteration */ long mCurrentTime; - boolean mAppWindowAnimating; - /** Skip repeated AppWindowTokens initialization. Note that AppWindowsToken's version of this - * is a long initialized to Long.MIN_VALUE so that it doesn't match this value on startup. */ - int mAnimTransactionSequence; - - /** Window currently running an animation that has requested it be detached - * from the wallpaper. This means we need to ensure the wallpaper is - * visible behind it in case it animates in a way that would allow it to be - * seen. If multiple windows satisfy this, use the lowest window. */ - WindowState mWindowDetachedWallpaper = null; - int mBulkUpdateParams = 0; Object mLastWindowFreezeSource; @@ -191,9 +180,8 @@ public class WindowAnimator { // Update animations of all applications, including those // associated with exiting/removed apps - ++mAnimTransactionSequence; - dc.updateWindowsForAnimator(this); - dc.updateWallpaperForAnimator(this); + dc.updateWindowsForAnimator(); + dc.updateBackgroundForAnimator(); dc.prepareSurfaces(); } @@ -314,8 +302,6 @@ public class WindowAnimator { pw.println(); if (dumpAll) { - pw.print(prefix); pw.print("mAnimTransactionSequence="); - pw.print(mAnimTransactionSequence); pw.print(prefix); pw.print("mCurrentTime="); pw.println(TimeUtils.formatUptime(mCurrentTime)); } @@ -324,10 +310,6 @@ public class WindowAnimator { pw.print(Integer.toHexString(mBulkUpdateParams)); pw.println(bulkUpdateParamsToString(mBulkUpdateParams)); } - if (mWindowDetachedWallpaper != null) { - pw.print(prefix); pw.print("mWindowDetachedWallpaper="); - pw.println(mWindowDetachedWallpaper); - } } int getPendingLayoutChanges(final int displayId) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index b627df4a3313..942e47b4725f 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2209,7 +2209,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.isWinVisibleLw() && winAnimator.applyAnimationLocked(transit, false)) { focusMayChange = isDefaultDisplay; win.mAnimatingExit = true; - } else if (win.mWinAnimator.isAnimationSet()) { + } else if (win.isAnimating()) { // Currently in a hide animation... turn this into // an exit. win.mAnimatingExit = true; @@ -5574,11 +5574,7 @@ public class WindowManagerService extends IWindowManager.Stub if (mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS && mode != UPDATE_FOCUS_WILL_PLACE_SURFACES) { - final int prevImeAnimLayer = - displayContent.mInputMethodWindow.mWinAnimator.mAnimLayer; displayContent.assignWindowLayers(false /* setLayoutNeeded */); - imWindowChanged |= prevImeAnimLayer - != displayContent.mInputMethodWindow.mWinAnimator.mAnimLayer; } } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index f7c6d77b4163..a4bac31bbcee 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1364,7 +1364,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override boolean hasContentToDisplay() { if (!mAppFreezing && isDrawnLw() && (mViewVisibility == View.VISIBLE - || (mWinAnimator.isAnimationSet() && !mService.mAppTransition.isTransitionSet()))) { + || (isAnimating() && !mService.mAppTransition.isTransitionSet()))) { return true; } @@ -1443,9 +1443,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final AppWindowToken atoken = mAppToken; if (atoken != null) { return ((!isParentWindowHidden() && !atoken.hiddenRequested) - || mWinAnimator.isAnimationSet()); + || isAnimating()); } - return !isParentWindowHidden() || mWinAnimator.isAnimationSet(); + return !isParentWindowHidden() || isAnimating(); } /** @@ -1476,9 +1476,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (mToken.waitingToShow && mService.mAppTransition.isTransitionSet()) { return false; } + final boolean parentAndClientVisible = !isParentWindowHidden() + && mViewVisibility == View.VISIBLE && !mToken.isHidden(); return mHasSurface && mPolicyVisibility && !mDestroying - && ((!isParentWindowHidden() && mViewVisibility == View.VISIBLE && !mToken.isHidden()) - || mWinAnimator.isAnimationSet()); + && (parentAndClientVisible || isAnimating()); } // TODO: Another visibility method that was added late in the release to minimize risk. @@ -1508,7 +1509,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final AppWindowToken atoken = mAppToken; return isDrawnLw() && mPolicyVisibility && ((!isParentWindowHidden() && (atoken == null || !atoken.hiddenRequested)) - || mWinAnimator.isAnimationSet()); + || isAnimating()); } /** @@ -1562,7 +1563,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // to determine if it's occluding apps. return ((!mIsWallpaper && mAttrs.format == PixelFormat.OPAQUE) || (mIsWallpaper && mWallpaperVisible)) - && isDrawnLw() && !mWinAnimator.isAnimationSet(); + && isDrawnLw() && !isAnimating(); } @Override @@ -1849,7 +1850,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP + " mRemoveOnExit=" + mRemoveOnExit + " mHasSurface=" + mHasSurface + " surfaceShowing=" + mWinAnimator.getShown() - + " isAnimationSet=" + mWinAnimator.isAnimationSet() + + " animating=" + isAnimating() + " app-animation=" + (mAppToken != null ? mAppToken.isSelfAnimating() : "false") + " mWillReplaceWindow=" + mWillReplaceWindow @@ -1916,7 +1917,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mService.mAccessibilityController.onWindowTransitionLocked(this, transit); } } - final boolean isAnimating = mWinAnimator.isAnimationSet() + final boolean isAnimating = isAnimating() && (mAppToken == null || !mAppToken.isWaitingForTransitionStart()); final boolean lastWindowIsStartingWindow = startingWindow && mAppToken != null && mAppToken.isLastWindow(this); @@ -2434,10 +2435,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (DEBUG_VISIBILITY) Slog.v(TAG, "Policy visibility true: " + this); if (doAnimation) { if (DEBUG_VISIBILITY) Slog.v(TAG, "doAnimation: mPolicyVisibility=" - + mPolicyVisibility + " isAnimationSet=" + mWinAnimator.isAnimationSet()); + + mPolicyVisibility + " animating=" + isAnimating()); if (!mToken.okToAnimate()) { doAnimation = false; - } else if (mPolicyVisibility && !mWinAnimator.isAnimationSet()) { + } else if (mPolicyVisibility && !isAnimating()) { // Check for the case where we are currently visible and // not animating; we do not want to do animation at such a // point to become visible when we already are. @@ -2476,7 +2477,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } if (doAnimation) { mWinAnimator.applyAnimationLocked(TRANSIT_EXIT, false); - if (!mWinAnimator.isAnimationSet()) { + if (!isAnimating()) { doAnimation = false; } } @@ -3216,10 +3217,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP + " mWallpaperVisible=" + mWallpaperVisible); } if (dumpAll) { - pw.println(prefix + "mBaseLayer=" + mBaseLayer - + " mSubLayer=" + mSubLayer - + " mAnimLayer=" + mLayer + "=" + mWinAnimator.mAnimLayer - + " mLastLayer=" + mWinAnimator.mLastLayer); + pw.print(prefix); pw.print("mBaseLayer="); pw.print(mBaseLayer); + pw.print(" mSubLayer="); pw.print(mSubLayer); } if (dumpAll) { pw.println(prefix + "mToken=" + mToken); @@ -3697,7 +3696,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP + " tok.hiddenRequested=" + (mAppToken != null && mAppToken.hiddenRequested) + " tok.hidden=" + (mAppToken != null && mAppToken.isHidden()) - + " animationSet=" + mWinAnimator.isAnimationSet() + + " animating=" + isAnimating() + " tok animating=" + (mAppToken != null && mAppToken.isSelfAnimating()) + " Callers=" + Debug.getCallers(4)); @@ -3749,18 +3748,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return windowInfo; } - int getHighestAnimLayer() { - int highest = mWinAnimator.mAnimLayer; - for (int i = mChildren.size() - 1; i >= 0; i--) { - final WindowState c = mChildren.get(i); - final int childLayer = c.getHighestAnimLayer(); - if (childLayer > highest) { - highest = childLayer; - } - } - return highest; - } - @Override boolean forAllWindows(ToBooleanFunction<WindowState> callback, boolean traverseTopToBottom) { if (mChildren.isEmpty()) { @@ -4110,25 +4097,25 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } if (DEBUG_VISIBILITY) { Slog.v(TAG, "Win " + this + ": isDrawn=" + isDrawnLw() - + ", isAnimationSet=" + mWinAnimator.isAnimationSet()); + + ", animating=" + isAnimating()); if (!isDrawnLw()) { Slog.v(TAG, "Not displayed: s=" + mWinAnimator.mSurfaceController + " pv=" + mPolicyVisibility + " mDrawState=" + mWinAnimator.mDrawState + " ph=" + isParentWindowHidden() + " th=" + (mAppToken != null ? mAppToken.hiddenRequested : false) - + " a=" + mWinAnimator.isAnimationSet()); + + " a=" + isAnimating()); } } results.numInteresting++; if (isDrawnLw()) { results.numDrawn++; - if (!mWinAnimator.isAnimationSet()) { + if (!isAnimating()) { results.numVisible++; } results.nowGone = false; - } else if (mWinAnimator.isAnimationSet()) { + } else if (isAnimating()) { results.nowGone = false; } } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 979149a854cb..2beb7887698e 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -107,8 +107,6 @@ class WindowStateAnimator { private final WallpaperController mWallpaperControllerLocked; boolean mAnimationIsEntrance; - int mAnimLayer; - int mLastLayer; /** * Set when we have changed the size of the surface, to know that @@ -135,7 +133,6 @@ class WindowStateAnimator { float mLastAlpha = 0; Rect mTmpClipRect = new Rect(); - Rect mTmpFinalClipRect = new Rect(); Rect mLastClipRect = new Rect(); Rect mLastFinalClipRect = new Rect(); Rect mTmpStackBounds = new Rect(); @@ -162,8 +159,6 @@ class WindowStateAnimator { * window is first added or shown, cleared when the callback has been made. */ boolean mEnteringAnimation; - private boolean mAnimationStartDelayed; - private final SurfaceControl.Transaction mTmpTransaction = new SurfaceControl.Transaction(); /** The pixel format of the underlying SurfaceControl */ @@ -253,13 +248,6 @@ class WindowStateAnimator { mWallpaperControllerLocked = mService.mRoot.mWallpaperController; } - /** - * Is the window or its container currently set to animate or currently animating? - */ - boolean isAnimationSet() { - return mWin.isAnimating(); - } - void cancelExitAnimationForNextAnimationLocked() { if (DEBUG_ANIM) Slog.d(TAG, "cancelExitAnimationForNextAnimationLocked: " + mWin); @@ -275,10 +263,6 @@ class WindowStateAnimator { + ", reportedVisible=" + (mWin.mAppToken != null ? mWin.mAppToken.reportedVisible : false)); - if (mAnimator.mWindowDetachedWallpaper == mWin) { - mAnimator.mWindowDetachedWallpaper = null; - } - mWin.checkPolicyVisibilityChange(); final DisplayContent displayContent = mWin.getDisplayContent(); if (mAttrType == LayoutParams.TYPE_STATUS_BAR && mWin.mPolicyVisibility) { @@ -288,7 +272,6 @@ class WindowStateAnimator { displayContent.setLayoutNeeded(); } } - mWin.onExitAnimationDone(); final int displayId = mWin.getDisplayId(); int pendingLayoutChanges = FINISH_LAYOUT_REDO_ANIM; @@ -539,14 +522,13 @@ class WindowStateAnimator { } if (WindowManagerService.localLOGV) Slog.v(TAG, "Got surface: " + mSurfaceController - + ", set left=" + w.getFrameLw().left + " top=" + w.getFrameLw().top - + ", animLayer=" + mAnimLayer); + + ", set left=" + w.getFrameLw().left + " top=" + w.getFrameLw().top); if (SHOW_LIGHT_TRANSACTIONS) { Slog.i(TAG, ">>> OPEN TRANSACTION createSurfaceLocked"); WindowManagerService.logSurface(w, "CREATE pos=(" + w.getFrameLw().left + "," + w.getFrameLw().top + ") (" - + width + "x" + height + "), layer=" + mAnimLayer + " HIDE", false); + + width + "x" + height + ")" + " HIDE", false); } mLastHidden = true; @@ -1133,8 +1115,7 @@ class WindowStateAnimator { if (DEBUG_ORIENTATION) Slog.v(TAG, "Orientation change skips hidden " + w); } - } else if (mLastLayer != mAnimLayer - || mLastAlpha != mShownAlpha + } else if (mLastAlpha != mShownAlpha || mLastDsDx != mDsDx || mLastDtDx != mDtDx || mLastDsDy != mDsDy @@ -1144,7 +1125,6 @@ class WindowStateAnimator { || mLastHidden) { displayed = true; mLastAlpha = mShownAlpha; - mLastLayer = mAnimLayer; mLastDsDx = mDsDx; mLastDtDx = mDtDx; mLastDsDy = mDsDy; @@ -1153,7 +1133,7 @@ class WindowStateAnimator { w.mLastVScale = w.mVScale; if (SHOW_TRANSACTIONS) WindowManagerService.logSurface(w, "controller=" + mSurfaceController + - "alpha=" + mShownAlpha + " layer=" + mAnimLayer + "alpha=" + mShownAlpha + " matrix=[" + mDsDx + "*" + w.mHScale + "," + mDtDx + "*" + w.mVScale + "][" + mDtDy + "*" + w.mHScale @@ -1197,7 +1177,7 @@ class WindowStateAnimator { w.mToken.hasVisible = true; } } else { - if (DEBUG_ANIM && isAnimationSet()) { + if (DEBUG_ANIM && mWin.isAnimating()) { Slog.v(TAG, "prepareSurface: No changes in animation for " + this); } displayed = true; @@ -1407,7 +1387,7 @@ class WindowStateAnimator { } Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); - return isAnimationSet(); + return mWin.isAnimating(); } void writeToProto(ProtoOutputStream proto, long fieldId) { @@ -1460,9 +1440,6 @@ class WindowStateAnimator { pw.print(" mDtDy="); pw.print(mDtDy); pw.print(" mDsDy="); pw.println(mDsDy); } - if (mAnimationStartDelayed) { - pw.print(prefix); pw.print("mAnimationStartDelayed="); pw.print(mAnimationStartDelayed); - } } @Override @@ -1520,10 +1497,6 @@ class WindowStateAnimator { mChildrenDetached = true; } - int getLayer() { - return mLastLayer; - } - void setOffsetPositionForStackResize(boolean offsetPositionForStackResize) { mOffsetPositionForStackResize = offsetPositionForStackResize; } diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index c8d1a8b14e82..080a3a269947 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -98,12 +98,6 @@ class WindowSurfacePlacer { private boolean mTraversalScheduled; private int mDeferDepth = 0; - private static final class LayerAndToken { - public int layer; - public AppWindowToken token; - } - private final LayerAndToken mTmpLayerAndToken = new LayerAndToken(); - private final SparseIntArray mTempTransitionReasons = new SparseIntArray(); private final Runnable mPerformSurfacePlacement; @@ -298,10 +292,16 @@ class WindowSurfacePlacer { // done behind a dream window. final ArraySet<Integer> activityTypes = collectActivityTypes(mService.mOpeningApps, mService.mClosingApps); - final AppWindowToken animLpToken = mService.mPolicy.allowAppAnimationsLw() + final boolean allowAnimations = mService.mPolicy.allowAppAnimationsLw(); + final AppWindowToken animLpToken = allowAnimations ? findAnimLayoutParamsToken(transit, activityTypes) : null; - + final AppWindowToken topOpeningApp = allowAnimations + ? getTopApp(mService.mOpeningApps, false /* ignoreHidden */) + : null; + final AppWindowToken topClosingApp = allowAnimations + ? getTopApp(mService.mClosingApps, false /* ignoreHidden */) + : null; final LayoutParams animLp = getAnimLp(animLpToken); overrideWithRemoteAnimationIfSet(animLpToken, transit, activityTypes); @@ -313,17 +313,14 @@ class WindowSurfacePlacer { try { processApplicationsAnimatingInPlace(transit); - mTmpLayerAndToken.token = null; - handleClosingApps(transit, animLp, voiceInteraction, mTmpLayerAndToken); - final AppWindowToken topClosingApp = mTmpLayerAndToken.token; - final AppWindowToken topOpeningApp = handleOpeningApps(transit, animLp, - voiceInteraction); + handleClosingApps(transit, animLp, voiceInteraction); + handleOpeningApps(transit, animLp, voiceInteraction); mService.mAppTransition.setLastAppTransition(transit, topOpeningApp, topClosingApp); final int flags = mService.mAppTransition.getTransitFlags(); - layoutRedo = mService.mAppTransition.goodToGo(transit, topOpeningApp, - topClosingApp, mService.mOpeningApps, mService.mClosingApps); + layoutRedo = mService.mAppTransition.goodToGo(transit, topOpeningApp, topClosingApp, + mService.mOpeningApps, mService.mClosingApps); handleNonAppWindowsInTransition(transit, flags); mService.mAppTransition.postAnimationCallback(); mService.mAppTransition.clear(); @@ -450,10 +447,7 @@ class WindowSurfacePlacer { return false; } - private AppWindowToken handleOpeningApps(int transit, LayoutParams animLp, - boolean voiceInteraction) { - AppWindowToken topOpeningApp = null; - int topOpeningLayer = Integer.MIN_VALUE; + private void handleOpeningApps(int transit, LayoutParams animLp, boolean voiceInteraction) { final int appsCount = mService.mOpeningApps.size(); for (int i = 0; i < appsCount; i++) { AppWindowToken wtoken = mService.mOpeningApps.valueAt(i); @@ -478,24 +472,15 @@ class WindowSurfacePlacer { "<<< CLOSE TRANSACTION handleAppTransitionReadyLocked()"); } - if (animLp != null) { - final int layer = wtoken.getHighestAnimLayer(); - if (topOpeningApp == null || layer > topOpeningLayer) { - topOpeningApp = wtoken; - topOpeningLayer = layer; - } - } if (mService.mAppTransition.isNextAppTransitionThumbnailUp()) { wtoken.attachThumbnailAnimation(); } else if (mService.mAppTransition.isNextAppTransitionOpenCrossProfileApps()) { wtoken.attachCrossProfileAppsThumbnailAnimation(); } } - return topOpeningApp; } - private void handleClosingApps(int transit, LayoutParams animLp, boolean voiceInteraction, - LayerAndToken layerAndToken) { + private void handleClosingApps(int transit, LayoutParams animLp, boolean voiceInteraction) { final int appsCount; appsCount = mService.mClosingApps.size(); for (int i = 0; i < appsCount; i++) { @@ -518,13 +503,6 @@ class WindowSurfacePlacer { wtoken.getController().removeStartingWindow(); } - if (animLp != null) { - int layer = wtoken.getHighestAnimLayer(); - if (layerAndToken.token == null || layer > layerAndToken.layer) { - layerAndToken.token = wtoken; - layerAndToken.layer = layer; - } - } if (mService.mAppTransition.isNextAppTransitionThumbnailDown()) { wtoken.attachThumbnailAnimation(); } diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java index 8972c3891ec1..fefd305bc6d6 100644 --- a/services/core/java/com/android/server/wm/WindowToken.java +++ b/services/core/java/com/android/server/wm/WindowToken.java @@ -163,7 +163,7 @@ class WindowToken extends WindowContainer<WindowState> { for (int i = 0; i < count; i++) { final WindowState win = mChildren.get(i); - if (win.mWinAnimator.isAnimationSet()) { + if (win.isAnimating()) { delayed = true; } changed |= win.onSetAppExiting(); @@ -235,18 +235,6 @@ class WindowToken extends WindowContainer<WindowState> { return false; } - int getHighestAnimLayer() { - int highest = -1; - for (int j = 0; j < mChildren.size(); j++) { - final WindowState w = mChildren.get(j); - final int wLayer = w.getHighestAnimLayer(); - if (wLayer > highest) { - highest = wLayer; - } - } - return highest; - } - AppWindowToken asAppWindowToken() { // TODO: Not sure if this is the best way to handle this vs. using instanceof and casting. // I am not an app window token! |