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

Commit f24c0757 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Fix wrong position in first frame

mFloatingView wasn't laid out yet when processing the first
animation frame. Force the initial values to make sure we don't
submit a wrong position for the surface.

Test: Open app, take surface trace
Bug: 74220420
Change-Id: Ie0a827969b980eeffa1860e307586d0e648b4834
parent 6742b3a5
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -556,10 +556,8 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
        } else {
            mDragLayer.getDescendantRectRelativeToSelf(v, rect);
        }
        final int viewLocationStart = mIsRtl
                ? mDeviceProfile.widthPx - rect.right
                : rect.left;
        final int viewLocationTop = rect.top;
        int viewLocationLeft = rect.left;
        int viewLocationTop = rect.top;

        float startScale = 1f;
        if (isBubbleTextView && !isDeepShortcutTextView) {
@@ -572,12 +570,24 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
        } else {
            rect.set(0, 0, rect.width(), rect.height());
        }
        viewLocationLeft += rect.left;
        viewLocationTop += rect.top;
        int viewLocationStart = mIsRtl
                ? mDeviceProfile.widthPx - rect.right
                : viewLocationLeft;
        LayoutParams lp = new LayoutParams(rect.width(), rect.height());
        lp.ignoreInsets = true;
        lp.setMarginStart(viewLocationStart + rect.left);
        lp.topMargin = viewLocationTop + rect.top;
        lp.setMarginStart(viewLocationStart);
        lp.topMargin = viewLocationTop;
        mFloatingView.setLayoutParams(lp);

        // Set the properties here already to make sure they'are available when running the first
        // animation frame.
        mFloatingView.setLeft(viewLocationLeft);
        mFloatingView.setTop(viewLocationTop);
        mFloatingView.setRight(viewLocationLeft + rect.width());
        mFloatingView.setBottom(viewLocationTop + rect.height());

        // Swap the two views in place.
        ((ViewGroup) mDragLayer.getParent()).addView(mFloatingView);
        v.setVisibility(View.INVISIBLE);