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);
             }
         });