summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorge Gil <jorgegil@google.com>2016-08-23 21:13:51 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-08-23 21:13:51 +0000
commit8cd8a341d99eac65b1497a54c681ee7ca5962b9d (patch)
tree4268d629dbf6051b3b3fe3fcfd941e02b594d35c
parent7c32d1642592b8f2e430b1cc3dc0b26268e30f66 (diff)
parent314026d4e85d0d1d075d5de83038cec1e751ec64 (diff)
downloadandroid_packages_providers_DownloadProvider-8cd8a341d99eac65b1497a54c681ee7ca5962b9d.tar.gz
android_packages_providers_DownloadProvider-8cd8a341d99eac65b1497a54c681ee7ca5962b9d.tar.bz2
android_packages_providers_DownloadProvider-8cd8a341d99eac65b1497a54c681ee7ca5962b9d.zip
DO NOT MERGE: Check that file exists in disk in queryChildDocs
am: 314026d4e8 Change-Id: I3456cd39d299e97e9d2ef7ce200596bd829c3cdc
-rw-r--r--src/com/android/providers/downloads/DownloadStorageProvider.java14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/com/android/providers/downloads/DownloadStorageProvider.java b/src/com/android/providers/downloads/DownloadStorageProvider.java
index e0bb7cd1..80d6ac79 100644
--- a/src/com/android/providers/downloads/DownloadStorageProvider.java
+++ b/src/com/android/providers/downloads/DownloadStorageProvider.java
@@ -325,6 +325,10 @@ public class DownloadStorageProvider extends DocumentsProvider {
Document.FLAG_DIR_PREFERS_LAST_MODIFIED | Document.FLAG_DIR_SUPPORTS_CREATE);
}
+ /**
+ * Adds the entry from the cursor to the result only if the entry is valid. That is,
+ * if the file exists in the file system.
+ */
private void includeDownloadFromCursor(MatrixCursor result, Cursor cursor) {
final long id = cursor.getLong(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_ID));
final String docId = String.valueOf(id);
@@ -344,12 +348,20 @@ public class DownloadStorageProvider extends DocumentsProvider {
if (size == -1) {
size = null;
}
+ String localFilePath = cursor.getString(
+ cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_FILENAME));
int extraFlags = Document.FLAG_PARTIAL;
final int status = cursor.getInt(
cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS));
switch (status) {
case DownloadManager.STATUS_SUCCESSFUL:
+ // Verify that the document still exists in external storage. This is necessary
+ // because files can be deleted from the file system without their entry being
+ // removed from DownloadsManager.
+ if (localFilePath == null || !new File(localFilePath).exists()) {
+ return;
+ }
extraFlags = Document.FLAG_SUPPORTS_RENAME; // only successful is non-partial
break;
case DownloadManager.STATUS_PAUSED:
@@ -400,8 +412,6 @@ public class DownloadStorageProvider extends DocumentsProvider {
row.add(Document.COLUMN_LAST_MODIFIED, lastModified);
}
- final String localFilePath = cursor.getString(
- cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_FILENAME));
if (localFilePath != null) {
row.add(DocumentArchiveHelper.COLUMN_LOCAL_FILE_PATH, localFilePath);
}