diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-10 02:13:21 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-10 02:13:21 +0000 |
commit | 0abfc701bd8640360b9b517c70a3d46b3a2143e6 (patch) | |
tree | 74353c7732e634466568cef5288d039520247bbc | |
parent | c9afb4895d2687f18740f7f464bf4be47d98aed4 (diff) | |
parent | 849f50f4c4e0acada6a624721274f8f7deaeba80 (diff) | |
download | tests-0abfc701bd8640360b9b517c70a3d46b3a2143e6.tar.gz |
Snap for 6383144 from 849f50f4c4e0acada6a624721274f8f7deaeba80 to rvc-release
Change-Id: I79f299056f01217b7b766499005f88fb4f78201a
5 files changed, 69 insertions, 20 deletions
diff --git a/TestMediaApp/assets/media_items/album_art/art_nodes.json b/TestMediaApp/assets/media_items/album_art/art_nodes.json index 692809f..abfc869 100644 --- a/TestMediaApp/assets/media_items/album_art/art_nodes.json +++ b/TestMediaApp/assets/media_items/album_art/art_nodes.json @@ -61,6 +61,16 @@ "DISPLAY_TITLE": "Nature files" }, "INCLUDE":"media_items/album_art/nature/art_nature_files.json" + }, + { + "FLAGS": "browsable", + "PLAYABLE_HINT": "GRID", + "METADATA": { + "MEDIA_ID": "album_art/art_nodes nature self updating", + "DISPLAY_TITLE": "Nature self updating" + }, + "SELF_UPDATE_MS": "2000", + "INCLUDE":"media_items/album_art/nature/art_nature_512.json" } ] }
\ No newline at end of file diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java index 7a62137..3c3eeb6 100644 --- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java +++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java @@ -204,11 +204,24 @@ public class TmaBrowser extends MediaBrowserServiceCompat { 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) { - items.add(child.toMediaItem()); + List<TmaMediaItem> children = node.getChildren(); + int childrenCount = children.size(); + List<MediaItem> items = new ArrayList<>(childrenCount); + if (childrenCount <= 0) { + result.sendResult(items); + } else { + int selfUpdateDelay = node.getSelfUpdateDelay(); + int toShow = (selfUpdateDelay > 0) ? 1 + node.mRevealCounter : childrenCount; + for (int childIndex = 0 ; childIndex < toShow; childIndex++) { + items.add(children.get(childIndex).toMediaItem()); + } + result.sendResult(items); + + if (selfUpdateDelay > 0) { + mHandler.postDelayed(new UpdateNodeTask(parentId), selfUpdateDelay); + node.mRevealCounter = (node.mRevealCounter + 1) % (childrenCount); + } } - result.sendResult(items); } }; if (delay == TmaReplyDelay.NONE) { @@ -225,7 +238,7 @@ public class TmaBrowser extends MediaBrowserServiceCompat { return; } - for (TmaMediaItem child : node.mChildren) { + for (TmaMediaItem child : node.getChildren()) { MediaItem item = child.toMediaItem(); CharSequence title = item.getDescription().getTitle(); if (title != null) { @@ -240,4 +253,18 @@ public class TmaBrowser extends MediaBrowserServiceCompat { addSearchResults(child, matcher, hits, currentDepth - 1); } } + + private class UpdateNodeTask implements Runnable { + + private final String mNodeId; + + UpdateNodeTask(@NonNull String nodeId) { + mNodeId = nodeId; + } + + @Override + public void run() { + notifyChildrenChanged(mNodeId); + } + } } diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaLibrary.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaLibrary.java index 327a2b6..5bd74ad 100644 --- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaLibrary.java +++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaLibrary.java @@ -66,8 +66,9 @@ class TmaLibrary { TmaMediaItem getMediaItemById(String mediaId) { TmaMediaItem result = mMediaItemsByMediaId.get(mediaId); // Processing includes only on request allows recursive structures :-) - if (result != null && !TextUtils.isEmpty(result.mInclude)) { - result = result.append(loadAssetFile(result.mInclude).mChildren); + if (result != null && !TextUtils.isEmpty(result.mInclude) + && result.getChildren().isEmpty()) { + result.setChildren(loadAssetFile(result.mInclude).getChildren()); } return result; } @@ -89,7 +90,7 @@ class TmaLibrary { private void cacheMediaItem(TmaMediaItem item) { String key = item.getMediaId(); if (mMediaItemsByMediaId.putIfAbsent(key, item) == null) { - for (TmaMediaItem child : item.mChildren) { + for (TmaMediaItem child : item.getChildren()) { cacheMediaItem(child); } } else { diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaItem.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaItem.java index af1b2e3..129e267 100644 --- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaItem.java +++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaItem.java @@ -66,16 +66,17 @@ public class TmaMediaItem { mNameId = name; mIcon = icon; } - } private final int mFlags; private final MediaMetadataCompat mMediaMetadata; private final ContentStyle mPlayableStyle; private final ContentStyle mBrowsableStyle; + private final int mSelfUpdateMs; - /** Read only list. */ - final List<TmaMediaItem> mChildren; + + /** Internally modifiable list (for includes). */ + private final List<TmaMediaItem> mChildren; /** Read only list. */ private final List<TmaMediaItem> mPlayableChildren; /** Read only list. */ @@ -87,18 +88,20 @@ public class TmaMediaItem { private @Nullable TmaMediaItem mParent; int mHearts; + int mRevealCounter; public TmaMediaItem(int flags, ContentStyle playableStyle, ContentStyle browsableStyle, - MediaMetadataCompat metadata, List<TmaCustomAction> customActions, - List<TmaMediaEvent> mediaEvents, + MediaMetadataCompat metadata, int selfUpdateMs, + List<TmaCustomAction> customActions, List<TmaMediaEvent> mediaEvents, List<TmaMediaItem> children, String include) { mFlags = flags; mPlayableStyle = playableStyle; mBrowsableStyle = browsableStyle; mMediaMetadata = metadata; + mSelfUpdateMs = selfUpdateMs; mCustomActions = Collections.unmodifiableList(customActions); - mChildren = Collections.unmodifiableList(children); + mChildren = children; mMediaEvents = Collections.unmodifiableList(mediaEvents); mInclude = include; List<TmaMediaItem> playableChildren = new ArrayList<>(children.size()); @@ -115,6 +118,14 @@ public class TmaMediaItem { mParent = parent; } + int getSelfUpdateDelay() { + return mSelfUpdateMs; + } + + List<TmaMediaItem> getChildren() { + return Collections.unmodifiableList(mChildren); + } + @Nullable TmaMediaItem getParent() { return mParent; @@ -155,12 +166,9 @@ public class TmaMediaItem { return result; } - TmaMediaItem append(List<TmaMediaItem> children) { - List<TmaMediaItem> allChildren = new ArrayList<>(mChildren.size() + children.size()); - allChildren.addAll(mChildren); - allChildren.addAll(children); - return new TmaMediaItem(mFlags, mPlayableStyle, mBrowsableStyle, mMediaMetadata, - mCustomActions, mMediaEvents, allChildren, null); + void setChildren(List<TmaMediaItem> children) { + mChildren.clear(); + mChildren.addAll(children); } void updateSessionMetadata(MediaSessionCompat session) { diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaItemReader.java b/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaItemReader.java index 2d4b845..e62055d 100644 --- a/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaItemReader.java +++ b/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaItemReader.java @@ -24,6 +24,7 @@ import static com.android.car.media.testmediaapp.loader.TmaLoaderUtils.enumNames import static com.android.car.media.testmediaapp.loader.TmaLoaderUtils.getArray; import static com.android.car.media.testmediaapp.loader.TmaLoaderUtils.getEnum; import static com.android.car.media.testmediaapp.loader.TmaLoaderUtils.getEnumArray; +import static com.android.car.media.testmediaapp.loader.TmaLoaderUtils.getInt; import static com.android.car.media.testmediaapp.loader.TmaLoaderUtils.getString; import android.util.Log; @@ -55,6 +56,7 @@ class TmaMediaItemReader { PLAYABLE_HINT, BROWSABLE_HINT, METADATA, + SELF_UPDATE_MS, CHILDREN, INCLUDE, CUSTOM_ACTIONS, @@ -114,6 +116,7 @@ class TmaMediaItemReader { getEnum(json, Keys.PLAYABLE_HINT, mContentStyles, ContentStyle.NONE), getEnum(json, Keys.BROWSABLE_HINT, mContentStyles, ContentStyle.NONE), mMediaMetadataReader.fromJson(json.getJSONObject(Keys.METADATA.name())), + getInt(json, Keys.SELF_UPDATE_MS), getEnumArray(json, Keys.CUSTOM_ACTIONS, mCustomActions), mediaEvents, mediaItems, getString(json, Keys.INCLUDE)); } catch (JSONException e) { |