Resolving issue with the wrong contact displayed in search results.

Bug: 3172505
Change-Id: I9740429306949162a07044aecfd282d14e14f839
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index e970688..af8528c 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -259,6 +259,7 @@
             }
 
             mListFragment.setSelectedContactUri(uri);
+            mListFragment.saveSelectedUri(mPrefs);
             mListFragment.requestSelectionOnScreen(true);
             if (mContactContentDisplayed) {
                 setupContactDetailFragment(uri);
@@ -333,7 +334,7 @@
             if (mSearchMode) {
                 mListFragment = createContactSearchFragment();
                 // When switching to the search mode, erase previous state of the search UI
-                mListFragment.saveSelectedUri(mPrefs);
+                mListFragment.eraseSelectedUri(mPrefs);
             } else {
                 mListFragment = createListFragment(ContactsRequest.ACTION_DEFAULT);
                 mListFragment.requestSelectionOnScreen(false);
@@ -344,10 +345,11 @@
             mListFragment.setQueryString(mActionBarAdapter.getQueryString());
         }
 
-        if (fromRequest) {
+        if (fromRequest && !mSearchMode) {
             Uri selectUri = mRequest.getContactUri();
             if (selectUri != null) {
                 mListFragment.setSelectedContactUri(selectUri);
+                mListFragment.saveSelectedUri(mPrefs);
                 mListFragment.requestSelectionOnScreen(false);
             }
         }
@@ -449,6 +451,7 @@
             requestedContactUri = mListFragment.getFirstContactUri();
             if (requestedContactUri != null) {
                 mListFragment.setSelectedContactUri(requestedContactUri);
+                mListFragment.eraseSelectedUri(mPrefs);
                 mListFragment.requestSelectionOnScreen(false);
             }
         }
@@ -485,6 +488,8 @@
         }
 
         mListFragment.setSelectedContactUri(selectedUri);
+        mListFragment.eraseSelectedUri(mPrefs);
+        mListFragment.requestSelectionOnScreen(true);
         if (mContactContentDisplayed) {
             setupContactDetailFragment(selectedUri);
         }
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 65c61a6..8f1efc5 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -336,4 +336,7 @@
 
     public void restoreSelectedUri(SharedPreferences preferences) {
     }
+
+    public void eraseSelectedUri(SharedPreferences preferences) {
+    }
 }
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 919c740..68f0607 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -191,13 +191,20 @@
 
     @Override
     public void saveSelectedUri(SharedPreferences preferences) {
-        Editor editor = preferences.edit();
         Uri uri = getSelectedContactUri();
         if (uri == null) {
-            editor.remove(getPersistentSelectionKey());
+            eraseSelectedUri(preferences);
         } else {
+            Editor editor = preferences.edit();
             editor.putString(getPersistentSelectionKey(), uri.toString());
+            editor.apply();
         }
+    }
+
+    @Override
+    public void eraseSelectedUri(SharedPreferences preferences) {
+        Editor editor = preferences.edit();
+        editor.remove(getPersistentSelectionKey());
         editor.apply();
     }