Improving smooth scroll when required position is nearby
The jump-scroll implementation first scrolls the list
two screens above or below the desired position.
This fix prevents such a jump from happening when the
current position is already withing two screens of the
desired one.
Change-Id: I8e68fc724cc37980a9512a7c9bc7ac8345153578
diff --git a/src/com/android/contacts/widget/ListViewUtils.java b/src/com/android/contacts/widget/ListViewUtils.java
index bfa686e..f5af63b 100644
--- a/src/com/android/contacts/widget/ListViewUtils.java
+++ b/src/com/android/contacts/widget/ListViewUtils.java
@@ -47,7 +47,7 @@
@Override
public void run() {
- int firstPosition = listView.getFirstVisiblePosition();
+ int firstPosition = listView.getFirstVisiblePosition() + 1;
int lastPosition = listView.getLastVisiblePosition();
if (position >= firstPosition && position <= lastPosition) {
return; // Already on screen
@@ -62,13 +62,19 @@
if (preliminaryPosition >= listView.getCount()) {
preliminaryPosition = listView.getCount() - 1;
}
+ if (preliminaryPosition < firstPosition) {
+ listView.setSelection(preliminaryPosition);
+ }
} else {
preliminaryPosition = position - twoScreens;
if (preliminaryPosition < 0) {
preliminaryPosition = 0;
}
+ if (preliminaryPosition > lastPosition) {
+ listView.setSelection(preliminaryPosition);
+ }
}
- listView.setSelection(preliminaryPosition);
+
scrollToFinalPosition(listView, position);
}
});