Ensuring that fast scrolling to predictions scrolls list to the top
- Fixes a long standing issue with fast-scrolling to the predicted apps not quite scrolling the list to the top of the screen. - Fixes an issue where we don’t scroll exactly to the fast scroll position due to rounding - Also fixes a small issue where the thumb would not update when the fast scroll popup was no longer showing, even while dragging. Bug: 30023608 Change-Id: I6b5080c6aea521ff03dca24317f0405c02725061
This commit is contained in:
@@ -23,6 +23,7 @@ import com.android.launcher3.FastBitmapDrawable;
|
||||
import com.android.launcher3.util.Thunk;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
public class AllAppsFastScrollHelper implements AllAppsGridAdapter.BindViewCallback {
|
||||
|
||||
@@ -142,13 +143,22 @@ public class AllAppsFastScrollHelper implements AllAppsGridAdapter.BindViewCallb
|
||||
}
|
||||
|
||||
// Calculate the full animation from the current scroll position to the final scroll
|
||||
// position, and then run the animation for the duration.
|
||||
// position, and then run the animation for the duration. If we are scrolling to the
|
||||
// first fast scroll section, then just scroll to the top of the list itself.
|
||||
List<AlphabeticalAppsList.FastScrollSectionInfo> fastScrollSections =
|
||||
mApps.getFastScrollerSections();
|
||||
int newPosition = info.fastScrollToItem.position;
|
||||
int newScrollY = Math.min(availableScrollHeight, mRv.getCurrentScrollY(newPosition, 0));
|
||||
int newScrollY = fastScrollSections.size() > 0 && fastScrollSections.get(0) == info
|
||||
? 0
|
||||
: Math.min(availableScrollHeight, mRv.getCurrentScrollY(newPosition, 0));
|
||||
int numFrames = mFastScrollFrames.length;
|
||||
int deltaY = newScrollY - scrollY;
|
||||
float ySign = Math.signum(deltaY);
|
||||
int step = (int) (ySign * Math.ceil((float) Math.abs(deltaY) / numFrames));
|
||||
for (int i = 0; i < numFrames; i++) {
|
||||
// TODO(winsonc): We can interpolate this as well.
|
||||
mFastScrollFrames[i] = (newScrollY - scrollY) / numFrames;
|
||||
mFastScrollFrames[i] = (int) (ySign * Math.min(Math.abs(step), Math.abs(deltaY)));
|
||||
deltaY -= step;
|
||||
}
|
||||
mFastScrollFrameIndex = 0;
|
||||
mRv.postOnAnimation(mSmoothSnapNextFrameRunnable);
|
||||
|
||||
Reference in New Issue
Block a user