From 564a2e7116b026c1d73829e65d47b660b03a3c72 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Wed, 9 Oct 2013 14:47:32 -0700 Subject: [PATCH] Fix custom content state for scroll in RTL (issue 11068877) Change-Id: I731c55e3e4e01ef42eba94c002d0fde296dd9540 --- src/com/android/launcher3/PagedView.java | 13 +++++++++++++ src/com/android/launcher3/Workspace.java | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index c6cf3a3d0..2a339c039 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1528,6 +1528,19 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } } + // While layout transitions are occurring, a child's position may stray from its baseline + // position. This method returns the magnitude of this stray at any given time. + public int getLayoutTransitionOffsetForPage(int index) { + if (mPageScrolls == null || index >= mPageScrolls.length || index < 0) { + return 0; + } else { + View child = getChildAt(index); + int scrollOffset = (getViewportWidth() - child.getMeasuredWidth()) / 2; + int baselineX = mPageScrolls[index] + scrollOffset + getViewportOffsetX(); + return (int) (child.getX() - baselineX); + } + } + // This curve determines how the effect of scrolling over the limits of the page dimishes // as the user pulls further and further from the bounds private float overScrollInfluenceCurve(float f) { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index a23d7d0b8..4515b03ab 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1387,7 +1387,9 @@ public class Workspace extends SmoothPagedView float progress = 0; if (hasCustomContent()) { int index = mScreenOrder.indexOf(CUSTOM_CONTENT_SCREEN_ID); - int scrollDelta = getScrollForPage(index + 1) - getScrollX(); + + int scrollDelta = getScrollForPage(index + 1) - getScrollX() + + getLayoutTransitionOffsetForPage(index + 1); translationX = scrollDelta; progress = (1.0f * scrollDelta) / (getScrollForPage(index + 1) - getScrollForPage(index)); -- 2.11.0