diff --git a/api/current.xml b/api/current.xml
index 233062cb0fee8..2dfae5ded2d42 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -97436,6 +97436,21 @@
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
-
+
-
-
mRequestHeaders = new HashMap();
- private String mTitle;
- private String mDescription;
+ private List> mRequestHeaders = new ArrayList>();
+ private CharSequence mTitle;
+ private CharSequence mDescription;
private boolean mShowNotification = true;
- private String mMediaType;
+ private String mMimeType;
private boolean mRoamingAllowed = true;
private int mAllowedNetworkTypes = ~0; // default to all network types allowed
private boolean mIsVisibleInDownloadsUi = true;
@@ -300,12 +300,12 @@ public class DownloadManager {
}
/**
- * Set the local destination for the downloaded data. Must be a file URI to a path on
+ * Set the local destination for the downloaded file. Must be a file URI to a path on
* external storage, and the calling application must have the WRITE_EXTERNAL_STORAGE
* permission.
*
- * By default, downloads are saved to a generated file in the download cache and may be
- * deleted by the download manager at any time.
+ * By default, downloads are saved to a generated filename in the shared download cache and
+ * may be deleted by the system at any time to reclaim space.
*
* @return this object
*/
@@ -315,13 +315,62 @@ public class DownloadManager {
}
/**
- * Set an HTTP header to be included with the download request.
+ * Set the local destination for the downloaded file to a path within the application's
+ * external files directory (as returned by {@link Context#getExternalFilesDir(String)}.
+ *
+ * @param context the {@link Context} to use in determining the external files directory
+ * @param dirType the directory type to pass to {@link Context#getExternalFilesDir(String)}
+ * @param subPath the path within the external directory, including the destination filename
+ * @return this object
+ */
+ public Request setDestinationInExternalFilesDir(Context context, String dirType,
+ String subPath) {
+ setDestinationFromBase(context.getExternalFilesDir(dirType), subPath);
+ return this;
+ }
+
+ /**
+ * Set the local destination for the downloaded file to a path within the public external
+ * storage directory (as returned by
+ * {@link Environment#getExternalStoragePublicDirectory(String)}.
+ *
+ * @param dirType the directory type to pass to
+ * {@link Environment#getExternalStoragePublicDirectory(String)}
+ * @param subPath the path within the external directory, including the destination filename
+ * @return this object
+ */
+ public Request setDestinationInExternalPublicDir(String dirType, String subPath) {
+ setDestinationFromBase(Environment.getExternalStoragePublicDirectory(dirType), subPath);
+ return this;
+ }
+
+ private void setDestinationFromBase(File base, String subPath) {
+ if (subPath == null) {
+ throw new NullPointerException("subPath cannot be null");
+ }
+ mDestinationUri = Uri.withAppendedPath(Uri.fromFile(base), subPath);
+ }
+
+ /**
+ * Add an HTTP header to be included with the download request. The header will be added to
+ * the end of the list.
* @param header HTTP header name
* @param value header value
* @return this object
+ * @see HTTP/1.1
+ * Message Headers
*/
- public Request setRequestHeader(String header, String value) {
- mRequestHeaders.put(header, value);
+ public Request addRequestHeader(String header, String value) {
+ if (header == null) {
+ throw new NullPointerException("header cannot be null");
+ }
+ if (header.contains(":")) {
+ throw new IllegalArgumentException("header may not contain ':'");
+ }
+ if (value == null) {
+ value = "";
+ }
+ mRequestHeaders.add(Pair.create(header, value));
return this;
}
@@ -329,7 +378,7 @@ public class DownloadManager {
* Set the title of this download, to be displayed in notifications (if enabled)
* @return this object
*/
- public Request setTitle(String title) {
+ public Request setTitle(CharSequence title) {
mTitle = title;
return this;
}
@@ -338,19 +387,20 @@ public class DownloadManager {
* Set a description of this download, to be displayed in notifications (if enabled)
* @return this object
*/
- public Request setDescription(String description) {
+ public Request setDescription(CharSequence description) {
mDescription = description;
return this;
}
/**
- * Set the Internet Media Type of this download. This will override the media type declared
+ * Set the MIME content type of this download. This will override the content type declared
* in the server's response.
- * @see RFC 1590, defining Media Types
+ * @see HTTP/1.1
+ * Media Types
* @return this object
*/
- public Request setMediaType(String mediaType) {
- mMediaType = mediaType;
+ public Request setMimeType(String mimeType) {
+ mMimeType = mimeType;
return this;
}
@@ -428,7 +478,7 @@ public class DownloadManager {
putIfNonNull(values, Downloads.COLUMN_TITLE, mTitle);
putIfNonNull(values, Downloads.COLUMN_DESCRIPTION, mDescription);
- putIfNonNull(values, Downloads.COLUMN_MIME_TYPE, mMediaType);
+ putIfNonNull(values, Downloads.COLUMN_MIME_TYPE, mMimeType);
values.put(Downloads.COLUMN_VISIBILITY,
mShowNotification ? Downloads.VISIBILITY_VISIBLE
@@ -443,16 +493,16 @@ public class DownloadManager {
private void encodeHttpHeaders(ContentValues values) {
int index = 0;
- for (Map.Entry entry : mRequestHeaders.entrySet()) {
- String headerString = entry.getKey() + ": " + entry.getValue();
+ for (Pair header : mRequestHeaders) {
+ String headerString = header.first + ": " + header.second;
values.put(Downloads.Impl.RequestHeaders.INSERT_KEY_PREFIX + index, headerString);
index++;
}
}
- private void putIfNonNull(ContentValues contentValues, String key, String value) {
+ private void putIfNonNull(ContentValues contentValues, String key, Object value) {
if (value != null) {
- contentValues.put(key, value);
+ contentValues.put(key, value.toString());
}
}
}
diff --git a/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/DownloadManagerTestApp.java b/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/DownloadManagerTestApp.java
index 0293ded853c18..f21e7ac26c058 100644
--- a/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/DownloadManagerTestApp.java
+++ b/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/DownloadManagerTestApp.java
@@ -241,7 +241,7 @@ public class DownloadManagerTestApp extends DownloadManagerBaseTest {
Uri remoteUri = getExternalFileUri(filename);
Request request = new Request(remoteUri);
- request.setMediaType(getMimeMapping(DownloadFileType.APK));
+ request.setMimeType(getMimeMapping(DownloadFileType.APK));
dlRequest = mDownloadManager.enqueue(request);