diff options
author | Arnaud Berry <arnaudberry@google.com> | 2019-12-12 15:30:38 -0800 |
---|---|---|
committer | Arnaud Berry <arnaudberry@google.com> | 2019-12-12 15:30:38 -0800 |
commit | 9d9bcc3d16240aa1288c861aae284c63c3eb8d01 (patch) | |
tree | 18dfa28936acde79019be9360c8d0f6c007226ce /TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java | |
parent | 90566b389556a0e6958d355d76de3b22b94135f2 (diff) | |
download | tests-9d9bcc3d16240aa1288c861aae284c63c3eb8d01.tar.gz |
Always start search from the root and make it case insensitive
Test: manual
Bug: 146143204
Change-Id: If5a5f5ac8096d045bcbf3aa07925b2171d9650cb
Diffstat (limited to 'TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java')
-rw-r--r-- | TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java index 079ab3b..7a62137 100644 --- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java +++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java @@ -39,6 +39,8 @@ import com.android.car.media.testmediaapp.prefs.TmaPrefs; import java.util.ArrayList; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** @@ -52,6 +54,7 @@ import java.util.List; public class TmaBrowser extends MediaBrowserServiceCompat { private static final String TAG = "TmaBrowser"; + private static final int MAX_SEARCH_DEPTH = 4; private static final String MEDIA_SESSION_TAG = "TEST_MEDIA_SESSION"; private static final String ROOT_ID = "_ROOT_ID_"; private static final String SEARCH_SUPPORTED = "android.media.browse.SEARCH_SUPPORTED"; @@ -68,7 +71,6 @@ public class TmaBrowser extends MediaBrowserServiceCompat { private TmaPlayer mPlayer; private BrowserRoot mRoot; - private String mLastLoadedNodeId; @Override public void onCreate() { @@ -163,7 +165,6 @@ public class TmaBrowser extends MediaBrowserServiceCompat { @Override public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaItem>> result) { - mLastLoadedNodeId = parentId; getMediaItemsWithDelay(parentId, result, null); if (QUEUE_ONLY.equals(mPrefs.mRootNodeType.getValue()) && ROOT_ID.equals(parentId)) { @@ -176,8 +177,9 @@ public class TmaBrowser extends MediaBrowserServiceCompat { } @Override - public void onSearch(final String query, final Bundle extras, Result<List<MediaItem>> result) { - getMediaItemsWithDelay(mLastLoadedNodeId, result, query); + public void onSearch(@NonNull String query, Bundle extras, + @NonNull Result<List<MediaItem>> result) { + getMediaItemsWithDelay(ROOT_ID, result, query); } private void getMediaItemsWithDelay(@NonNull String parentId, @@ -196,14 +198,15 @@ public class TmaBrowser extends MediaBrowserServiceCompat { if (node == null) { result.sendResult(null); + } else if (filter != null) { + List<MediaItem> hits = new ArrayList<>(50); + Pattern pat = Pattern.compile(Pattern.quote(filter), Pattern.CASE_INSENSITIVE); + addSearchResults(node, pat.matcher(""), hits, MAX_SEARCH_DEPTH); + result.sendResult(hits); } else { List<MediaItem> items = new ArrayList<>(node.mChildren.size()); for (TmaMediaItem child : node.mChildren) { - MediaItem item = child.toMediaItem(); - CharSequence title = item.getDescription().getTitle(); - if (filter == null || (title != null && title.toString().contains(filter))) { - items.add(item); - } + items.add(child.toMediaItem()); } result.sendResult(items); } @@ -215,4 +218,26 @@ public class TmaBrowser extends MediaBrowserServiceCompat { mHandler.postDelayed(task, delay.mReplyDelayMs); } } + + private void addSearchResults(@Nullable TmaMediaItem node, Matcher matcher, + List<MediaItem> hits, int currentDepth) { + if (node == null || currentDepth <= 0) { + return; + } + + for (TmaMediaItem child : node.mChildren) { + MediaItem item = child.toMediaItem(); + CharSequence title = item.getDescription().getTitle(); + if (title != null) { + matcher.reset(title); + if (matcher.find()) { + hits.add(item); + } + } + + // Ask the library to load the grand children + child = mLibrary.getMediaItemById(child.getMediaId()); + addSearchResults(child, matcher, hits, currentDepth - 1); + } + } } |