Fix "Tab not maintained on rotation"

Change-Id: I331794c948dab876c808ba1274cb11dbdb70155d
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 30e445e..073f665 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -49,6 +49,7 @@
 
     private static final String EXTRA_KEY_SEARCH_MODE = "navBar.searchMode";
     private static final String EXTRA_KEY_QUERY = "navBar.query";
+    private static final String EXTRA_KEY_SELECTED_TAB = "navBar.selectedTab";
 
     private boolean mSearchMode;
     private String mQueryString;
@@ -213,11 +214,13 @@
     public void onSaveInstanceState(Bundle outState) {
         outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode);
         outState.putString(EXTRA_KEY_QUERY, mQueryString);
+        outState.putInt(EXTRA_KEY_SELECTED_TAB, mActionBar.getSelectedNavigationIndex());
     }
 
     public void onRestoreInstanceState(Bundle savedState) {
         mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE);
         mQueryString = savedState.getString(EXTRA_KEY_QUERY);
+        mActionBar.setSelectedNavigationItem(savedState.getInt(EXTRA_KEY_SELECTED_TAB));
     }
 
     @Override
diff --git a/src/com/android/contacts/group/GroupBrowseListFragment.java b/src/com/android/contacts/group/GroupBrowseListFragment.java
index 95a85b6..59b0cec 100644
--- a/src/com/android/contacts/group/GroupBrowseListFragment.java
+++ b/src/com/android/contacts/group/GroupBrowseListFragment.java
@@ -33,6 +33,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Groups;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
@@ -77,6 +78,8 @@
 
     private boolean mSelectionToScreenRequested;
 
+    private static final String EXTRA_KEY_GROUP_URI = "groups.groupUri";
+
     /**
      * Map of account name to a list of {@link GroupMetaData} objects
      * representing groups within that account.
@@ -108,6 +111,13 @@
         mListView.setOnFocusChangeListener(this);
         mListView.setOnTouchListener(this);
         mEmptyView = mRootView.findViewById(R.id.empty);
+
+        if (savedInstanceState != null) {
+            String groupUriString = savedInstanceState.getString(EXTRA_KEY_GROUP_URI);
+            if (groupUriString != null) {
+                mSelectedGroupUri = Uri.parse(groupUriString);
+            }
+        }
         return mRootView;
     }
 
@@ -230,6 +240,10 @@
         if (mSelectionToScreenRequested) {
             requestSelectionToScreen();
         }
+
+        if (mSelectionVisible && mSelectedGroupUri != null) {
+            viewGroup(mSelectedGroupUri);
+        }
     }
 
     public void setListener(OnGroupBrowserActionListener listener) {
@@ -293,4 +307,15 @@
         }
         return false;
     }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        if (mSelectedGroupUri != null) {
+            String uriString = mSelectedGroupUri.toString();
+            if (!TextUtils.isEmpty(uriString)) {
+                outState.putString(EXTRA_KEY_GROUP_URI, uriString);
+            }
+        }
+    }
 }