From 4557c08c1574da324759798f0d56782ae2956bef Mon Sep 17 00:00:00 2001 From: Craig Mautner Date: Mon, 27 Apr 2015 13:07:40 -0700 Subject: [PATCH] Notify client of all window movements. Previously only the animated movements were reported. Fixes bug 19817982. Change-Id: Icebc723be87aa948b72a2ea7cd94d5a0472990be --- .../android/server/wm/WindowManagerService.java | 28 ++++++++++++---------- .../java/com/android/server/wm/WindowState.java | 13 ++++------ 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index c5bdbb03e229..b6a172e4d1b4 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -9941,18 +9941,20 @@ public class WindowManagerService extends IWindowManager.Stub final WindowStateAnimator winAnimator = w.mWinAnimator; - // If the window has moved due to its containing - // content frame changing, then we'd like to animate - // it. - if (w.mHasSurface && w.shouldAnimateMove()) { - // Frame has moved, containing content frame - // has also moved, and we're not currently animating... - // let's do something. - Animation a = AnimationUtils.loadAnimation(mContext, - com.android.internal.R.anim.window_move_from_decor); - winAnimator.setAnimation(a); - winAnimator.mAnimDw = w.mLastFrame.left - w.mFrame.left; - winAnimator.mAnimDh = w.mLastFrame.top - w.mFrame.top; + // If the window has moved due to its containing content frame changing, then + // notify the listeners and optionally animate it. + if (w.hasMoved()) { + // Frame has moved, containing content frame has also moved, and we're not + // currently animating... let's do something. + final int left = w.mFrame.left; + final int top = w.mFrame.top; + if ((w.mAttrs.privateFlags & PRIVATE_FLAG_NO_MOVE_ANIMATION) == 0) { + Animation a = AnimationUtils.loadAnimation(mContext, + com.android.internal.R.anim.window_move_from_decor); + winAnimator.setAnimation(a); + winAnimator.mAnimDw = w.mLastFrame.left - left; + winAnimator.mAnimDh = w.mLastFrame.top - top; + } //TODO (multidisplay): Accessibility supported only for the default display. if (mAccessibilityController != null @@ -9961,7 +9963,7 @@ public class WindowManagerService extends IWindowManager.Stub } try { - w.mClient.moved(w.mFrame.left, w.mFrame.top); + w.mClient.moved(left, top); } catch (RemoteException e) { } } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index ec708797f0e6..fc9351ae6fda 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -20,7 +20,6 @@ import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW; -import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; @@ -1081,16 +1080,14 @@ final class WindowState implements WindowManagerPolicy.WindowState { } /** - * Return whether this window is wanting to have a translation - * animation applied to it for an in-progress move. (Only makes + * Return whether this window has moved. (Only makes * sense to call from performLayoutAndPlaceSurfacesLockedInner().) */ - boolean shouldAnimateMove() { - return mContentChanged && !mExiting && !mWinAnimator.mLastHidden && mService.okToDisplay() - && (mFrame.top != mLastFrame.top + boolean hasMoved() { + return mHasSurface && mContentChanged && !mExiting && !mWinAnimator.mLastHidden + && mService.okToDisplay() && (mFrame.top != mLastFrame.top || mFrame.left != mLastFrame.left) - && (mAttrs.privateFlags&PRIVATE_FLAG_NO_MOVE_ANIMATION) == 0 - && (mAttachedWindow == null || !mAttachedWindow.shouldAnimateMove()); + && (mAttachedWindow == null || !mAttachedWindow.hasMoved()); } boolean isFullscreen(int screenWidth, int screenHeight) { -- 2.11.0