diff options
author | Jeff Sharkey <jsharkey@android.com> | 2014-08-04 15:32:42 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@google.com> | 2014-08-05 18:34:37 +0000 |
commit | ab1e9bddd83466f15c2f61fbc0b942c6416eb87a (patch) | |
tree | ef9f2b633e5e681c62b5b21ae9c3f59452b45c04 /packages/ExternalStorageProvider | |
parent | e4cf152cb766784b514f99caf82da5648e5de358 (diff) | |
download | frameworks_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.java | 25 |
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 |