Preserve selection across device rotation.

Also, update Selection model to use a discrete provisional selection,
   rather than a superset "total" selection

Bug: 27075323
Change-Id: I855e6b66010b3cdd599cc0a9f0046a7efadca5fe
diff --git a/packages/DocumentsUI/src/com/android/documentsui/State.java b/packages/DocumentsUI/src/com/android/documentsui/State.java
index bd90eef..139fb45 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/State.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/State.java
@@ -25,6 +25,7 @@
 import android.util.Log;
 import android.util.SparseArray;
 
+import com.android.documentsui.dirlist.MultiSelectManager.Selection;
 import com.android.documentsui.model.DocumentInfo;
 import com.android.documentsui.model.DocumentStack;
 import com.android.documentsui.model.DurableUtils;
@@ -99,8 +100,11 @@
     /** Instance state for every shown directory */
     public HashMap<String, SparseArray<Parcelable>> dirState = new HashMap<>();
 
+    /** UI selection */
+    public Selection selectedDocuments = new Selection();
+
     /** Currently copying file */
-    public List<DocumentInfo> selectedDocumentsForCopy = new ArrayList<DocumentInfo>();
+    public List<DocumentInfo> selectedDocumentsForCopy = new ArrayList<>();
 
     /** Name of the package that started DocsUI */
     public List<String> excludedAuthorities = new ArrayList<>();
@@ -173,6 +177,7 @@
         DurableUtils.writeToParcel(out, stack);
         out.writeString(currentSearch);
         out.writeMap(dirState);
+        out.writeParcelable(selectedDocuments, 0);
         out.writeList(selectedDocumentsForCopy);
         out.writeList(excludedAuthorities);
         out.writeInt(openableOnly ? 1 : 0);
@@ -203,6 +208,7 @@
             DurableUtils.readFromParcel(in, state.stack);
             state.currentSearch = in.readString();
             in.readMap(state.dirState, loader);
+            state.selectedDocuments = in.readParcelable(loader);
             in.readList(state.selectedDocumentsForCopy, loader);
             in.readList(state.excludedAuthorities, loader);
             state.openableOnly = in.readInt() != 0;