diff options
author | Steve Howard <showard@google.com> | 2010-09-16 13:42:34 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-09-16 13:42:34 -0700 |
commit | 478747181e0414d703076d4786b201718cd93d5b (patch) | |
tree | 9caaec586556411ecc2fcae5be4e540421324122 /core | |
parent | 24326f7223275ba9c85014b86d42040e3a7d2815 (diff) | |
parent | eca77fcdc64dcbd2915e7f5e1e26dbe4a7105314 (diff) | |
download | frameworks_base-478747181e0414d703076d4786b201718cd93d5b.zip frameworks_base-478747181e0414d703076d4786b201718cd93d5b.tar.gz frameworks_base-478747181e0414d703076d4786b201718cd93d5b.tar.bz2 |
Merge "Support new URI structure for download provider." into gingerbread
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/net/DownloadManager.java | 52 | ||||
-rw-r--r-- | core/java/android/provider/Downloads.java | 13 |
2 files changed, 51 insertions, 14 deletions
diff --git a/core/java/android/net/DownloadManager.java b/core/java/android/net/DownloadManager.java index e8237c9..5320da3 100644 --- a/core/java/android/net/DownloadManager.java +++ b/core/java/android/net/DownloadManager.java @@ -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 @@ -607,6 +609,19 @@ public class DownloadManager { } /** + * 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,11 +816,24 @@ 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; } - return Uri.fromFile(new File(localUri)).toString(); + + 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) { diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index 603e598..74c7372 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -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 |