diff options
author | Jeff Sharkey <jsharkey@android.com> | 2014-04-23 07:15:32 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-04-23 07:15:32 +0000 |
commit | 3e5991c1eb3a54960675307335d24fca2fe3fa6d (patch) | |
tree | 2e3fc17c942818ec93439de00b7dbd3cc001a18f /packages/ExternalStorageProvider | |
parent | d5f8b4d26a26a4c77a49fd3ea32710e6278ce99c (diff) | |
parent | 21de56a94668e0fda1b8bb4ee4f99a09b40d28fd (diff) | |
download | frameworks_base-3e5991c1eb3a54960675307335d24fca2fe3fa6d.zip frameworks_base-3e5991c1eb3a54960675307335d24fca2fe3fa6d.tar.gz frameworks_base-3e5991c1eb3a54960675307335d24fca2fe3fa6d.tar.bz2 |
am 21de56a9: Add directory selection to DocumentsProvider.
* commit '21de56a94668e0fda1b8bb4ee4f99a09b40d28fd':
Add directory selection to DocumentsProvider.
Diffstat (limited to 'packages/ExternalStorageProvider')
-rw-r--r-- | packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 559e052..16fc3e5 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -27,6 +27,7 @@ import android.net.Uri; import android.os.CancellationSignal; import android.os.Environment; import android.os.FileObserver; +import android.os.FileUtils; import android.os.ParcelFileDescriptor; import android.os.storage.StorageManager; import android.os.storage.StorageVolume; @@ -143,7 +144,7 @@ public class ExternalStorageProvider extends DocumentsProvider { final RootInfo root = new RootInfo(); root.rootId = rootId; root.flags = Root.FLAG_SUPPORTS_CREATE | Root.FLAG_LOCAL_ONLY | Root.FLAG_ADVANCED - | Root.FLAG_SUPPORTS_SEARCH; + | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_DIR_SELECTION; if (ROOT_ID_PRIMARY_EMULATED.equals(rootId)) { root.title = getContext().getString(R.string.root_internal_storage); } else { @@ -240,8 +241,8 @@ public class ExternalStorageProvider extends DocumentsProvider { flags |= Document.FLAG_DIR_SUPPORTS_CREATE; } else { flags |= Document.FLAG_SUPPORTS_WRITE; + flags |= Document.FLAG_SUPPORTS_DELETE; } - flags |= Document.FLAG_SUPPORTS_DELETE; } final String displayName = file.getName(); @@ -284,11 +285,26 @@ public class ExternalStorageProvider extends DocumentsProvider { } @Override + public boolean isChildDocument(String parentDocId, String docId) { + try { + final File parent = getFileForDocId(parentDocId).getCanonicalFile(); + final File doc = getFileForDocId(docId).getCanonicalFile(); + return FileUtils.contains(parent, doc); + } catch (IOException e) { + throw new IllegalArgumentException( + "Failed to determine if " + docId + " is child of " + parentDocId + ": " + e); + } + } + + @Override public String createDocument(String docId, String mimeType, String displayName) throws FileNotFoundException { final File parent = getFileForDocId(docId); - File file; + if (!parent.isDirectory()) { + throw new IllegalArgumentException("Parent document isn't a directory"); + } + File file; if (Document.MIME_TYPE_DIR.equals(mimeType)) { file = new File(parent, displayName); if (!file.mkdir()) { @@ -317,6 +333,7 @@ public class ExternalStorageProvider extends DocumentsProvider { @Override public void deleteDocument(String docId) throws FileNotFoundException { + // TODO: extend to delete directories final File file = getFileForDocId(docId); if (!file.delete()) { throw new IllegalStateException("Failed to delete " + file); |