summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/downloads/DownloadInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/providers/downloads/DownloadInfo.java')
-rw-r--r--src/com/android/providers/downloads/DownloadInfo.java109
1 files changed, 77 insertions, 32 deletions
diff --git a/src/com/android/providers/downloads/DownloadInfo.java b/src/com/android/providers/downloads/DownloadInfo.java
index 81895439..1ae10ce1 100644
--- a/src/com/android/providers/downloads/DownloadInfo.java
+++ b/src/com/android/providers/downloads/DownloadInfo.java
@@ -16,11 +16,17 @@
package com.android.providers.downloads;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
+import android.database.Cursor;
import android.net.Uri;
import android.provider.Downloads;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* Stores information about an individual download.
*/
@@ -53,39 +59,78 @@ public class DownloadInfo {
public int mFuzz;
public volatile boolean mHasActiveThread;
+ private Map<String, String> mRequestHeaders = new HashMap<String, String>();
+
+ public DownloadInfo(ContentResolver resolver, Cursor cursor) {
+ int retryRedirect =
+ cursor.getInt(cursor.getColumnIndexOrThrow(Constants.RETRY_AFTER_X_REDIRECT_COUNT));
+ mId = cursor.getInt(cursor.getColumnIndexOrThrow(Downloads.Impl._ID));
+ mUri = cursor.getString(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_URI));
+ mNoIntegrity = cursor.getInt(cursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_NO_INTEGRITY)) == 1;
+ mHint = cursor.getString(cursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_FILE_NAME_HINT));
+ mFileName = cursor.getString(cursor.getColumnIndexOrThrow(Downloads.Impl._DATA));
+ mMimeType = cursor.getString(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_MIME_TYPE));
+ mDestination =
+ cursor.getInt(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_DESTINATION));
+ mVisibility = cursor.getInt(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_VISIBILITY));
+ mControl = cursor.getInt(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_CONTROL));
+ mStatus = cursor.getInt(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_STATUS));
+ mNumFailed = cursor.getInt(cursor.getColumnIndexOrThrow(Constants.FAILED_CONNECTIONS));
+ mRetryAfter = retryRedirect & 0xfffffff;
+ mRedirectCount = retryRedirect >> 28;
+ mLastMod = cursor.getLong(cursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_LAST_MODIFICATION));
+ mPackage = cursor.getString(cursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE));
+ mClass = cursor.getString(cursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_NOTIFICATION_CLASS));
+ mExtras = cursor.getString(cursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_NOTIFICATION_EXTRAS));
+ mCookies =
+ cursor.getString(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_COOKIE_DATA));
+ mUserAgent =
+ cursor.getString(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_USER_AGENT));
+ mReferer = cursor.getString(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_REFERER));
+ mTotalBytes =
+ cursor.getInt(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_TOTAL_BYTES));
+ mCurrentBytes =
+ cursor.getInt(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_CURRENT_BYTES));
+ mETag = cursor.getString(cursor.getColumnIndexOrThrow(Constants.ETAG));
+ mMediaScanned = cursor.getInt(cursor.getColumnIndexOrThrow(Constants.MEDIA_SCANNED)) == 1;
+ mFuzz = Helpers.sRandom.nextInt(1001);
+
+ readRequestHeaders(resolver, mId);
+ }
+
+ private void readRequestHeaders(ContentResolver resolver, long downloadId) {
+ Uri headerUri = Downloads.Impl.CONTENT_URI.buildUpon()
+ .appendPath(Long.toString(downloadId))
+ .appendPath(Downloads.Impl.RequestHeaders.URI_SEGMENT).build();
+ Cursor cursor = resolver.query(headerUri, null, null, null, null);
+ try {
+ int headerIndex =
+ cursor.getColumnIndexOrThrow(Downloads.Impl.RequestHeaders.COLUMN_HEADER);
+ int valueIndex =
+ cursor.getColumnIndexOrThrow(Downloads.Impl.RequestHeaders.COLUMN_VALUE);
+ for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
+ mRequestHeaders.put(cursor.getString(headerIndex), cursor.getString(valueIndex));
+ }
+ } finally {
+ cursor.close();
+ }
+
+ if (mCookies != null) {
+ mRequestHeaders.put("Cookie", mCookies);
+ }
+ if (mReferer != null) {
+ mRequestHeaders.put("Referer", mReferer);
+ }
+ }
- public DownloadInfo(int id, String uri, boolean noIntegrity,
- String hint, String fileName,
- String mimeType, int destination, int visibility, int control,
- int status, int numFailed, int retryAfter, int redirectCount, long lastMod,
- String pckg, String clazz, String extras, String cookies,
- String userAgent, String referer, int totalBytes, int currentBytes, String eTag,
- boolean mediaScanned) {
- mId = id;
- mUri = uri;
- mNoIntegrity = noIntegrity;
- mHint = hint;
- mFileName = fileName;
- mMimeType = mimeType;
- mDestination = destination;
- mVisibility = visibility;
- mControl = control;
- mStatus = status;
- mNumFailed = numFailed;
- mRetryAfter = retryAfter;
- mRedirectCount = redirectCount;
- mLastMod = lastMod;
- mPackage = pckg;
- mClass = clazz;
- mExtras = extras;
- mCookies = cookies;
- mUserAgent = userAgent;
- mReferer = referer;
- mTotalBytes = totalBytes;
- mCurrentBytes = currentBytes;
- mETag = eTag;
- mMediaScanned = mediaScanned;
- mFuzz = Helpers.sRandom.nextInt(1001);
+ public Map<String, String> getHeaders() {
+ return Collections.unmodifiableMap(mRequestHeaders);
}
public void sendIntentIfRequested(Uri contentUri, Context context) {