summaryrefslogtreecommitdiffstats
path: root/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
diff options
context:
space:
mode:
Diffstat (limited to 'packages/DocumentsUI/src/com/android/documentsui/RootsCache.java')
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/RootsCache.java46
1 files changed, 26 insertions, 20 deletions
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
index aa21457..880a92b 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
@@ -25,17 +25,21 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
+import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.DocumentRoot;
-import android.provider.DocumentsContract.Documents;
+import android.provider.DocumentsContract.Document;
+import android.provider.DocumentsContract.Root;
import android.util.Log;
+import com.android.documentsui.model.RootInfo;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.Objects;
import com.google.android.collect.Lists;
+import libcore.io.IoUtils;
+
import java.util.List;
/**
@@ -48,9 +52,9 @@ public class RootsCache {
private final Context mContext;
- public List<DocumentRoot> mRoots = Lists.newArrayList();
+ public List<RootInfo> mRoots = Lists.newArrayList();
- private DocumentRoot mRecentsRoot;
+ private RootInfo mRecentsRoot;
public RootsCache(Context context) {
mContext = context;
@@ -66,12 +70,10 @@ public class RootsCache {
{
// Create special root for recents
- final DocumentRoot root = new DocumentRoot();
- root.rootType = DocumentRoot.ROOT_TYPE_SHORTCUT;
- root.docId = null;
+ final RootInfo root = new RootInfo();
+ root.rootType = Root.ROOT_TYPE_SHORTCUT;
root.icon = R.drawable.ic_dir;
root.title = mContext.getString(R.string.root_recent);
- root.summary = null;
root.availableBytes = -1;
mRoots.add(root);
@@ -89,28 +91,32 @@ public class RootsCache {
// TODO: remove deprecated customRoots flag
// TODO: populate roots on background thread, and cache results
+ final Uri rootsUri = DocumentsContract.buildRootsUri(info.authority);
final ContentProviderClient client = resolver
.acquireUnstableContentProviderClient(info.authority);
+ Cursor cursor = null;
try {
- final List<DocumentRoot> roots = DocumentsContract.getDocumentRoots(client);
- for (DocumentRoot root : roots) {
- root.authority = info.authority;
+ cursor = client.query(rootsUri, null, null, null, null);
+ while (cursor.moveToNext()) {
+ final RootInfo root = RootInfo.fromRootsCursor(info.authority, cursor);
+ mRoots.add(root);
}
- mRoots.addAll(roots);
} catch (Exception e) {
Log.w(TAG, "Failed to load some roots from " + info.authority + ": " + e);
} finally {
+ IoUtils.closeQuietly(cursor);
ContentProviderClient.closeQuietly(client);
}
}
}
}
- public DocumentRoot findRoot(Uri uri) {
+ @Deprecated
+ public RootInfo findRoot(Uri uri) {
final String authority = uri.getAuthority();
- final String docId = DocumentsContract.getDocId(uri);
- for (DocumentRoot root : mRoots) {
- if (Objects.equal(root.authority, authority) && Objects.equal(root.docId, docId)) {
+ final String docId = DocumentsContract.getDocumentId(uri);
+ for (RootInfo root : mRoots) {
+ if (Objects.equal(root.authority, authority) && Objects.equal(root.documentId, docId)) {
return root;
}
}
@@ -118,23 +124,23 @@ public class RootsCache {
}
@GuardedBy("ActivityThread")
- public DocumentRoot getRecentsRoot() {
+ public RootInfo getRecentsRoot() {
return mRecentsRoot;
}
@GuardedBy("ActivityThread")
- public boolean isRecentsRoot(DocumentRoot root) {
+ public boolean isRecentsRoot(RootInfo root) {
return mRecentsRoot == root;
}
@GuardedBy("ActivityThread")
- public List<DocumentRoot> getRoots() {
+ public List<RootInfo> getRoots() {
return mRoots;
}
@GuardedBy("ActivityThread")
public static Drawable resolveDocumentIcon(Context context, String mimeType) {
- if (Documents.MIME_TYPE_DIR.equals(mimeType)) {
+ if (Document.MIME_TYPE_DIR.equals(mimeType)) {
return context.getResources().getDrawable(R.drawable.ic_dir);
} else {
final PackageManager pm = context.getPackageManager();