Loading core/java/android/net/DownloadManager.java +41 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -597,6 +598,7 @@ public class DownloadManager { private ContentResolver mResolver; private String mPackageName; private Uri mBaseUri = Downloads.Impl.CONTENT_URI; /** * @hide Loading @@ -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. Loading Loading @@ -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); } /** Loading Loading @@ -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); } /** Loading @@ -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 Loading Loading @@ -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 Loading core/java/android/provider/Downloads.java +10 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading
core/java/android/net/DownloadManager.java +41 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -597,6 +598,7 @@ public class DownloadManager { private ContentResolver mResolver; private String mPackageName; private Uri mBaseUri = Downloads.Impl.CONTENT_URI; /** * @hide Loading @@ -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. Loading Loading @@ -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); } /** Loading Loading @@ -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); } /** Loading @@ -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 Loading Loading @@ -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 Loading
core/java/android/provider/Downloads.java +10 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading