New recent documents behavior.
Jeff Sharkey [Mon, 2 Sep 2013 22:30:28 +0000 (15:30 -0700)]
Bug: 10593596
Change-Id: I708d2396266d083a494e57eab2637471e54e1cdc

src/com/android/providers/downloads/DownloadStorageProvider.java

index 728a5aa..bc2ec0c 100644 (file)
@@ -81,7 +81,8 @@ public class DownloadStorageProvider extends DocumentsProvider {
         row.offer(Root.COLUMN_ROOT_ID, DOC_ID_ROOT);
         row.offer(Root.COLUMN_ROOT_TYPE, Root.ROOT_TYPE_SHORTCUT);
         row.offer(Root.COLUMN_FLAGS, Root.FLAG_LOCAL_ONLY | Root.FLAG_PROVIDES_AUDIO
-                | Root.FLAG_PROVIDES_VIDEO | Root.FLAG_PROVIDES_IMAGES);
+                | Root.FLAG_PROVIDES_VIDEO | Root.FLAG_PROVIDES_IMAGES
+                | Root.FLAG_SUPPORTS_RECENTS);
         row.offer(Root.COLUMN_ICON, R.mipmap.ic_launcher_download);
         row.offer(Root.COLUMN_TITLE, getContext().getString(R.string.root_downloads));
         row.offer(Root.COLUMN_DOCUMENT_ID, DOC_ID_ROOT);
@@ -145,6 +146,27 @@ public class DownloadStorageProvider extends DocumentsProvider {
     }
 
     @Override
+    public Cursor queryRecentDocuments(String rootId, String[] projection)
+            throws FileNotFoundException {
+        final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection));
+
+        // Delegate to real provider
+        final long token = Binder.clearCallingIdentity();
+        Cursor cursor = null;
+        try {
+            cursor = mDm.query(new DownloadManager.Query().setOnlyIncludeVisibleInDownloadsUi(true)
+                    .setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL));
+            while (cursor.moveToNext() && result.getCount() < 12) {
+                includeDownloadFromCursor(result, cursor);
+            }
+        } finally {
+            IoUtils.closeQuietly(cursor);
+            Binder.restoreCallingIdentity(token);
+        }
+        return result;
+    }
+
+    @Override
     public ParcelFileDescriptor openDocument(String docId, String mode, CancellationSignal signal)
             throws FileNotFoundException {
         if (!"r".equals(mode)) {