summaryrefslogtreecommitdiff
path: root/core/java/android/app/DownloadManager.java
diff options
context:
space:
mode:
authorBen Lin <linben@google.com>2016-05-02 16:45:45 -0700
committerBen Lin <linben@google.com>2016-05-10 21:45:25 +0000
commitce763d8bac85d404a36e82eb195c33e00a0ceb10 (patch)
treece2a895521245a61667f0b49f7ac931f60de1806 /core/java/android/app/DownloadManager.java
parentd9586dcb5159086cf87d37f9be6e25896a820edb (diff)
Add support for search in DownloadManager.
Bug: 26524617 Change-Id: I41c0f92381bec8ad06db73b25ec67466f368b55c
Diffstat (limited to 'core/java/android/app/DownloadManager.java')
-rw-r--r--core/java/android/app/DownloadManager.java43
1 files changed, 38 insertions, 5 deletions
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java
index eb07fbc5271a..03fcf47e9a31 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -832,6 +832,7 @@ public class DownloadManager {
private long[] mIds = null;
private Integer mStatusFlags = null;
+ private String mFilterString = null;
private String mOrderByColumn = Downloads.Impl.COLUMN_LAST_MODIFICATION;
private int mOrderDirection = ORDER_DESCENDING;
private boolean mOnlyIncludeVisibleInDownloadsUi = false;
@@ -846,6 +847,17 @@ public class DownloadManager {
}
/**
+ *
+ * Include only the downloads that contains the given string in its name.
+ * @return this object
+ * @hide
+ */
+ public Query setFilterByString(@Nullable String filter) {
+ mFilterString = filter;
+ return this;
+ }
+
+ /**
* Include only downloads with status matching any the given status flags.
* @param flags any combination of the STATUS_* bit flags
* @return this object
@@ -904,9 +916,20 @@ public class DownloadManager {
List<String> selectionParts = new ArrayList<String>();
String[] selectionArgs = null;
- if (mIds != null) {
- selectionParts.add(getWhereClauseForIds(mIds));
- selectionArgs = getWhereArgsForIds(mIds);
+ int whereArgsCount = (mIds == null) ? 0 : mIds.length;
+ whereArgsCount = (mFilterString == null) ? whereArgsCount : whereArgsCount + 1;
+ selectionArgs = new String[whereArgsCount];
+
+ if (whereArgsCount > 0) {
+ if (mIds != null) {
+ selectionParts.add(getWhereClauseForIds(mIds));
+ getWhereArgsForIds(mIds, selectionArgs);
+ }
+
+ if (mFilterString != null) {
+ selectionParts.add(Downloads.Impl.COLUMN_TITLE + " LIKE ?");
+ selectionArgs[selectionArgs.length - 1] = "%" + mFilterString + "%";
+ }
}
if (mStatusFlags != null) {
@@ -1450,12 +1473,22 @@ public class DownloadManager {
*/
static String[] getWhereArgsForIds(long[] ids) {
String[] whereArgs = new String[ids.length];
+ return getWhereArgsForIds(ids, whereArgs);
+ }
+
+ /**
+ * Get selection args for a clause returned by {@link #getWhereClauseForIds(long[])}
+ * and write it to the supplied args array.
+ */
+ static String[] getWhereArgsForIds(long[] ids, String[] args) {
+ assert(args.length >= ids.length);
for (int i = 0; i < ids.length; i++) {
- whereArgs[i] = Long.toString(ids[i]);
+ args[i] = Long.toString(ids[i]);
}
- return whereArgs;
+ return args;
}
+
/**
* This class wraps a cursor returned by DownloadProvider -- the "underlying cursor" -- and
* presents a different set of columns, those defined in the DownloadManager.COLUMN_* constants.