summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Howard <showard@google.com>2010-09-22 15:57:30 -0700
committerSteve Howard <showard@google.com>2010-09-22 18:31:44 -0700
commitebb555c0687061993dd6a22d15f6aab2437ee8c5 (patch)
tree6968836e8e8a549c51af802aeb31b551372a38f2
parentece96c7475696d8b447bb8523f4ad83c897002ea (diff)
downloadandroid_packages_providers_DownloadProvider-ebb555c0687061993dd6a22d15f6aab2437ee8c5.tar.gz
android_packages_providers_DownloadProvider-ebb555c0687061993dd6a22d15f6aab2437ee8c5.tar.bz2
android_packages_providers_DownloadProvider-ebb555c0687061993dd6a22d15f6aab2437ee8c5.zip
Support multi-valued HTTP headers, handle new API changes
* backend support for multiple values for the same HTTP headers, for corresponding API changes * other minor changes in response to DownloadManager API changes Change-Id: I7c595e94a60ed7afaca6cc3fb4c05aaeeff20c2a
-rw-r--r--src/com/android/providers/downloads/DownloadInfo.java26
-rw-r--r--src/com/android/providers/downloads/DownloadThread.java6
-rw-r--r--tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java4
-rw-r--r--tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java6
4 files changed, 22 insertions, 20 deletions
diff --git a/src/com/android/providers/downloads/DownloadInfo.java b/src/com/android/providers/downloads/DownloadInfo.java
index 467af836..2196cfc6 100644
--- a/src/com/android/providers/downloads/DownloadInfo.java
+++ b/src/com/android/providers/downloads/DownloadInfo.java
@@ -30,10 +30,12 @@ import android.net.Uri;
import android.provider.Downloads;
import android.provider.Downloads.Impl;
import android.util.Log;
+import android.util.Pair;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.List;
/**
* Stores information about an individual download.
@@ -106,21 +108,24 @@ public class DownloadInfo {
int valueIndex =
cursor.getColumnIndexOrThrow(Downloads.Impl.RequestHeaders.COLUMN_VALUE);
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
- info.mRequestHeaders.put(
- cursor.getString(headerIndex), cursor.getString(valueIndex));
+ addHeader(info, cursor.getString(headerIndex), cursor.getString(valueIndex));
}
} finally {
cursor.close();
}
if (info.mCookies != null) {
- info.mRequestHeaders.put("Cookie", info.mCookies);
+ addHeader(info, "Cookie", info.mCookies);
}
if (info.mReferer != null) {
- info.mRequestHeaders.put("Referer", info.mReferer);
+ addHeader(info, "Referer", info.mReferer);
}
}
+ private void addHeader(DownloadInfo info, String header, String value) {
+ info.mRequestHeaders.add(Pair.create(header, value));
+ }
+
/**
* Returns a String that holds the current value of the column, optimizing for the case
* where the value hasn't changed.
@@ -228,7 +233,7 @@ public class DownloadInfo {
public volatile boolean mHasActiveThread;
- private Map<String, String> mRequestHeaders = new HashMap<String, String>();
+ private List<Pair<String, String>> mRequestHeaders = new ArrayList<Pair<String, String>>();
private SystemFacade mSystemFacade;
private Context mContext;
@@ -238,8 +243,8 @@ public class DownloadInfo {
mFuzz = Helpers.sRandom.nextInt(1001);
}
- public Map<String, String> getHeaders() {
- return Collections.unmodifiableMap(mRequestHeaders);
+ public Collection<Pair<String, String>> getHeaders() {
+ return Collections.unmodifiableList(mRequestHeaders);
}
public void sendIntentIfRequested() {
@@ -415,9 +420,6 @@ public class DownloadInfo {
case ConnectivityManager.TYPE_WIFI:
return DownloadManager.Request.NETWORK_WIFI;
- case ConnectivityManager.TYPE_WIMAX:
- return DownloadManager.Request.NETWORK_WIMAX;
-
default:
return 0;
}
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index 79778b0c..12ddfa60 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -28,6 +28,7 @@ import android.provider.Downloads;
import android.provider.DrmStore;
import android.util.Config;
import android.util.Log;
+import android.util.Pair;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
@@ -42,7 +43,6 @@ import java.io.SyncFailedException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Locale;
-import java.util.Map;
/**
* Runs an actual download
@@ -857,8 +857,8 @@ public class DownloadThread extends Thread {
* Add custom headers for this download to the HTTP request.
*/
private void addRequestHeaders(InnerState innerState, HttpGet request) {
- for (Map.Entry<String, String> header : mInfo.getHeaders().entrySet()) {
- request.addHeader(header.getKey(), header.getValue());
+ for (Pair<String, String> header : mInfo.getHeaders()) {
+ request.addHeader(header.first, header.second);
}
if (innerState.mContinuingDownload) {
diff --git a/tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java b/tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java
index 3929c59e..13bec33b 100644
--- a/tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java
+++ b/tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java
@@ -149,8 +149,8 @@ public class PublicApiAccessTest extends AndroidTestCase {
request.setAllowedOverRoaming(false);
request.setTitle("test");
request.setDescription("test");
- request.setMediaType("text/html");
- request.setRequestHeader("X-Some-Header", "value");
+ request.setMimeType("text/html");
+ request.addRequestHeader("X-Some-Header", "value");
mManager.enqueue(request);
}
}
diff --git a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
index 6c81bc65..91cc3f3b 100644
--- a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
@@ -306,8 +306,8 @@ public class PublicApiFunctionalTest extends AbstractPublicApiTest {
public void testRequestHeaders() throws Exception {
enqueueEmptyResponse(HTTP_OK);
- Download download = enqueueRequest(getRequest().setRequestHeader("Header1", "value1")
- .setRequestHeader("Header2", "value2"));
+ Download download = enqueueRequest(getRequest().addRequestHeader("Header1", "value1")
+ .addRequestHeader("Header2", "value2"));
download.runUntilStatus(DownloadManager.STATUS_SUCCESSFUL);
List<String> headers = takeRequest().getHeaders();
@@ -316,7 +316,7 @@ public class PublicApiFunctionalTest extends AbstractPublicApiTest {
}
public void testDelete() throws Exception {
- Download download = enqueueRequest(getRequest().setRequestHeader("header", "value"));
+ Download download = enqueueRequest(getRequest().addRequestHeader("header", "value"));
mManager.remove(download.mId);
Cursor cursor = mManager.query(new DownloadManager.Query());
try {