title: queryRoots calls queryDocument first, not queryChildDocuments
body: <p>I'm writing a wrapper for SAF wrapper for Dropbox since everyone (including Google) is too lazy to implement this "very rich" (ie: awful) API.  I've got my root in the picker, but I thought <code>queryChildren</code> should be called first.  However, <code>queryChildren is never called and it goes straight to</code>queryDocument`.</p>
  
  <pre><code>override fun queryRoots(projection: Array&lt;out String&gt;?): Cursor {
      // TODO: Likely need to be more strict about projection (ie: map to supported)
      val result = MatrixCursor(projection ?: DEFAULT_ROOT_PROJECTION)
  
      val row = result.newRow()
      row.add(DocumentsContract.Root.COLUMN_ROOT_ID, "com.anthonymandra.cloudprovider.dropbox")
      row.add(DocumentsContract.Root.COLUMN_ICON, R.drawable.ic_dropbox_gray)
      row.add(DocumentsContract.Root.COLUMN_TITLE, "Dropbox")
      row.add(DocumentsContract.Root.COLUMN_FLAGS, DocumentsContract.Root.FLAG_SUPPORTS_CREATE)   // TODO:
      row.add(DocumentsContract.Root.COLUMN_DOCUMENT_ID, ROOT_DOCUMENT_ID)
      return result
  }
  
  override fun queryChildDocuments(
      parentDocumentId: String?,
      projection: Array&lt;out String&gt;?,
      sortOrder: String?
  ): Cursor {
      // TODO: Likely need to be more strict about projection (ie: map to supported)
      val result = MatrixCursor(projection ?: DEFAULT_DOCUMENT_PROJECTION)
      val dropboxPath = if (parentDocumentId == ROOT_DOCUMENT_ID) "" else parentDocumentId
  
      try {
          val client = DropboxClientFactory.client
  
          var childFolders = client.files().listFolder(dropboxPath)
          while (true) {
              for (metadata in childFolders.entries) {
                  addDocumentRow(result, metadata)
              }
  
              if (!childFolders.hasMore) {
                  break
              }
  
              childFolders = client.files().listFolderContinue(childFolders.cursor)
          }
      } catch(e: IllegalStateException) { // Test if we can attempt auth thru the provider
          context?.let {
              Auth.startOAuth2Authentication(it, appKey)   // TODO: appKey
          }
      }
      return result
  }
  
  override fun queryDocument(documentId: String?, projection: Array&lt;out String&gt;?): Cursor {
      // TODO: Likely need to be more strict about projection (ie: map to supported)
      val result = MatrixCursor(projection ?: DEFAULT_DOCUMENT_PROJECTION)
  
      try {
          val client = DropboxClientFactory.client
          val metadata = client.files().getMetadata(documentId)
          addDocumentRow(result, metadata)
      } catch(e: IllegalStateException) { // Test if we can attempt auth thru the provider
          context?.let {
              Auth.startOAuth2Authentication(it, appKey)   // TODO: appKey
          }
      }
      return result
  }
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>java.lang.IllegalArgumentException: String 'path' does not match pattern
      at com.dropbox.core.v2.files.GetMetadataArg.&lt;init&gt;(GetMetadataArg.java:58)
      at com.dropbox.core.v2.files.GetMetadataArg.&lt;init&gt;(GetMetadataArg.java:80)
      at com.dropbox.core.v2.files.DbxUserFilesRequests.getMetadata(DbxUserFilesRequests.java:1285)
      at com.anthonymandra.cloudprovider.dropbox.DropboxProvider.queryDocument(DropboxProvider.kt:98)
      at android.provider.DocumentsProvider.query(DocumentsProvider.java:797)
      at android.content.ContentProvider$Transport.query(ContentProvider.java:240)
      at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:102)
      at android.os.Binder.execTransact(Binder.java:731)
  </code></pre>
  
  <p><code>path</code> is <code>ROOT_DOCUMENT_ID</code> which I'm expecting to go to <code>queryChildDocuments</code> first.</p>
  
  <p>What am I missing here?</p>