diff options
author | Steve Howard <showard@google.com> | 2010-09-09 11:26:08 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-09-09 11:26:08 -0700 |
commit | 1ed20dc43b070903597c55738f342bc77f7ab21d (patch) | |
tree | cfd1242b0dc45c7e719f8a0b92f9dc27f7beca9c /core/java/android | |
parent | a9ff29b59cf33e552285a0bff3caf7a44f93f1c0 (diff) | |
parent | e3692d153e0f66a5620eb96bd75ce92585b9fc04 (diff) | |
download | frameworks_base-1ed20dc43b070903597c55738f342bc77f7ab21d.zip frameworks_base-1ed20dc43b070903597c55738f342bc77f7ab21d.tar.gz frameworks_base-1ed20dc43b070903597c55738f342bc77f7ab21d.tar.bz2 |
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.
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/net/DownloadManager.java | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/core/java/android/net/DownloadManager.java b/core/java/android/net/DownloadManager.java index cafe0f9..e04367a 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; } |