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())) {