Remove cache, and manually control archives lifecycle.

This will reduce memory consumption, copying flakyness and
simplify code.

Test: Unit tests.
Bug: 35303895, 35151292
Change-Id: I7124cf3c3ec897887171dffb80eddfe99a6a7c41
diff --git a/src/com/android/documentsui/DirectoryLoader.java b/src/com/android/documentsui/DirectoryLoader.java
index c0f69fc..8720701 100644
--- a/src/com/android/documentsui/DirectoryLoader.java
+++ b/src/com/android/documentsui/DirectoryLoader.java
@@ -30,6 +30,7 @@
 import android.provider.DocumentsContract.Document;
 import android.util.Log;
 
+import com.android.documentsui.archives.ArchivesProvider;
 import com.android.documentsui.base.DocumentInfo;
 import com.android.documentsui.base.FilteringCursorWrapper;
 import com.android.documentsui.base.RootInfo;
@@ -92,6 +93,10 @@
         Cursor cursor;
         try {
             client = DocumentsApplication.acquireUnstableProviderOrThrow(resolver, authority);
+            if (mDoc.isInArchive()) {
+                ArchivesProvider.acquireArchive(client, mUri);
+            }
+            result.client = client;
             cursor = client.query(
                     mUri, null, null, null, mModel.getDocumentSortQuery(), mSignal);
             if (cursor == null) {
@@ -108,8 +113,6 @@
             }
 
             cursor = mModel.sortCursor(cursor);
-
-            result.client = client;
             result.cursor = cursor;
         } catch (Exception e) {
             Log.w(TAG, "Failed to query", e);
@@ -118,6 +121,7 @@
             synchronized (this) {
                 mSignal = null;
             }
+            // TODO: Remove this call.
             ContentProviderClient.releaseQuietly(client);
         }