summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Mikolajewski <mtomasz@google.com>2015-04-10 17:32:44 +0900
committerTomasz Mikolajewski <mtomasz@google.com>2015-04-13 11:40:04 +0900
commit738154ee84a37a27e57b8ecca70d3c943728327d (patch)
tree86850ebe63750fdedbd682786fdee3fe811fb569
parent40355c2e96a2a6f2f52c4c38991b3ee54bdb5e2a (diff)
downloadframeworks_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.java32
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 {