Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db73a7da authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

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
parent 89082d70
Loading
Loading
Loading
Loading
+5 −27
Original line number Diff line number Diff line
@@ -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);
        }
    }