diff options
| author | 2010-09-09 11:26:08 -0700 | |
|---|---|---|
| committer | 2010-09-09 11:26:08 -0700 | |
| commit | 1ed20dc43b070903597c55738f342bc77f7ab21d (patch) | |
| tree | cfd1242b0dc45c7e719f8a0b92f9dc27f7beca9c | |
| parent | a9ff29b59cf33e552285a0bff3caf7a44f93f1c0 (diff) | |
| parent | e3692d153e0f66a5620eb96bd75ce92585b9fc04 (diff) | |
am e3692d15: Merge "Hidden API to control sorting of download manager queries." into gingerbread
Merge commit 'e3692d153e0f66a5620eb96bd75ce92585b9fc04' into gingerbread-plus-aosp
* commit 'e3692d153e0f66a5620eb96bd75ce92585b9fc04':
Hidden API to control sorting of download manager queries.
| -rw-r--r-- | api/current.xml | 2 | ||||
| -rw-r--r-- | core/java/android/net/DownloadManager.java | 55 |
2 files changed, 52 insertions, 5 deletions
diff --git a/api/current.xml b/api/current.xml index fb396a812d2d..d9da87954cbe 100644 --- a/api/current.xml +++ b/api/current.xml @@ -96282,7 +96282,7 @@ type="java.lang.String" transient="false" volatile="false" - value=""id"" + value=""_id"" static="true" final="true" deprecated="not deprecated" diff --git a/core/java/android/net/DownloadManager.java b/core/java/android/net/DownloadManager.java index cafe0f955245..e04367a9995b 100644 --- a/core/java/android/net/DownloadManager.java +++ b/core/java/android/net/DownloadManager.java @@ -21,6 +21,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.database.CursorWrapper; import android.os.ParcelFileDescriptor; +import android.provider.BaseColumns; import android.provider.Downloads; import java.io.File; @@ -48,7 +49,7 @@ public class DownloadManager { * An identifier for a particular download, unique across the system. Clients use this ID to * make subsequent calls related to the download. */ - public final static String COLUMN_ID = "id"; + public final static String COLUMN_ID = BaseColumns._ID; /** * The client-supplied title for this download. This will be displayed in system notifications. @@ -441,8 +442,22 @@ public class DownloadManager { * This class may be used to filter download manager queries. */ public static class Query { - private Long mId; + /** + * Constant for use with {@link #orderBy} + * @hide + */ + public static final int ORDER_ASCENDING = 1; + + /** + * Constant for use with {@link #orderBy} + * @hide + */ + public static final int ORDER_DESCENDING = 2; + + private Long mId = null; private Integer mStatusFlags = null; + private String mOrderByColumn = Downloads.COLUMN_LAST_MODIFICATION; + private int mOrderDirection = ORDER_DESCENDING; /** * Include only the download with the given ID. @@ -464,6 +479,32 @@ public class DownloadManager { } /** + * Change the sort order of the returned Cursor. + * + * @param column one of the COLUMN_* constants; currently, only + * {@link #COLUMN_LAST_MODIFIED_TIMESTAMP} and {@link #COLUMN_TOTAL_SIZE_BYTES} are + * supported. + * @param direction either {@link #ORDER_ASCENDING} or {@link #ORDER_DESCENDING} + * @return this object + * @hide + */ + public Query orderBy(String column, int direction) { + if (direction != ORDER_ASCENDING && direction != ORDER_DESCENDING) { + throw new IllegalArgumentException("Invalid direction: " + direction); + } + + if (column.equals(COLUMN_LAST_MODIFIED_TIMESTAMP)) { + mOrderByColumn = Downloads.COLUMN_LAST_MODIFICATION; + } else if (column.equals(COLUMN_TOTAL_SIZE_BYTES)) { + mOrderByColumn = Downloads.COLUMN_TOTAL_BYTES; + } else { + throw new IllegalArgumentException("Cannot order by " + column); + } + mOrderDirection = direction; + return this; + } + + /** * Run this query using the given ContentResolver. * @param projection the projection to pass to ContentResolver.query() * @return the Cursor returned by ContentResolver.query() @@ -497,7 +538,10 @@ public class DownloadManager { } selection = joinStrings(" OR ", parts); } - String orderBy = Downloads.COLUMN_LAST_MODIFICATION + " DESC"; + + String orderDirection = (mOrderDirection == ORDER_ASCENDING ? "ASC" : "DESC"); + String orderBy = mOrderByColumn + " " + orderDirection; + return resolver.query(uri, projection, selection, null, orderBy); } @@ -567,6 +611,9 @@ public class DownloadManager { */ public Cursor query(Query query) { Cursor underlyingCursor = query.runQuery(mResolver, UNDERLYING_COLUMNS); + if (underlyingCursor == null) { + return null; + } return new CursorTranslator(underlyingCursor); } @@ -608,7 +655,7 @@ public class DownloadManager { public int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException { int index = getColumnIndex(columnName); if (index == -1) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("No such column: " + columnName); } return index; } |