Use the private Download Manager APIs.
This boils down to using Downloads.Impl instead of Downloads
The APIs that were being used so far are going to disappear
to be replaced by a new set of APIs, but in order for the browser
to be able to continue using the old APIs a new copy of those APIs
was created "on the side" so that the browser doesn't need to
change much.
Bug: 2245521
Change-Id: I33c526331cce006710b1f934a4aeb64cdb95d62e
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 8795594..9b6fb71 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -2850,19 +2850,20 @@
String cookies = CookieManager.getInstance().getCookie(url);
ContentValues values = new ContentValues();
- values.put(Downloads.COLUMN_URI, uri.toString());
- values.put(Downloads.COLUMN_COOKIE_DATA, cookies);
- values.put(Downloads.COLUMN_USER_AGENT, userAgent);
- values.put(Downloads.COLUMN_NOTIFICATION_PACKAGE,
+ values.put(Downloads.Impl.COLUMN_URI, uri.toString());
+ values.put(Downloads.Impl.COLUMN_COOKIE_DATA, cookies);
+ values.put(Downloads.Impl.COLUMN_USER_AGENT, userAgent);
+ values.put(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE,
getPackageName());
- values.put(Downloads.COLUMN_NOTIFICATION_CLASS,
+ values.put(Downloads.Impl.COLUMN_NOTIFICATION_CLASS,
BrowserDownloadPage.class.getCanonicalName());
- values.put(Downloads.COLUMN_VISIBILITY, Downloads.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
- values.put(Downloads.COLUMN_MIME_TYPE, mimetype);
- values.put(Downloads.COLUMN_FILE_NAME_HINT, filename);
- values.put(Downloads.COLUMN_DESCRIPTION, uri.getHost());
+ values.put(Downloads.Impl.COLUMN_VISIBILITY,
+ Downloads.Impl.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
+ values.put(Downloads.Impl.COLUMN_MIME_TYPE, mimetype);
+ values.put(Downloads.Impl.COLUMN_FILE_NAME_HINT, filename);
+ values.put(Downloads.Impl.COLUMN_DESCRIPTION, uri.getHost());
if (contentLength > 0) {
- values.put(Downloads.COLUMN_TOTAL_BYTES, contentLength);
+ values.put(Downloads.Impl.COLUMN_TOTAL_BYTES, contentLength);
}
if (mimetype == null) {
// We must have long pressed on a link or image to download it. We
@@ -2870,7 +2871,7 @@
new FetchUrlMimeType(this).execute(values);
} else {
final Uri contentUri =
- getContentResolver().insert(Downloads.CONTENT_URI, values);
+ getContentResolver().insert(Downloads.Impl.CONTENT_URI, values);
viewDownloads(contentUri);
}
diff --git a/src/com/android/browser/BrowserDownloadAdapter.java b/src/com/android/browser/BrowserDownloadAdapter.java
index 85539c3..974e8fa 100644
--- a/src/com/android/browser/BrowserDownloadAdapter.java
+++ b/src/com/android/browser/BrowserDownloadAdapter.java
@@ -61,15 +61,15 @@
public BrowserDownloadAdapter(Context context, Cursor c, int index) {
super(context, c, index);
- mFilenameColumnId = c.getColumnIndexOrThrow(Downloads._DATA);
- mTitleColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_TITLE);
- mDescColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_DESCRIPTION);
- mStatusColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_STATUS);
- mTotalBytesColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_TOTAL_BYTES);
+ mFilenameColumnId = c.getColumnIndexOrThrow(Downloads.Impl._DATA);
+ mTitleColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_TITLE);
+ mDescColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_DESCRIPTION);
+ mStatusColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_STATUS);
+ mTotalBytesColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_TOTAL_BYTES);
mCurrentBytesColumnId =
- c.getColumnIndexOrThrow(Downloads.COLUMN_CURRENT_BYTES);
- mMimetypeColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_MIME_TYPE);
- mDateColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_LAST_MODIFICATION);
+ c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_CURRENT_BYTES);
+ mMimetypeColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_MIME_TYPE);
+ mDateColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_LAST_MODIFICATION);
}
@Override
@@ -122,10 +122,10 @@
// We have a filename, so we can build a title from that
title = new File(fullFilename).getName();
ContentValues values = new ContentValues();
- values.put(Downloads.COLUMN_TITLE, title);
+ values.put(Downloads.Impl.COLUMN_TITLE, title);
// assume "_id" is the first column for the cursor
context.getContentResolver().update(
- ContentUris.withAppendedId(Downloads.CONTENT_URI,
+ ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI,
getLong(0)), values, null, null);
}
}
@@ -137,7 +137,7 @@
long totalBytes = getLong(mTotalBytesColumnId);
int status = getInt(mStatusColumnId);
- if (Downloads.isStatusCompleted(status)) { // Download stopped
+ if (Downloads.Impl.isStatusCompleted(status)) { // Download stopped
View v = convertView.findViewById(R.id.progress_text);
v.setVisibility(View.GONE);
@@ -146,7 +146,7 @@
tv = (TextView) convertView.findViewById(R.id.complete_text);
tv.setVisibility(View.VISIBLE);
- if (Downloads.isStatusError(status)) {
+ if (Downloads.Impl.isStatusError(status)) {
tv.setText(getErrorText(status));
} else {
tv.setText(r.getString(R.string.download_success,
@@ -173,15 +173,15 @@
v = convertView.findViewById(R.id.complete_text);
v.setVisibility(View.GONE);
- if (status == Downloads.STATUS_PENDING) {
+ if (status == Downloads.Impl.STATUS_PENDING) {
tv.setText(r.getText(R.string.download_pending));
- } else if (status == Downloads.STATUS_PENDING_PAUSED) {
+ } else if (status == Downloads.Impl.STATUS_PENDING_PAUSED) {
tv.setText(r.getText(R.string.download_pending_network));
} else {
ProgressBar pb = (ProgressBar) progress;
StringBuilder sb = new StringBuilder();
- if (status == Downloads.STATUS_RUNNING) {
+ if (status == Downloads.Impl.STATUS_RUNNING) {
sb.append(r.getText(R.string.download_running));
} else {
sb.append(r.getText(R.string.download_running_paused));
@@ -214,23 +214,23 @@
*/
public static int getErrorText(int status) {
switch (status) {
- case Downloads.STATUS_NOT_ACCEPTABLE:
+ case Downloads.Impl.STATUS_NOT_ACCEPTABLE:
return R.string.download_not_acceptable;
- case Downloads.STATUS_LENGTH_REQUIRED:
+ case Downloads.Impl.STATUS_LENGTH_REQUIRED:
return R.string.download_length_required;
- case Downloads.STATUS_PRECONDITION_FAILED:
+ case Downloads.Impl.STATUS_PRECONDITION_FAILED:
return R.string.download_precondition_failed;
- case Downloads.STATUS_CANCELED:
+ case Downloads.Impl.STATUS_CANCELED:
return R.string.download_canceled;
- case Downloads.STATUS_FILE_ERROR:
+ case Downloads.Impl.STATUS_FILE_ERROR:
return R.string.download_file_error;
- case Downloads.STATUS_BAD_REQUEST:
- case Downloads.STATUS_UNKNOWN_ERROR:
+ case Downloads.Impl.STATUS_BAD_REQUEST:
+ case Downloads.Impl.STATUS_UNKNOWN_ERROR:
default:
return R.string.download_error;
}
diff --git a/src/com/android/browser/BrowserDownloadPage.java b/src/com/android/browser/BrowserDownloadPage.java
index 3a41afd..979e9f1 100644
--- a/src/com/android/browser/BrowserDownloadPage.java
+++ b/src/com/android/browser/BrowserDownloadPage.java
@@ -65,28 +65,28 @@
mListView = (ExpandableListView) findViewById(android.R.id.list);
mListView.setEmptyView(findViewById(R.id.empty));
- mDownloadCursor = managedQuery(Downloads.CONTENT_URI,
- new String [] {"_id", Downloads.COLUMN_TITLE, Downloads.COLUMN_STATUS,
- Downloads.COLUMN_TOTAL_BYTES, Downloads.COLUMN_CURRENT_BYTES,
- Downloads._DATA, Downloads.COLUMN_DESCRIPTION,
- Downloads.COLUMN_MIME_TYPE, Downloads.COLUMN_LAST_MODIFICATION,
- Downloads.COLUMN_VISIBILITY},
- null, Downloads.COLUMN_LAST_MODIFICATION + " DESC");
+ mDownloadCursor = managedQuery(Downloads.Impl.CONTENT_URI,
+ new String [] {"_id", Downloads.Impl.COLUMN_TITLE, Downloads.Impl.COLUMN_STATUS,
+ Downloads.Impl.COLUMN_TOTAL_BYTES, Downloads.Impl.COLUMN_CURRENT_BYTES,
+ Downloads.Impl._DATA, Downloads.Impl.COLUMN_DESCRIPTION,
+ Downloads.Impl.COLUMN_MIME_TYPE, Downloads.Impl.COLUMN_LAST_MODIFICATION,
+ Downloads.Impl.COLUMN_VISIBILITY},
+ null, Downloads.Impl.COLUMN_LAST_MODIFICATION + " DESC");
// only attach everything to the listbox if we can access
// the download database. Otherwise, just show it empty
if (mDownloadCursor != null) {
mStatusColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads.COLUMN_STATUS);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_STATUS);
mIdColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads._ID);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl._ID);
mTitleColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads.COLUMN_TITLE);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_TITLE);
// Create a list "controller" for the data
mDownloadAdapter = new BrowserDownloadAdapter(this,
mDownloadCursor, mDownloadCursor.getColumnIndexOrThrow(
- Downloads.COLUMN_LAST_MODIFICATION));
+ Downloads.Impl.COLUMN_LAST_MODIFICATION));
setListAdapter(mDownloadAdapter);
mListView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
@@ -155,7 +155,7 @@
case R.id.download_menu_clear:
case R.id.download_menu_cancel:
getContentResolver().delete(
- ContentUris.withAppendedId(Downloads.CONTENT_URI,
+ ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI,
mDownloadCursor.getLong(mIdColumnId)), null, null);
return true;
}
@@ -179,9 +179,9 @@
MenuInflater inflater = getMenuInflater();
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (Downloads.isStatusSuccess(status)) {
+ if (Downloads.Impl.isStatusSuccess(status)) {
inflater.inflate(R.menu.downloadhistorycontextfinished, menu);
- } else if (Downloads.isStatusError(status)) {
+ } else if (Downloads.Impl.isStatusError(status)) {
inflater.inflate(R.menu.downloadhistorycontextfailed, menu);
} else {
inflater.inflate(R.menu.downloadhistorycontextrunning, menu);
@@ -200,10 +200,10 @@
int groupToShow = mDownloadAdapter.groupFromChildId(id);
if (-1 == groupToShow) return 0;
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (!Downloads.isStatusError(status)) {
+ if (!Downloads.Impl.isStatusError(status)) {
return groupToShow;
}
- if (status == Downloads.STATUS_FILE_ERROR) {
+ if (status == Downloads.Impl.STATUS_FILE_ERROR) {
String title = mDownloadCursor.getString(mTitleColumnId);
if (title == null || title.length() == 0) {
title = getString(R.string.download_unknown_filename);
@@ -271,7 +271,7 @@
for (mDownloadCursor.moveToFirst(); !mDownloadCursor.isAfterLast();
mDownloadCursor.moveToNext()) {
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (!Downloads.isStatusCompleted(status)) {
+ if (!Downloads.Impl.isStatusCompleted(status)) {
count++;
}
}
@@ -324,14 +324,14 @@
boolean firstTime = true;
while (!mDownloadCursor.isAfterLast()) {
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (!Downloads.isStatusCompleted(status)) {
+ if (!Downloads.Impl.isStatusCompleted(status)) {
if (firstTime) {
firstTime = false;
} else {
where.append(" OR ");
}
where.append("( ");
- where.append(Downloads._ID);
+ where.append(Downloads.Impl._ID);
where.append(" = '");
where.append(mDownloadCursor.getLong(mIdColumnId));
where.append("' )");
@@ -339,7 +339,7 @@
mDownloadCursor.moveToNext();
}
if (!firstTime) {
- getContentResolver().delete(Downloads.CONTENT_URI,
+ getContentResolver().delete(Downloads.Impl.CONTENT_URI,
where.toString(), null);
}
}
@@ -350,7 +350,7 @@
if (mDownloadCursor.moveToFirst()) {
while (!mDownloadCursor.isAfterLast()) {
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (Downloads.isStatusCompleted(status)) {
+ if (Downloads.Impl.isStatusCompleted(status)) {
count++;
}
mDownloadCursor.moveToNext();
@@ -369,14 +369,14 @@
boolean firstTime = true;
while (!mDownloadCursor.isAfterLast()) {
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (Downloads.isStatusCompleted(status)) {
+ if (Downloads.Impl.isStatusCompleted(status)) {
if (firstTime) {
firstTime = false;
} else {
where.append(" OR ");
}
where.append("( ");
- where.append(Downloads._ID);
+ where.append(Downloads.Impl._ID);
where.append(" = '");
where.append(mDownloadCursor.getLong(mIdColumnId));
where.append("' )");
@@ -384,7 +384,7 @@
mDownloadCursor.moveToNext();
}
if (!firstTime) {
- getContentResolver().delete(Downloads.CONTENT_URI,
+ getContentResolver().delete(Downloads.Impl.CONTENT_URI,
where.toString(), null);
}
}
@@ -395,10 +395,10 @@
*/
private void openCurrentDownload() {
int filenameColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads._DATA);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl._DATA);
String filename = mDownloadCursor.getString(filenameColumnId);
int mimetypeColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads.COLUMN_MIME_TYPE);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_MIME_TYPE);
String mimetype = mDownloadCursor.getString(mimetypeColumnId);
Uri path = Uri.parse(filename);
// If there is no scheme, then it must be a file
@@ -430,7 +430,7 @@
hideCompletedDownload();
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (Downloads.isStatusSuccess(status)) {
+ if (Downloads.Impl.isStatusSuccess(status)) {
// Open it if it downloaded successfully
openCurrentDownload();
} else {
@@ -447,15 +447,16 @@
private void hideCompletedDownload() {
int status = mDownloadCursor.getInt(mStatusColumnId);
- int visibilityColumn = mDownloadCursor.getColumnIndexOrThrow(Downloads.COLUMN_VISIBILITY);
+ int visibilityColumn = mDownloadCursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_VISIBILITY);
int visibility = mDownloadCursor.getInt(visibilityColumn);
- if (Downloads.isStatusCompleted(status) &&
- visibility == Downloads.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) {
+ if (Downloads.Impl.isStatusCompleted(status) &&
+ visibility == Downloads.Impl.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) {
ContentValues values = new ContentValues();
- values.put(Downloads.COLUMN_VISIBILITY, Downloads.VISIBILITY_VISIBLE);
+ values.put(Downloads.Impl.COLUMN_VISIBILITY, Downloads.Impl.VISIBILITY_VISIBLE);
getContentResolver().update(
- ContentUris.withAppendedId(Downloads.CONTENT_URI,
+ ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI,
mDownloadCursor.getLong(mIdColumnId)), values, null, null);
}
}
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
index 60d6934..51f9873 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -58,7 +58,7 @@
mValues = values[0];
// Check to make sure we have a URI to download
- String uri = mValues.getAsString(Downloads.COLUMN_URI);
+ String uri = mValues.getAsString(Downloads.Impl.COLUMN_URI);
if (uri == null || uri.length() == 0) {
return null;
}
@@ -66,15 +66,15 @@
// User agent is likely to be null, though the AndroidHttpClient
// seems ok with that.
AndroidHttpClient client = AndroidHttpClient.newInstance(
- mValues.getAsString(Downloads.COLUMN_USER_AGENT));
+ mValues.getAsString(Downloads.Impl.COLUMN_USER_AGENT));
HttpHead request = new HttpHead(uri);
- String cookie = mValues.getAsString(Downloads.COLUMN_COOKIE_DATA);
+ String cookie = mValues.getAsString(Downloads.Impl.COLUMN_COOKIE_DATA);
if (cookie != null && cookie.length() > 0) {
request.addHeader("Cookie", cookie);
}
- String referer = mValues.getAsString(Downloads.COLUMN_REFERER);
+ String referer = mValues.getAsString(Downloads.Impl.COLUMN_REFERER);
if (referer != null && referer.length() > 0) {
request.addHeader("Referer", referer);
}
@@ -110,24 +110,24 @@
@Override
public void onPostExecute(String mimeType) {
if (mimeType != null) {
- String url = mValues.getAsString(Downloads.COLUMN_URI);
+ String url = mValues.getAsString(Downloads.Impl.COLUMN_URI);
if (mimeType.equalsIgnoreCase("text/plain") ||
mimeType.equalsIgnoreCase("application/octet-stream")) {
String newMimeType =
MimeTypeMap.getSingleton().getMimeTypeFromExtension(
MimeTypeMap.getFileExtensionFromUrl(url));
if (newMimeType != null) {
- mValues.put(Downloads.COLUMN_MIME_TYPE, newMimeType);
+ mValues.put(Downloads.Impl.COLUMN_MIME_TYPE, newMimeType);
}
}
String filename = URLUtil.guessFileName(url,
null, mimeType);
- mValues.put(Downloads.COLUMN_FILE_NAME_HINT, filename);
+ mValues.put(Downloads.Impl.COLUMN_FILE_NAME_HINT, filename);
}
// Start the download
final Uri contentUri =
- mActivity.getContentResolver().insert(Downloads.CONTENT_URI, mValues);
+ mActivity.getContentResolver().insert(Downloads.Impl.CONTENT_URI, mValues);
mActivity.viewDownloads(contentUri);
}