summaryrefslogtreecommitdiffstats
path: root/packages/ExternalStorageProvider
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2014-08-04 15:32:42 -0700
committerJeff Sharkey <jsharkey@google.com>2014-08-05 18:34:37 +0000
commitab1e9bddd83466f15c2f61fbc0b942c6416eb87a (patch)
treeef9f2b633e5e681c62b5b21ae9c3f59452b45c04 /packages/ExternalStorageProvider
parente4cf152cb766784b514f99caf82da5648e5de358 (diff)
downloadframeworks_base-ab1e9bddd83466f15c2f61fbc0b942c6416eb87a.zip
frameworks_base-ab1e9bddd83466f15c2f61fbc0b942c6416eb87a.tar.gz
frameworks_base-ab1e9bddd83466f15c2f61fbc0b942c6416eb87a.tar.bz2
Scan after writing external storage files.
Kicks off media scanner after files are written. Bug: 13557203 Change-Id: I61613f28e07b068573079cc1e362fd3fe135684e
Diffstat (limited to 'packages/ExternalStorageProvider')
-rw-r--r--packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 9473eb9..c323a33 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -18,6 +18,7 @@ package com.android.externalstorage;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.MatrixCursor;
@@ -28,7 +29,9 @@ import android.os.CancellationSignal;
import android.os.Environment;
import android.os.FileObserver;
import android.os.FileUtils;
+import android.os.Handler;
import android.os.ParcelFileDescriptor;
+import android.os.ParcelFileDescriptor.OnCloseListener;
import android.os.storage.StorageManager;
import android.os.storage.StorageVolume;
import android.provider.DocumentsContract;
@@ -80,6 +83,7 @@ public class ExternalStorageProvider extends DocumentsProvider {
private static final String ROOT_ID_PRIMARY_EMULATED = "primary";
private StorageManager mStorageManager;
+ private Handler mHandler;
private final Object mRootsLock = new Object();
@@ -96,6 +100,7 @@ public class ExternalStorageProvider extends DocumentsProvider {
@Override
public boolean onCreate() {
mStorageManager = (StorageManager) getContext().getSystemService(Context.STORAGE_SERVICE);
+ mHandler = new Handler();
mRoots = Lists.newArrayList();
mIdToRoot = Maps.newHashMap();
@@ -422,7 +427,25 @@ public class ExternalStorageProvider extends DocumentsProvider {
String documentId, String mode, CancellationSignal signal)
throws FileNotFoundException {
final File file = getFileForDocId(documentId);
- return ParcelFileDescriptor.open(file, ParcelFileDescriptor.parseMode(mode));
+ final int pfdMode = ParcelFileDescriptor.parseMode(mode);
+ if (pfdMode == ParcelFileDescriptor.MODE_READ_ONLY) {
+ return ParcelFileDescriptor.open(file, pfdMode);
+ } else {
+ try {
+ // When finished writing, kick off media scanner
+ return ParcelFileDescriptor.open(file, pfdMode, mHandler, new OnCloseListener() {
+ @Override
+ public void onClose(IOException e) {
+ final Intent intent = new Intent(
+ Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
+ intent.setData(Uri.fromFile(file));
+ getContext().sendBroadcast(intent);
+ }
+ });
+ } catch (IOException e) {
+ throw new FileNotFoundException("Failed to open for writing: " + e);
+ }
+ }
}
@Override