Save bookmark group state

 Bug: 5135795

Change-Id: Id5069cc3f2afb16bcadac5b83d523200898a7d73
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 2c38334..bf96597 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -26,6 +26,7 @@
 import android.content.CursorLoader;
 import android.content.Intent;
 import android.content.Loader;
+import android.content.SharedPreferences;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.Cursor;
@@ -57,6 +58,9 @@
 import com.android.browser.view.BookmarkExpandableView;
 import com.android.browser.view.BookmarkExpandableView.BookmarkContextMenuInfo;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import java.util.HashMap;
 
 interface BookmarksPageCallbacks {
@@ -84,6 +88,7 @@
     static final int LOADER_BOOKMARKS = 100;
 
     static final String EXTRA_DISABLE_WINDOW = "disable_new_window";
+    static final String PREF_GROUP_STATE = "bbp_group_state";
 
     static final String ACCOUNT_TYPE = "account_type";
     static final String ACCOUNT_NAME = "account_name";
@@ -100,6 +105,7 @@
     View mHeader;
     HashMap<Integer, BrowserBookmarksAdapter> mBookmarkAdapters = new HashMap<Integer, BrowserBookmarksAdapter>();
     BookmarkDragHandler mDragHandler;
+    JSONObject mState;
 
     @Override
     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
@@ -130,7 +136,12 @@
                 BrowserBookmarksAdapter adapter = new BrowserBookmarksAdapter(
                         getActivity(), VIEW_THUMBNAILS);
                 mBookmarkAdapters.put(id, adapter);
-                mGrid.addAccount(accountName, adapter);
+                boolean expand = true;
+                try {
+                    expand = mState.getBoolean(accountName != null ? accountName
+                            : BookmarkExpandableView.LOCAL_ACCOUNT_NAME);
+                } catch (JSONException e) {} // no state for accountName
+                mGrid.addAccount(accountName, adapter, expand);
                 lm.restartLoader(id, args, this);
                 id++;
             }
@@ -300,6 +311,14 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
+        SharedPreferences prefs = BrowserSettings.getInstance().getPreferences();
+        try {
+            mState = new JSONObject(prefs.getString(PREF_GROUP_STATE, "{}"));
+        } catch (JSONException e) {
+            // Parse failed, clear preference and start with empty state
+            prefs.edit().remove(PREF_GROUP_STATE).apply();
+            mState = new JSONObject();
+        }
         Bundle args = getArguments();
         mDisableNewWindow = args == null ? false : args.getBoolean(EXTRA_DISABLE_WINDOW, false);
         setHasOptionsMenu(true);
@@ -309,6 +328,21 @@
         }
     }
 
+    @Override
+    public void onPause() {
+        super.onPause();
+        try {
+            mState = mGrid.saveGroupState();
+            // Save state
+            SharedPreferences prefs = BrowserSettings.getInstance().getPreferences();
+            prefs.edit()
+                    .putString(PREF_GROUP_STATE, mState.toString())
+                    .apply();
+        } catch (JSONException e) {
+            // Not critical, ignore
+        }
+    }
+
     private static class CombinedBookmarksCallbackWrapper
             implements BookmarksPageCallbacks {