diff options
author | Jeff Sharkey <jsharkey@google.com> | 2015-09-30 20:11:17 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-09-30 20:11:17 +0000 |
commit | 588430591b7bb5340ff02f05f1c02eaf924326ad (patch) | |
tree | 6bcd0ef6beab8da15737c0412ca216f39e6d5175 /packages | |
parent | a4a758032537cceb47a0924b5082cb2197c5e446 (diff) | |
parent | e69ff2a878ee7635a467259995e2924fb96a3a72 (diff) | |
download | frameworks_base-588430591b7bb5340ff02f05f1c02eaf924326ad.zip frameworks_base-588430591b7bb5340ff02f05f1c02eaf924326ad.tar.gz frameworks_base-588430591b7bb5340ff02f05f1c02eaf924326ad.tar.bz2 |
am e69ff2a8: Merge "Clean stale entries when deleting files." into mnc-dr-dev
* commit 'e69ff2a878ee7635a467259995e2924fb96a3a72':
Clean stale entries when deleting files.
Diffstat (limited to 'packages')
-rw-r--r-- | packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 393771a..18335b6 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -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 |