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");