Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4557c08c authored by Craig Mautner's avatar Craig Mautner
Browse files

Notify client of all window movements.

Previously only the animated movements were reported.

Fixes bug 19817982.

Change-Id: Icebc723be87aa948b72a2ea7cd94d5a0472990be
parent c0f705a8
Loading
Loading
Loading
Loading
+15 −13
Original line number Diff line number Diff line
@@ -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.
                    // 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 - w.mFrame.left;
                        winAnimator.mAnimDh = w.mLastFrame.top - w.mFrame.top;
                            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) {
                        }
                    }
+5 −8
Original line number Diff line number Diff line
@@ -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) {