diff options
| author | 2019-04-14 12:23:35 -0600 | |
|---|---|---|
| committer | 2019-04-14 12:23:37 -0600 | |
| commit | db73a7da263849c9109cb6f906a01ca0c61d8da4 (patch) | |
| tree | dc027efc79e3e792dc13573a6198885a9c29b2a9 | |
| parent | 89082d70f0bc778a6c095df3de782ec2ddc96ae2 (diff) | |
Renaming or moving files should initiate scan.
These FileSystemProvider operations should initiate a MediaStore scan
to ensure that it presents an updated view of the filesystem.
Bug: 129901992, 130356514
Test: manual
Change-Id: I612481282cf739b88a1637b147fb4d4555fb5b8f
| -rw-r--r-- | core/java/com/android/internal/content/FileSystemProvider.java | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/core/java/com/android/internal/content/FileSystemProvider.java b/core/java/com/android/internal/content/FileSystemProvider.java index 18c4b467dfba..a7244a744abf 100644 --- a/core/java/com/android/internal/content/FileSystemProvider.java +++ b/core/java/com/android/internal/content/FileSystemProvider.java @@ -332,33 +332,11 @@ public abstract class FileSystemProvider extends DocumentsProvider { } private void moveInMediaStore(@Nullable File oldVisibleFile, @Nullable File newVisibleFile) { - // visibleFolders are null if we're moving a document in external thumb drive or SD card. - // - // They should be all null or not null at the same time. File#renameTo() doesn't work across - // volumes so an exception will be thrown before calling this method. - if (oldVisibleFile != null && newVisibleFile != null) { - final long token = Binder.clearCallingIdentity(); - - try { - final ContentResolver resolver = getContext().getContentResolver(); - final Uri externalUri = newVisibleFile.isDirectory() - ? MediaStore.Files.getDirectoryUri("external") - : MediaStore.Files.getContentUri("external"); - - ContentValues values = new ContentValues(); - values.put(MediaStore.Files.FileColumns.DATA, newVisibleFile.getAbsolutePath()); - - // Logic borrowed from MtpDatabase. - // note - we are relying on a special case in MediaProvider.update() to update - // the paths for all children in the case where this is a directory. - final String path = oldVisibleFile.getAbsolutePath(); - resolver.update(externalUri, - values, - "_data LIKE ? AND lower(_data)=lower(?)", - new String[]{path, path}); - } finally { - Binder.restoreCallingIdentity(token); - } + if (oldVisibleFile != null) { + MediaStore.scanFile(getContext(), oldVisibleFile); + } + if (newVisibleFile != null) { + MediaStore.scanFile(getContext(), newVisibleFile); } } |