Check for Downloads dir's existence and create it if it doesn't exist.
Ben Lin [Thu, 30 Mar 2017 23:28:27 +0000 (16:28 -0700)]
It's possible that Downloads directory (for whatever reason) is not
available on disk, and thus all sorts of bugs happen (Can't create
folder/files, can't query files inside the folder). This will make sure
if DownloadStorageProvider#queryRoot is called, then we
will create the folder.

Test: Builds.
Bug: 35930004
Change-Id: I517ac20c1865f356912decd92a591a37d52ba90b

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

index ee96362..08a3f67 100644 (file)
@@ -113,6 +113,11 @@ public class DownloadStorageProvider extends FileSystemProvider {
 
     @Override
     public Cursor queryRoots(String[] projection) throws FileNotFoundException {
+        // It's possible that the folder does not exist on disk, so we will create the folder if
+        // that is the case. If user decides to delete the folder later, then it's OK to fail on
+        // subsequent queries.
+        getDownloadsDirectory().mkdirs();
+
         final MatrixCursor result = new MatrixCursor(resolveRootProjection(projection));
         final RowBuilder row = result.newRow();
         row.add(Root.COLUMN_ROOT_ID, DOC_ID_ROOT);
@@ -431,8 +436,6 @@ public class DownloadStorageProvider extends FileSystemProvider {
                 Document.FLAG_DIR_PREFERS_LAST_MODIFIED | Document.FLAG_DIR_SUPPORTS_CREATE);
     }
 
-
-
     /**
      * Adds the entry from the cursor to the result only if the entry is valid. That is,
      * if the file exists in the file system.