Merge "Hidden API to control sorting of download manager queries." into gingerbread

This commit is contained in:
Steve Howard
2010-09-09 11:22:38 -07:00
committed by Android (Google) Code Review
2 changed files with 52 additions and 5 deletions

View File

@ -96234,7 +96234,7 @@
type="java.lang.String" type="java.lang.String"
transient="false" transient="false"
volatile="false" volatile="false"
value=""id"" value=""_id""
static="true" static="true"
final="true" final="true"
deprecated="not deprecated" deprecated="not deprecated"

View File

@ -21,6 +21,7 @@ import android.content.ContentValues;
import android.database.Cursor; import android.database.Cursor;
import android.database.CursorWrapper; import android.database.CursorWrapper;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.provider.BaseColumns;
import android.provider.Downloads; import android.provider.Downloads;
import java.io.File; 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 * An identifier for a particular download, unique across the system. Clients use this ID to
* make subsequent calls related to the download. * 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. * 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. * This class may be used to filter download manager queries.
*/ */
public static class Query { 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 Integer mStatusFlags = null;
private String mOrderByColumn = Downloads.COLUMN_LAST_MODIFICATION;
private int mOrderDirection = ORDER_DESCENDING;
/** /**
* Include only the download with the given ID. * Include only the download with the given ID.
@ -463,6 +478,32 @@ public class DownloadManager {
return this; return this;
} }
/**
* 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. * Run this query using the given ContentResolver.
* @param projection the projection to pass to ContentResolver.query() * @param projection the projection to pass to ContentResolver.query()
@ -497,7 +538,10 @@ public class DownloadManager {
} }
selection = joinStrings(" OR ", parts); 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); return resolver.query(uri, projection, selection, null, orderBy);
} }
@ -567,6 +611,9 @@ public class DownloadManager {
*/ */
public Cursor query(Query query) { public Cursor query(Query query) {
Cursor underlyingCursor = query.runQuery(mResolver, UNDERLYING_COLUMNS); Cursor underlyingCursor = query.runQuery(mResolver, UNDERLYING_COLUMNS);
if (underlyingCursor == null) {
return null;
}
return new CursorTranslator(underlyingCursor); return new CursorTranslator(underlyingCursor);
} }
@ -608,7 +655,7 @@ public class DownloadManager {
public int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException { public int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException {
int index = getColumnIndex(columnName); int index = getColumnIndex(columnName);
if (index == -1) { if (index == -1) {
throw new IllegalArgumentException(); throw new IllegalArgumentException("No such column: " + columnName);
} }
return index; return index;
} }