diff options
author | Tomasz Mikolajewski <mtomasz@google.com> | 2015-04-10 17:32:44 +0900 |
---|---|---|
committer | Tomasz Mikolajewski <mtomasz@google.com> | 2015-04-13 11:40:04 +0900 |
commit | 738154ee84a37a27e57b8ecca70d3c943728327d (patch) | |
tree | 86850ebe63750fdedbd682786fdee3fe811fb569 | |
parent | 40355c2e96a2a6f2f52c4c38991b3ee54bdb5e2a (diff) | |
download | frameworks_base-738154ee84a37a27e57b8ecca70d3c943728327d.zip frameworks_base-738154ee84a37a27e57b8ecca70d3c943728327d.tar.gz frameworks_base-738154ee84a37a27e57b8ecca70d3c943728327d.tar.bz2 |
Add support for removing files and directories in StubProvider.
Along the way it updates clients about changes in used storage.
Change-Id: I02fb1333e1f97f1476b87310a27b75d99fa00854
-rw-r--r-- | packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java index 79e7d7d..96f8e98 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java @@ -17,6 +17,7 @@ package com.android.documentsui; import android.content.Context; +import android.content.pm.ProviderInfo; import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.database.MatrixCursor.RowBuilder; @@ -25,6 +26,7 @@ import android.graphics.Point; import android.os.CancellationSignal; import android.os.FileUtils; import android.os.ParcelFileDescriptor; +import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; import android.provider.DocumentsContract.Root; import android.provider.DocumentsContract.Root; @@ -42,6 +44,7 @@ public class StubProvider extends DocumentsProvider { private static int STORAGE_SIZE = 1024 * 1024; // 1 MB. private static final String TAG = "StubProvider"; private static final String MY_ROOT_ID = "myRoot"; + private static final String[] DEFAULT_ROOT_PROJECTION = new String[] { Root.COLUMN_ROOT_ID, Root.COLUMN_FLAGS, Root.COLUMN_TITLE, Root.COLUMN_DOCUMENT_ID, Root.COLUMN_AVAILABLE_BYTES @@ -55,6 +58,13 @@ public class StubProvider extends DocumentsProvider { private HashMap<String, File> mStorage = new HashMap<String, File>(); private int mStorageUsedBytes; private Object mWriteLock = new Object(); + private String mAuthority; + + @Override + public void attachInfo(Context context, ProviderInfo info) { + mAuthority = info.authority; + super.attachInfo(context, info); + } @Override public boolean onCreate() { @@ -128,6 +138,19 @@ public class StubProvider extends DocumentsProvider { } @Override + public void deleteDocument(String documentId) + throws FileNotFoundException { + final File file = mStorage.get(documentId); + final long fileSize = file.length(); + if (file == null || !file.delete()) + throw new FileNotFoundException(); + synchronized (mWriteLock) { + mStorageUsedBytes -= fileSize; + } + notifyStorageChanged(); + } + + @Override public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) throws FileNotFoundException { final MatrixCursor result = new MatrixCursor(projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION); @@ -208,6 +231,7 @@ public class StubProvider extends DocumentsProvider { } finally { closePipeSilently(readPipe); + notifyStorageChanged(); } } }.start(); @@ -231,6 +255,10 @@ public class StubProvider extends DocumentsProvider { } } + private void notifyStorageChanged() { + getContext().getContentResolver().notifyChange(DocumentsContract.buildRootsUri(mAuthority), null, false); + } + private void includeFile(MatrixCursor result, File file) { final RowBuilder row = result.newRow(); row.add(Document.COLUMN_DOCUMENT_ID, getDocumentIdForFile(file)); @@ -238,8 +266,8 @@ public class StubProvider extends DocumentsProvider { row.add(Document.COLUMN_SIZE, file.length()); // TODO: Provide real mime type for files. row.add(Document.COLUMN_MIME_TYPE, file.isDirectory() ? Document.MIME_TYPE_DIR : "application/octet-stream"); - int flags = 0; - // TODO: Add support for renaming and deleting. + int flags = Document.FLAG_SUPPORTS_DELETE; + // TODO: Add support for renaming. if (file.isDirectory()) { flags |= Document.FLAG_DIR_SUPPORTS_CREATE; } else { |