Preserving separate contact selection per mode.

Change-Id: Ic481ffbbe8582cece04e4f2c0b1aa7aada7b93c7
diff --git a/src/com/android/contacts/activities/ContactListActivity.java b/src/com/android/contacts/activities/ContactListActivity.java
index 7b8eccc..ed098a7 100644
--- a/src/com/android/contacts/activities/ContactListActivity.java
+++ b/src/com/android/contacts/activities/ContactListActivity.java
@@ -273,6 +273,18 @@
     }
 
     private void setupContactDetailFragment(Uri contactLookupUri) {
+
+        // If we are already editing this URI - just continue editing
+        if (mEditorFragment != null && contactLookupUri != null
+                && contactLookupUri.equals(mEditorFragment.getUri())) {
+            return;
+        }
+
+        if (mDetailFragment != null && contactLookupUri != null
+                && contactLookupUri.equals(mDetailFragment.getUri())) {
+            return;
+        }
+
         // No editor here
         closeEditorFragment();
 
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 4d7be3f..cfe0830 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -18,6 +18,7 @@
 import com.android.contacts.R;
 
 import android.net.Uri;
+import android.widget.ListView;
 
 /**
  * Fragment containing a contact list used for browsing (as compared to
@@ -88,4 +89,18 @@
         super.finish();
         mListener.onFinishAction();
     }
+
+    @Override
+    protected void completeRestoreInstanceState() {
+        super.completeRestoreInstanceState();
+        ListView listView = getListView();
+        if (listView.getChoiceMode() == ListView.CHOICE_MODE_SINGLE) {
+            Uri checkedUri = null;
+            int position = listView.getCheckedItemPosition();
+            if (position != -1) {
+                checkedUri = getAdapter().getContactUri(position - listView.getHeaderViewsCount());
+            }
+            mListener.onViewContactAction(checkedUri);
+        }
+    }
 }
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 2eedf0c..1cb8969 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -733,7 +733,7 @@
     /**
      * Restore the list state after the adapter is populated.
      */
-    private void completeRestoreInstanceState() {
+    protected void completeRestoreInstanceState() {
         if (mListState != null) {
             mListView.onRestoreInstanceState(mListState);
             mListState = null;
diff --git a/src/com/android/contacts/views/detail/ContactDetailFragment.java b/src/com/android/contacts/views/detail/ContactDetailFragment.java
index a7319f5..8bd465d 100644
--- a/src/com/android/contacts/views/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/views/detail/ContactDetailFragment.java
@@ -214,6 +214,10 @@
         mListener = value;
     }
 
+    public Uri getUri() {
+        return mLookupUri;
+    }
+
     public void loadUri(Uri lookupUri) {
         // TODO: Ensure we are not loading twice here
         mLookupUri = lookupUri;
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index 8fd8473..7418e8b 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -1356,4 +1356,8 @@
             }
         }
     }
+
+    public Uri getUri() {
+        return mUri;
+    }
 }
\ No newline at end of file