summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@android.com> 2019-04-14 12:23:35 -0600
committer Jeff Sharkey <jsharkey@android.com> 2019-04-14 12:23:37 -0600
commitdb73a7da263849c9109cb6f906a01ca0c61d8da4 (patch)
treedc027efc79e3e792dc13573a6198885a9c29b2a9
parent89082d70f0bc778a6c095df3de782ec2ddc96ae2 (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.java32
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);
}
}