summaryrefslogtreecommitdiffstats
path: root/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2013-08-15 16:17:41 -0700
committerJeff Sharkey <jsharkey@android.com>2013-08-15 16:25:30 -0700
commita5599ef636e37cb0b6474349936999be1afe6987 (patch)
treeab99c3f837201713f7cd2c0b80a842334934e2d4 /packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
parent54ca29a5b94c2edf461c5433825d4ae17469fd7c (diff)
downloadframeworks_base-a5599ef636e37cb0b6474349936999be1afe6987.zip
frameworks_base-a5599ef636e37cb0b6474349936999be1afe6987.tar.gz
frameworks_base-a5599ef636e37cb0b6474349936999be1afe6987.tar.bz2
Documents management mode; API adjustment.
Create documents manage mode to support Downloads and transient storage devices. Locks user into requested backend root, and forces file sizes on and sorting by last modified. Separate API constants for Documents versus Roots, and give concrete MIME types for roots. Treat null sizes as unknown. Documents are always enabled in list so that divider is drawn. Mark external storage file as writable. Bug: 10329983, 10332993, 10332952 Change-Id: I05f4fdf5b04041a38e1ba7fb30202a3b0c615bf6
Diffstat (limited to 'packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java')
-rw-r--r--packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java33
1 files changed, 21 insertions, 12 deletions
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 5c12484..659139d 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -28,7 +28,9 @@ import android.os.ParcelFileDescriptor;
import android.provider.BaseColumns;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.DocumentColumns;
+import android.provider.DocumentsContract.Documents;
import android.provider.DocumentsContract.RootColumns;
+import android.provider.DocumentsContract.Roots;
import android.util.Log;
import android.webkit.MimeTypeMap;
@@ -79,7 +81,7 @@ public class ExternalStorageProvider extends ContentProvider {
mRoots.clear();
final Root root = new Root();
- root.rootType = DocumentsContract.ROOT_TYPE_DEVICE_ADVANCED;
+ root.rootType = Roots.ROOT_TYPE_DEVICE_ADVANCED;
root.name = "primary";
root.title = getContext().getString(R.string.root_internal_storage);
root.path = Environment.getExternalStorageDirectory();
@@ -173,7 +175,7 @@ public class ExternalStorageProvider extends ContentProvider {
String rootPath = root.path.getAbsolutePath();
final String path = file.getAbsolutePath();
if (path.equals(rootPath)) {
- return DocumentsContract.ROOT_DOC_ID;
+ return Documents.DOC_ID_ROOT;
}
if (!rootPath.endsWith("/")) {
@@ -187,7 +189,7 @@ public class ExternalStorageProvider extends ContentProvider {
}
private File docIdToFile(Root root, String docId) {
- if (DocumentsContract.ROOT_DOC_ID.equals(docId)) {
+ if (Documents.DOC_ID_ROOT.equals(docId)) {
return root.path;
} else {
return new File(root.path, docId);
@@ -204,26 +206,27 @@ public class ExternalStorageProvider extends ContentProvider {
int flags = 0;
if (file.isDirectory()) {
- flags |= DocumentsContract.FLAG_SUPPORTS_SEARCH;
+ flags |= Documents.FLAG_SUPPORTS_SEARCH;
}
if (file.isDirectory() && file.canWrite()) {
- flags |= DocumentsContract.FLAG_SUPPORTS_CREATE;
+ flags |= Documents.FLAG_SUPPORTS_CREATE;
}
if (file.canWrite()) {
- flags |= DocumentsContract.FLAG_SUPPORTS_RENAME;
- flags |= DocumentsContract.FLAG_SUPPORTS_DELETE;
+ flags |= Documents.FLAG_SUPPORTS_WRITE;
+ flags |= Documents.FLAG_SUPPORTS_RENAME;
+ flags |= Documents.FLAG_SUPPORTS_DELETE;
}
final String mimeType = getTypeForFile(file);
if (mimeType.startsWith("image/")) {
- flags |= DocumentsContract.FLAG_SUPPORTS_THUMBNAIL;
+ flags |= Documents.FLAG_SUPPORTS_THUMBNAIL;
}
final String docId = fileToDocId(root, file);
final long id = docId.hashCode();
final String displayName;
- if (DocumentsContract.ROOT_DOC_ID.equals(docId)) {
+ if (Documents.DOC_ID_ROOT.equals(docId)) {
displayName = root.title;
} else {
displayName = file.getName();
@@ -236,6 +239,12 @@ public class ExternalStorageProvider extends ContentProvider {
@Override
public String getType(Uri uri) {
switch (sMatcher.match(uri)) {
+ case URI_ROOTS: {
+ return Roots.MIME_TYPE_DIR;
+ }
+ case URI_ROOTS_ID: {
+ return Roots.MIME_TYPE_ITEM;
+ }
case URI_DOCS_ID: {
final Root root = mRoots.get(DocumentsContract.getRootId(uri));
final String docId = DocumentsContract.getDocId(uri);
@@ -249,7 +258,7 @@ public class ExternalStorageProvider extends ContentProvider {
private String getTypeForFile(File file) {
if (file.isDirectory()) {
- return DocumentsContract.MIME_TYPE_DIRECTORY;
+ return Documents.MIME_TYPE_DIR;
} else {
return getTypeForName(file.getName());
}
@@ -299,7 +308,7 @@ public class ExternalStorageProvider extends ContentProvider {
values.getAsString(DocumentColumns.DISPLAY_NAME), mimeType);
final File file = new File(parent, name);
- if (DocumentsContract.MIME_TYPE_DIRECTORY.equals(mimeType)) {
+ if (Documents.MIME_TYPE_DIR.equals(mimeType)) {
if (!file.mkdir()) {
return null;
}
@@ -359,7 +368,7 @@ public class ExternalStorageProvider extends ContentProvider {
}
private String validateDisplayName(String displayName, String mimeType) {
- if (DocumentsContract.MIME_TYPE_DIRECTORY.equals(mimeType)) {
+ if (Documents.MIME_TYPE_DIR.equals(mimeType)) {
return displayName;
} else {
// Try appending meaningful extension if needed