Use the new public API for DownloadManager.

Bug:3116742
Change-Id: I5d0d9a12e1bd601cf6a95198578ce8f9acd81372
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 319ffad..2fe9e1b 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -3212,33 +3212,28 @@
             return;
         }
 
-        // XXX: Have to use the old url since the cookies were stored using the
-        // old percent-encoded url.
-        String cookies = CookieManager.getInstance().getCookie(url);
-
-        ContentValues values = new ContentValues();
-        values.put(Downloads.Impl.COLUMN_URI, webAddress.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.Impl.COLUMN_NOTIFICATION_CLASS,
-                OpenDownloadReceiver.class.getCanonicalName());
-        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, webAddress.getHost());
-        if (contentLength > 0) {
-            values.put(Downloads.Impl.COLUMN_TOTAL_BYTES, contentLength);
-        }
+        String addressString = webAddress.toString(); 
+        Uri uri = Uri.parse(addressString);
+        DownloadManager.Request request = new DownloadManager.Request(uri);
+        request.setMimeType(mimetype);
+        request.setDestinationInExternalFilesDir(this, null, filename);
+        request.setDescription(webAddress.getHost());
         if (mimetype == null) {
+            ContentValues values = new ContentValues();
+            values.put(FetchUrlMimeType.URI, addressString);
+            // XXX: Have to use the old url since the cookies were stored using the
+            // old percent-encoded url.
+            String cookies = CookieManager.getInstance().getCookie(url);
+            values.put(FetchUrlMimeType.COOKIE_DATA, cookies);
+            values.put(FetchUrlMimeType.USER_AGENT, userAgent);
+
             // We must have long pressed on a link or image to download it. We
             // are not sure of the mimetype in this case, so do a head request
-            new FetchUrlMimeType(this).execute(values);
+            new FetchUrlMimeType(this, request).execute(values);
         } else {
-            final Uri contentUri =
-                    getContentResolver().insert(Downloads.Impl.CONTENT_URI, values);
+            DownloadManager manager
+                    = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
+            manager.enqueue(request);
         }
         Toast.makeText(this, R.string.download_pending, Toast.LENGTH_SHORT)
                 .show();
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
index 9bd0cf9..4e2733f 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -16,7 +16,9 @@
 
 package com.android.browser;
 
+import android.app.DownloadManager;
 import android.content.ContentValues;
+import android.content.Context;
 import android.net.Proxy;
 import android.net.Uri;
 import android.net.http.AndroidHttpClient;
@@ -30,7 +32,6 @@
 import java.io.IOException;
 
 import android.os.AsyncTask;
-import android.provider.Downloads;
 import android.webkit.MimeTypeMap;
 import android.webkit.URLUtil;
 
@@ -49,11 +50,17 @@
  */
 class FetchUrlMimeType extends AsyncTask<ContentValues, String, String> {
 
+    public static final String URI = "uri";
+    public static final String USER_AGENT = "user_agent";
+    public static final String COOKIE_DATA = "cookie_data";
     BrowserActivity mActivity;
     ContentValues mValues;
+    DownloadManager.Request mRequest;
 
-    public FetchUrlMimeType(BrowserActivity activity) {
+    public FetchUrlMimeType(BrowserActivity activity,
+            DownloadManager.Request request) {
         mActivity = activity;
+        mRequest = request;
     }
 
     @Override
@@ -61,7 +68,7 @@
         mValues = values[0];
 
         // Check to make sure we have a URI to download
-        String uri = mValues.getAsString(Downloads.Impl.COLUMN_URI);
+        String uri = mValues.getAsString(URI);
         if (uri == null || uri.length() == 0) {
             return null;
         }
@@ -69,23 +76,18 @@
         // User agent is likely to be null, though the AndroidHttpClient
         // seems ok with that.
         AndroidHttpClient client = AndroidHttpClient.newInstance(
-                mValues.getAsString(Downloads.Impl.COLUMN_USER_AGENT));
+                mValues.getAsString(USER_AGENT));
         HttpHost httpHost = Proxy.getPreferredHttpHost(mActivity, uri);
         if (httpHost != null) {
             ConnRouteParams.setDefaultProxy(client.getParams(), httpHost);
         }
         HttpHead request = new HttpHead(uri);
 
-        String cookie = mValues.getAsString(Downloads.Impl.COLUMN_COOKIE_DATA);
+        String cookie = mValues.getAsString(COOKIE_DATA);
         if (cookie != null && cookie.length() > 0) {
             request.addHeader("Cookie", cookie);
         }
 
-        String referer = mValues.getAsString(Downloads.Impl.COLUMN_REFERER);
-        if (referer != null && referer.length() > 0) {
-            request.addHeader("Referer", referer);
-        }
-
         HttpResponse response;
         String mimeType = null;
         try {
@@ -117,24 +119,25 @@
    @Override
     public void onPostExecute(String mimeType) {
        if (mimeType != null) {
-           String url = mValues.getAsString(Downloads.Impl.COLUMN_URI);
+           String url = mValues.getAsString(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.Impl.COLUMN_MIME_TYPE, newMimeType);
+                   mRequest.setMimeType(newMimeType);
                }
            }
            String filename = URLUtil.guessFileName(url,
                    null, mimeType);
-           mValues.put(Downloads.Impl.COLUMN_FILE_NAME_HINT, filename);
+           mRequest.setDestinationInExternalFilesDir(mActivity, null, filename);
        }
 
        // Start the download
-       final Uri contentUri =
-           mActivity.getContentResolver().insert(Downloads.Impl.CONTENT_URI, mValues);
+       DownloadManager manager = (DownloadManager) mActivity.getSystemService(
+               Context.DOWNLOAD_SERVICE);
+       manager.enqueue(mRequest);
     }
 
 }