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

Commit d3af58e2 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android Git Automerger
Browse files

am 4296209d: am 3d65dcbc: am 58843059: am e69ff2a8: Merge "Clean stale entries...

am 4296209d: am 3d65dcbc: am 58843059: am e69ff2a8: Merge "Clean stale entries when deleting files." into mnc-dr-dev

* commit '4296209d':
  Clean stale entries when deleting files.
parents 4a1b927c 4296209d
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
import android.provider.DocumentsProvider;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.DebugUtils;
@@ -380,12 +381,31 @@ public class ExternalStorageProvider extends DocumentsProvider {
    @Override
    public void deleteDocument(String docId) throws FileNotFoundException {
        final File file = getFileForDocId(docId);
        if (file.isDirectory()) {
        final boolean isDirectory = file.isDirectory();
        if (isDirectory) {
            FileUtils.deleteContents(file);
        }
        if (!file.delete()) {
            throw new IllegalStateException("Failed to delete " + file);
        }

        final ContentResolver resolver = getContext().getContentResolver();
        final Uri externalUri = MediaStore.Files.getContentUri("external");

        // Remove media store entries for any files inside this directory, using
        // path prefix match. Logic borrowed from MtpDatabase.
        if (isDirectory) {
            final String path = file.getAbsolutePath() + "/";
            resolver.delete(externalUri,
                    "_data LIKE ?1 AND lower(substr(_data,1,?2))=lower(?3)",
                    new String[] { path + "%", Integer.toString(path.length()), path });
        }

        // Remove media store entry for this exact file.
        final String path = file.getAbsolutePath();
        resolver.delete(externalUri,
                "_data LIKE ?1 AND lower(_data)=lower(?2)",
                new String[] { path, path });
    }

    @Override