diff options
author | Adam Cohen <adamcohen@google.com> | 2015-05-14 19:32:17 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-14 19:32:18 +0000 |
commit | 88c66dd4c584455fd9e7208f28ac7bed5b005461 (patch) | |
tree | 1409c3e82e1a167373d666b3b567006780b82bd4 | |
parent | b0f89aa343c4d7f5385afbd997f0051b58021ec4 (diff) | |
parent | edebee9d0da715c0c84f12b135664e18ef49b169 (diff) | |
download | android_packages_apps_Trebuchet-88c66dd4c584455fd9e7208f28ac7bed5b005461.tar.gz android_packages_apps_Trebuchet-88c66dd4c584455fd9e7208f28ac7bed5b005461.tar.bz2 android_packages_apps_Trebuchet-88c66dd4c584455fd9e7208f28ac7bed5b005461.zip |
Merge "Revert "Revert "Fixing issue where the prediction bar could be misplaced after installing an app.""" into ub-launcher3-burnaby
-rw-r--r-- | src/com/android/launcher3/AppsContainerRecyclerView.java | 39 | ||||
-rw-r--r-- | src/com/android/launcher3/AppsContainerView.java | 8 |
2 files changed, 36 insertions, 11 deletions
diff --git a/src/com/android/launcher3/AppsContainerRecyclerView.java b/src/com/android/launcher3/AppsContainerRecyclerView.java index 3952923af..34e621a46 100644 --- a/src/com/android/launcher3/AppsContainerRecyclerView.java +++ b/src/com/android/launcher3/AppsContainerRecyclerView.java @@ -120,6 +120,24 @@ public class AppsContainerRecyclerView extends BaseContainerRecyclerView { mApps = apps; } + @Override + public void setAdapter(Adapter adapter) { + // Register a change listener to update the scroll position state whenever the data set + // changes. + adapter.registerAdapterDataObserver(new AdapterDataObserver() { + @Override + public void onChanged() { + post(new Runnable() { + @Override + public void run() { + refreshCurScrollPosition(); + } + }); + } + }); + super.setAdapter(adapter); + } + /** * Sets the number of apps per row in this recycler view. */ @@ -369,13 +387,7 @@ public class AppsContainerRecyclerView extends BaseContainerRecyclerView { } // We need to workaround the RecyclerView to get the right scroll position - List<AlphabeticalAppsList.AdapterItem> items = mApps.getAdapterItems(); - getCurScrollState(mScrollPosState, items); - if (mScrollPosState.rowIndex != -1) { - int scrollY = getPaddingTop() + (mScrollPosState.rowIndex * mScrollPosState.rowHeight) + - mPredictionBarHeight - mScrollPosState.rowTopOffset; - updateScrollY(scrollY); - } + refreshCurScrollPosition(); // Scroll to the view at the position, anchored at the top of the screen. We call the scroll // method on the LayoutManager directly since it is not exposed by RecyclerView. @@ -465,6 +477,19 @@ public class AppsContainerRecyclerView extends BaseContainerRecyclerView { } /** + * Forces a refresh of the scroll position to any scroll listener. + */ + private void refreshCurScrollPosition() { + List<AlphabeticalAppsList.AdapterItem> items = mApps.getAdapterItems(); + getCurScrollState(mScrollPosState, items); + if (mScrollPosState.rowIndex != -1) { + int scrollY = getPaddingTop() + (mScrollPosState.rowIndex * mScrollPosState.rowHeight) + + mPredictionBarHeight - mScrollPosState.rowTopOffset; + updateScrollY(scrollY); + } + } + + /** * Returns the current scroll state. */ private void getCurScrollState(ScrollPositionState stateOut, diff --git a/src/com/android/launcher3/AppsContainerView.java b/src/com/android/launcher3/AppsContainerView.java index 6bc4cce6b..a74670be0 100644 --- a/src/com/android/launcher3/AppsContainerView.java +++ b/src/com/android/launcher3/AppsContainerView.java @@ -83,11 +83,11 @@ public class AppsContainerView extends BaseContainerView implements DragSource, private int mNumAppsPerRow; private int mNumPredictedAppsPerRow; // This coordinate is relative to this container view - private Point mBoundsCheckLastTouchDownPos = new Point(-1, -1); + private final Point mBoundsCheckLastTouchDownPos = new Point(-1, -1); // This coordinate is relative to its parent - private Point mIconLastTouchPos = new Point(); - // This coordinate is used to proxy click and long-click events - private Point mPredictionIconTouchDownPos = new Point(); + private final Point mIconLastTouchPos = new Point(); + // This coordinate is used to proxy click and long-click events to the prediction bar icons + private final Point mPredictionIconTouchDownPos = new Point(); private int mContentMarginStart; // Normal container insets private int mContainerInset; |