From baccf15a4adafe3fb3fdf23c35ea29d95c45c89b Mon Sep 17 00:00:00 2001 From: Edward Cunningham Date: Fri, 5 Feb 2016 00:44:45 -0800 Subject: [PATCH] DO NOT MERGE Extend the DownloadManager.addCompletedDownload() method to support origin details. Bug: 20294239 Change-Id: Ic770a223c23013ebab08d22dd14e7192dc8e3109 (cherry picked from commit 735a31e093d9262139c1da6bf426bc8166d4b18e) --- api/current.txt | 1 + api/system-current.txt | 1 + api/test-current.txt | 1 + core/java/android/app/DownloadManager.java | 53 ++++++++++++++++++++++++++++-- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/api/current.txt b/api/current.txt index 7fdd5db96f76..ec3bb327f427 100644 --- a/api/current.txt +++ b/api/current.txt @@ -4275,6 +4275,7 @@ package android.app { public class DownloadManager { method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean); + method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean, android.net.Uri, android.net.Uri); method public long enqueue(android.app.DownloadManager.Request); method public static java.lang.Long getMaxBytesOverMobile(android.content.Context); method public java.lang.String getMimeTypeForDownloadedFile(long); diff --git a/api/system-current.txt b/api/system-current.txt index 266900f917e9..f51b46999c4b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4407,6 +4407,7 @@ package android.app { public class DownloadManager { method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean); + method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean, android.net.Uri, android.net.Uri); method public long enqueue(android.app.DownloadManager.Request); method public static java.lang.Long getMaxBytesOverMobile(android.content.Context); method public java.lang.String getMimeTypeForDownloadedFile(long); diff --git a/api/test-current.txt b/api/test-current.txt index e940378f12ca..579374abb47e 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -4275,6 +4275,7 @@ package android.app { public class DownloadManager { method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean); + method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean, android.net.Uri, android.net.Uri); method public long enqueue(android.app.DownloadManager.Request); method public static java.lang.Long getMaxBytesOverMobile(android.content.Context); method public java.lang.String getMimeTypeForDownloadedFile(long); diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index ed4bb28427ae..1e5f00727e12 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -1193,13 +1193,52 @@ public class DownloadManager { boolean isMediaScannerScannable, String mimeType, String path, long length, boolean showNotification) { return addCompletedDownload(title, description, isMediaScannerScannable, mimeType, path, - length, showNotification, false); + length, showNotification, false, null, null); + } + + /** + * Adds a file to the downloads database system, so it could appear in Downloads App + * (and thus become eligible for management by the Downloads App). + *

+ * It is helpful to make the file scannable by MediaScanner by setting the param + * isMediaScannerScannable to true. It makes the file visible in media managing + * applications such as Gallery App, which could be a useful purpose of using this API. + * + * @param title the title that would appear for this file in Downloads App. + * @param description the description that would appear for this file in Downloads App. + * @param isMediaScannerScannable true if the file is to be scanned by MediaScanner. Files + * scanned by MediaScanner appear in the applications used to view media (for example, + * Gallery app). + * @param mimeType mimetype of the file. + * @param path absolute pathname to the file. The file should be world-readable, so that it can + * be managed by the Downloads App and any other app that is used to read it (for example, + * Gallery app to display the file, if the file contents represent a video/image). + * @param length length of the downloaded file + * @param showNotification true if a notification is to be sent, false otherwise + * @param uri the original HTTP URI of the download + * @param referer the HTTP Referer for the download + * @return an ID for the download entry added to the downloads app, unique across the system + * This ID is used to make future calls related to this download. + */ + public long addCompletedDownload(String title, String description, + boolean isMediaScannerScannable, String mimeType, String path, long length, + boolean showNotification, Uri uri, Uri referer) { + return addCompletedDownload(title, description, isMediaScannerScannable, mimeType, path, + length, showNotification, false, uri, referer); } /** {@hide} */ public long addCompletedDownload(String title, String description, boolean isMediaScannerScannable, String mimeType, String path, long length, boolean showNotification, boolean allowWrite) { + return addCompletedDownload(title, description, isMediaScannerScannable, mimeType, path, + length, showNotification, allowWrite, null, null); + } + + /** {@hide} */ + public long addCompletedDownload(String title, String description, + boolean isMediaScannerScannable, String mimeType, String path, long length, + boolean showNotification, boolean allowWrite, Uri uri, Uri referer) { // make sure the input args are non-null/non-zero validateArgumentIsNonEmpty("title", title); validateArgumentIsNonEmpty("description", description); @@ -1210,10 +1249,18 @@ public class DownloadManager { } // if there is already an entry with the given path name in downloads.db, return its id - Request request = new Request(NON_DOWNLOADMANAGER_DOWNLOAD) - .setTitle(title) + Request request; + if (uri != null) { + request = new Request(uri); + } else { + request = new Request(NON_DOWNLOADMANAGER_DOWNLOAD); + } + request.setTitle(title) .setDescription(description) .setMimeType(mimeType); + if (referer != null) { + request.addRequestHeader("Referer", referer.toString()); + } ContentValues values = request.toContentValues(null); values.put(Downloads.Impl.COLUMN_DESTINATION, Downloads.Impl.DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD); -- 2.11.0