Preserving list selection when list is populated with stale data

Bug: 3352121
Change-Id: I7a553dbdf7d8a0e5d2af8536b8396ecd56b4a2ba
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 3d53da8..1385c8b 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -336,6 +336,9 @@
             if (mSelectedContactUri.toString().startsWith(Contacts.CONTENT_LOOKUP_URI.toString())) {
                 List<String> pathSegments = mSelectedContactUri.getPathSegments();
                 mSelectedContactLookupKey = Uri.encode(pathSegments.get(2));
+                if (mSelectedContactUri.getPathSegments().size() >= 3) {
+                    mSelectedContactId = ContentUris.parseId(mSelectedContactUri);
+                }
             } else if (mSelectedContactUri.toString().startsWith(Contacts.CONTENT_URI.toString()) &&
                     mSelectedContactUri.getPathSegments().size() >= 2) {
                 mSelectedContactLookupKey = null;
diff --git a/src/com/android/contacts/list/ContactListAdapter.java b/src/com/android/contacts/list/ContactListAdapter.java
index 0a2b104..ffe9fc6 100644
--- a/src/com/android/contacts/list/ContactListAdapter.java
+++ b/src/com/android/contacts/list/ContactListAdapter.java
@@ -320,7 +320,8 @@
                     offset = cursor.getPosition();
                     break;
                 }
-            } else {
+            }
+            if (mSelectedContactId != 0) {
                 long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX);
                 if (contactId == mSelectedContactId) {
                     offset = cursor.getPosition();