diff options
| author | Ben Lin <linben@google.com> | 2016-05-02 16:45:45 -0700 |
|---|---|---|
| committer | Ben Lin <linben@google.com> | 2016-05-10 21:45:25 +0000 |
| commit | ce763d8bac85d404a36e82eb195c33e00a0ceb10 (patch) | |
| tree | ce2a895521245a61667f0b49f7ac931f60de1806 /core/java/android/app/DownloadManager.java | |
| parent | d9586dcb5159086cf87d37f9be6e25896a820edb (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.java | 43 |
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. |
