From f24c0757e1156e019be46c0815fed7368f0122ca Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Tue, 20 Mar 2018 18:28:20 +0100 Subject: [PATCH] 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 --- .../LauncherAppTransitionManagerImpl.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index e809d21070..0dbf404ce6 100644 --- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java @@ -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);