summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit1ed20dc43b070903597c55738f342bc77f7ab21d (patch)
treecfd1242b0dc45c7e719f8a0b92f9dc27f7beca9c
parenta9ff29b59cf33e552285a0bff3caf7a44f93f1c0 (diff)
parente3692d153e0f66a5620eb96bd75ce92585b9fc04 (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.xml2
-rw-r--r--core/java/android/net/DownloadManager.java55
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="&quot;id&quot;"
+ value="&quot;_id&quot;"
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;
}