Merge "Insert downloaded file to MediaStore db only after Download is complete" into rvc-dev am: 805096693a am: c8e8d2f321 am: ca4394c179 am: 0634b5f850
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/providers/DownloadProvider/+/11759899
Change-Id: I5f18af14b6205e0477173f3ea53e11a7e4164f01
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index f6a07c0..36c3233 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -1012,6 +1012,8 @@
mediaValues.put(MediaStore.Downloads.DOWNLOAD_URI, info.mUri);
mediaValues.put(MediaStore.Downloads.REFERER_URI, info.mReferer);
mediaValues.put(MediaStore.Downloads.MIME_TYPE, info.mMimeType);
+ // Note: Since we use DATA column for insert, MediaProvider will not respect IS_PENDING,
+ // IS_PENDING will be unset to zero, Hence IS_PENDING usage here is a no-op.
mediaValues.put(MediaStore.Downloads.IS_PENDING, downloadCompleted ? 0 : 1);
mediaValues.put(MediaStore.Downloads.OWNER_PACKAGE_NAME,
Helpers.getPackageForUid(getContext(), info.mUid));
@@ -1548,7 +1550,12 @@
updateMediaProvider(client, mediaValues);
mediaStoreUri = triggerMediaScan(client, new File(info.mFileName));
} else {
- mediaStoreUri = updateMediaProvider(client, mediaValues);
+ // Don't insert/update MediaStore db until the download is complete.
+ // Incomplete files can only be inserted to MediaStore by setting
+ // IS_PENDING=1 and using RELATIVE_PATH and DISPLAY_NAME in
+ // MediaProvider#insert operation. We use DATA column, IS_PENDING
+ // with DATA column will not be respected by MediaProvider.
+ mediaStoreUri = null;
}
if (!TextUtils.equals(info.mMediaStoreUri,
mediaStoreUri == null ? null : mediaStoreUri.toString())) {