Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47874718 authored by Steve Howard's avatar Steve Howard Committed by Android (Google) Code Review
Browse files

Merge "Support new URI structure for download provider." into gingerbread

parents 24326f72 eca77fcd
Loading
Loading
Loading
Loading
+41 −11
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.net;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.CursorWrapper;
@@ -536,12 +537,12 @@ public class DownloadManager {
         * @param projection the projection to pass to ContentResolver.query()
         * @return the Cursor returned by ContentResolver.query()
         */
        Cursor runQuery(ContentResolver resolver, String[] projection) {
            Uri uri = Downloads.CONTENT_URI;
        Cursor runQuery(ContentResolver resolver, String[] projection, Uri baseUri) {
            Uri uri = baseUri;
            List<String> selectionParts = new ArrayList<String>();

            if (mId != null) {
                uri = Uri.withAppendedPath(uri, mId.toString());
                uri = ContentUris.withAppendedId(uri, mId);
            }

            if (mStatusFlags != null) {
@@ -597,6 +598,7 @@ public class DownloadManager {

    private ContentResolver mResolver;
    private String mPackageName;
    private Uri mBaseUri = Downloads.Impl.CONTENT_URI;

    /**
     * @hide
@@ -606,6 +608,19 @@ public class DownloadManager {
        mPackageName = packageName;
    }

    /**
     * Makes this object access the download provider through /all_downloads URIs rather than
     * /my_downloads URIs, for clients that have permission to do so.
     * @hide
     */
    public void setAccessAllDownloads(boolean accessAllDownloads) {
        if (accessAllDownloads) {
            mBaseUri = Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI;
        } else {
            mBaseUri = Downloads.Impl.CONTENT_URI;
        }
    }

    /**
     * Enqueue a new download.  The download will start automatically once the download manager is
     * ready to execute it and connectivity is available.
@@ -642,11 +657,11 @@ public class DownloadManager {
     * COLUMN_* constants.
     */
    public Cursor query(Query query) {
        Cursor underlyingCursor = query.runQuery(mResolver, UNDERLYING_COLUMNS);
        Cursor underlyingCursor = query.runQuery(mResolver, UNDERLYING_COLUMNS, mBaseUri);
        if (underlyingCursor == null) {
            return null;
        }
        return new CursorTranslator(underlyingCursor);
        return new CursorTranslator(underlyingCursor, mBaseUri);
    }

    /**
@@ -690,9 +705,8 @@ public class DownloadManager {
    /**
     * Get the DownloadProvider URI for the download with the given ID.
     */
    private Uri getDownloadUri(long id) {
        Uri downloadUri = Uri.withAppendedPath(Downloads.CONTENT_URI, Long.toString(id));
        return downloadUri;
    Uri getDownloadUri(long id) {
        return ContentUris.withAppendedId(mBaseUri, id);
    }

    /**
@@ -702,8 +716,11 @@ public class DownloadManager {
     * underlying data.
     */
    private static class CursorTranslator extends CursorWrapper {
        public CursorTranslator(Cursor cursor) {
        private Uri mBaseUri;

        public CursorTranslator(Cursor cursor, Uri baseUri) {
            super(cursor);
            mBaseUri = baseUri;
        }

        @Override
@@ -799,13 +816,26 @@ public class DownloadManager {
            }

            assert column.equals(COLUMN_LOCAL_URI);
            String localUri = getUnderlyingString(Downloads._DATA);
            return getLocalUri();
        }

        private String getLocalUri() {
            String localUri = getUnderlyingString(Downloads.Impl._DATA);
            if (localUri == null) {
                return null;
            }

            long destinationType = getUnderlyingLong(Downloads.Impl.COLUMN_DESTINATION);
            if (destinationType == Downloads.Impl.DESTINATION_FILE_URI) {
                // return file URI for external download
                return Uri.fromFile(new File(localUri)).toString();
            }

            // return content URI for cache download
            long downloadId = getUnderlyingLong(Downloads.Impl._ID);
            return ContentUris.withAppendedId(mBaseUri, downloadId).toString();
        }

        private long translateLong(String column) {
            if (!isLongColumn(column)) {
                // mimic behavior of underlying cursor -- most likely, throw NumberFormatException
+10 −3
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ public final class Downloads {
     * @hide
     */
    public static final Uri CONTENT_URI =
        Uri.parse("content://downloads/download");
        Uri.parse("content://downloads/my_downloads");

    /**
     * Broadcast Action: this is sent by the download manager to the app
@@ -637,10 +637,17 @@ public final class Downloads {
                "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION";

        /**
         * The content:// URI for the data table in the provider
         * The content:// URI to access downloads owned by the caller's UID.
         */
        public static final Uri CONTENT_URI =
            Uri.parse("content://downloads/download");
                Uri.parse("content://downloads/my_downloads");

        /**
         * The content URI for accessing all downloads across all UIDs (requires the
         * ACCESS_ALL_DOWNLOADS permission).
         */
        public static final Uri ALL_DOWNLOADS_CONTENT_URI =
                Uri.parse("content://downloads/all_downloads");

        /**
         * Broadcast Action: this is sent by the download manager to the app