Simulate blutooth case of having a playable queue without browse items
Test: manual
Change-Id: Ib47544cb340c0a17fc2bfea3f527a6fd51d93f16
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java
index a51e623..9cf1e7c 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java
@@ -15,6 +15,9 @@
*/
package com.android.car.media.testmediaapp;
+import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType.LEAF_CHILDREN;
+import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType.QUEUE_ONLY;
+
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
@@ -31,6 +34,7 @@
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaAccountType;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaReplyDelay;
import com.android.car.media.testmediaapp.prefs.TmaPrefs;
+import com.android.internal.util.Preconditions;
import java.util.ArrayList;
import java.util.List;
@@ -128,6 +132,17 @@
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)) {
+ TmaMediaItem queue = mLibrary.getRoot(LEAF_CHILDREN);
+ Preconditions.checkNotNull(queue);
+ mSession.setQueue(queue.buildQueue());
+
+ TmaMediaItem firstItem = queue.getPlayableByIndex(0);
+ if (firstItem != null) {
+ mPlayer.onPrepareFromMediaId(firstItem.getMediaId(), null);
+ }
+ }
}
@Override
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaLibrary.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaLibrary.java
index eb77019..27b8a7a 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaLibrary.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaLibrary.java
@@ -48,6 +48,7 @@
mLoader = loader;
mRootAssetPaths.put(TmaBrowseNodeType.NULL, null);
mRootAssetPaths.put(TmaBrowseNodeType.EMPTY, "media_items/empty.json");
+ mRootAssetPaths.put(TmaBrowseNodeType.QUEUE_ONLY, "media_items/empty.json");
mRootAssetPaths.put(TmaBrowseNodeType.NODE_CHILDREN, "media_items/only_nodes.json");
mRootAssetPaths.put(TmaBrowseNodeType.LEAF_CHILDREN, "media_items/simple_leaves.json");
mRootAssetPaths.put(TmaBrowseNodeType.MIXED_CHILDREN, "media_items/mixed.json");
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
index dc368ea..cd6eee0 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
@@ -145,6 +145,28 @@
}
@Override
+ public void onPrepareFromMediaId(String mediaId, Bundle extras) {
+ super.onPrepareFromMediaId(mediaId, extras);
+
+ TmaMediaItem item = mLibrary.getMediaItemById(mediaId);
+ if (item != null && item.getParent() != null) {
+ if (mIsPlaying) {
+ stopPlayback();
+ }
+ mActiveItem = item;
+ mActiveItem.updateSessionMetadata(mSession);
+ mSession.setQueue(item.getParent().buildQueue());
+
+ PlaybackStateCompat.Builder state = new PlaybackStateCompat.Builder()
+ .setState(PlaybackStateCompat.STATE_PAUSED, mCurrentPositionMs, mPlaybackSpeed)
+ .setActions(addActions(ACTION_PLAY));
+ setActiveItemState(state);
+ mSession.setPlaybackState(state.build());
+ }
+ }
+
+
+ @Override
public void onSkipToQueueItem(long id) {
super.onSkipToQueueItem(id);
if (mActiveItem != null && mActiveItem.getParent() != null) {
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
index ad870b6..3da4209 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
@@ -83,6 +83,7 @@
public enum TmaBrowseNodeType implements EnumPrefValue {
NULL("Null (error)", "null"),
EMPTY("Empty", "empty"),
+ QUEUE_ONLY("Queue only", "queue-only"),
NODE_CHILDREN("Only browse-able content", "nodes"),
LEAF_CHILDREN("Only playable content (basic working and error cases)", "leaves"),
MIXED_CHILDREN("Mixed content (apps are not supposed to do that)", "mixed");