DO NOT MERGE - Merge RQ3A.210605.005

Bug: 190855093
Merged-In: I4367c06ff60087361bf176d7c7d786f106eeffaa
Change-Id: Ic3c8d6b448e9091130de831bdf1f14bd7591dfa8
diff --git a/RotaryPlayground/AndroidManifest.xml b/RotaryPlayground/AndroidManifest.xml
index 4aac33f..be6d847 100644
--- a/RotaryPlayground/AndroidManifest.xml
+++ b/RotaryPlayground/AndroidManifest.xml
@@ -23,11 +23,21 @@
         <activity
             android:name=".RotaryActivity"
             android:label="@string/app_name"
-            android:allowEmbedded="true">
+            android:allowEmbedded="true"
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
+            <!-- Define app-specific custom off-screen nudge up action:
+                 GLOBAL_ACTION_NOTIFICATIONS -->
+            <meta-data android:name="nudge.up.globalAction" android:value="4"/>
+            <!-- Define app-specific custom off-screen nudge left action: KEYCODE_BACK -->
+            <meta-data android:name="nudge.left.keyCode" android:value="4"/>
+            <!-- Define app-specific custom off-screen nudge down action: launch Settings -->
+            <meta-data
+                android:name="nudge.down.intent"
+                android:value="intent:#Intent;action=android.settings.SETTINGS;category=android.intent.category.DEFAULT;end"/>
         </activity>
     </application>
 </manifest>
\ No newline at end of file
diff --git a/RotaryPlayground/res/layout/custom_focus_areas_fragment.xml b/RotaryPlayground/res/layout/custom_focus_areas_fragment.xml
index ea6a0b0..2750aab 100644
--- a/RotaryPlayground/res/layout/custom_focus_areas_fragment.xml
+++ b/RotaryPlayground/res/layout/custom_focus_areas_fragment.xml
@@ -34,7 +34,12 @@
             android:layout_margin="@dimen/margin"
             android:gravity="center"
             android:orientation="vertical"
-            android:background="@color/card_background_color">
+            android:background="@color/card_background_color"
+            app:wrapAround="true">
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="Wrap-around enabled"/>
             <Button
                 android:layout_width="wrap_content"
                 android:layout_height="@dimen/button_height"
@@ -47,7 +52,6 @@
                 android:focusedByDefault="true"
                 android:text="android:focusedByDefault"/>
             <Button
-                android:id="@+id/default_focus1"
                 android:layout_width="wrap_content"
                 android:layout_height="@dimen/button_height"
                 android:paddingHorizontal="@dimen/padding"
diff --git a/TestMediaApp/assets/media_items/GenerateSongsJson.java b/TestMediaApp/assets/media_items/GenerateSongsJson.java
new file mode 100644
index 0000000..187af60
--- /dev/null
+++ b/TestMediaApp/assets/media_items/GenerateSongsJson.java
@@ -0,0 +1,68 @@
+import java.io.IOException;
+import java.util.Random;
+import java.io.FileOutputStream;
+
+/*
+ * This class will generate a json file containing 200 songs by default.
+ * Defaults:
+ * 1.) No. of songs - 200
+ * 2.) Seed - 200
+ * 3.) File name - "hundres_songs.json"
+ *
+ * If you want to change any of the default values pass them as arguments in the following:
+ * arg #1 No. of songs (Integer)
+ * arg #2 Seed (Integer)
+ * arg #3 File name (String) e.g <some-name>.json
+ */
+
+public class GenerateSongsJson {
+
+  private static final StringBuilder sb = new StringBuilder();
+
+  public static void main(String []args) throws IOException {
+    int numOfSongs = 200;
+    int seed = 200;
+    String fileName = "hundres_songs.json";
+
+    if (args.length != 0) {
+      try {
+        numOfSongs = Integer.parseInt(args[0]);
+        seed = Integer.parseInt(args[1]);
+        fileName = args[2];
+      } catch (NumberFormatException e) {
+        System.out.println("Please enter the args as mentioned in the comment above.");
+        throw (e);
+      }
+    }
+
+    Random randomNum = new Random(seed);
+    FileOutputStream outputStream = new FileOutputStream(fileName);
+
+    sb.append("{ \n");
+    sb.append("  \"FLAGS\": \"browsable\", \n\n");
+    sb.append("  \"METADATA\": { \n");
+    sb.append("	\"MEDIA_ID\": \"hundreds_songs\", \n");
+    sb.append("    \"DISPLAY_TITLE\": \"More songs\" \n");
+    sb.append("  },\n\n");
+    sb.append("  \"CHILDREN\": [ \n");
+
+    for (int i = 1; i <= numOfSongs; i++) {
+      int num1 = randomNum.nextInt(10000);
+      int num2 = num1/1000;
+      sb.append("    { \n  ");
+      sb.append("    \"FLAGS\": \"playable\",\n");
+      sb.append("      \"METADATA\": { \n");
+      sb.append("     	\"MEDIA_ID\": \"hundreds_songs normal " + num2 + "s song" + i +"\",\n");
+      sb.append(" 		\"DISPLAY_TITLE\": \"Normal " + num2 + "s song" + i + "\",\n");
+      sb.append(" 		\"DURATION\": " + num1 + "\n");
+      sb.append("      } \n");
+      sb.append("    },\n");
+    }
+    sb.deleteCharAt(sb.length() - 2);
+    sb.append("  ]\n");
+    sb.append("}");
+    byte[] strToBytes = sb.toString().getBytes();
+    outputStream.write(strToBytes);
+    outputStream.close();
+  }
+}
diff --git a/TestMediaApp/assets/media_items/advanced.json b/TestMediaApp/assets/media_items/advanced.json
index 9266a1c..e12a92c 100644
--- a/TestMediaApp/assets/media_items/advanced.json
+++ b/TestMediaApp/assets/media_items/advanced.json
@@ -39,6 +39,15 @@
     },
     {
       "FLAGS": "browsable",
+      "PLAYABLE_HINT": "LIST",
+      "METADATA": {
+        "MEDIA_ID": "advanced toggles",
+        "DISPLAY_TITLE": "Node toggles (hide/show specific nodes)"
+      },
+      "INCLUDE":"media_items/toggles.json"
+    },
+    {
+      "FLAGS": "browsable",
       "BROWSABLE_HINT": "GRID_CATEGORY",
       "METADATA": {
         "MEDIA_ID": "advanced art nodes",
@@ -50,6 +59,15 @@
       "FLAGS": "browsable",
       "PLAYABLE_HINT": "LIST",
       "METADATA": {
+        "MEDIA_ID": "advanced more songs",
+        "DISPLAY_TITLE": "More songs"
+      },
+      "INCLUDE":"media_items/hundreds_songs.json"
+    },
+    {
+      "FLAGS": "browsable",
+      "PLAYABLE_HINT": "LIST",
+      "METADATA": {
         "MEDIA_ID": "advanced exceptions",
         "DISPLAY_TITLE": "Exceptions"
       },
diff --git a/TestMediaApp/assets/media_items/hundreds_songs.json b/TestMediaApp/assets/media_items/hundreds_songs.json
new file mode 100644
index 0000000..2db0ffd
--- /dev/null
+++ b/TestMediaApp/assets/media_items/hundreds_songs.json
@@ -0,0 +1,1611 @@
+{
+  "FLAGS": "browsable",
+
+  "METADATA": {
+    "MEDIA_ID": "hundreds_songs",
+    "DISPLAY_TITLE": "More songs"
+  },
+
+  "CHILDREN": [
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song1",
+        "DISPLAY_TITLE": "Normal 4s song1",
+        "DURATION": 4329
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song2",
+        "DISPLAY_TITLE": "Normal 2s song2",
+        "DURATION": 2541
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song3",
+        "DISPLAY_TITLE": "Normal 0s song3",
+        "DURATION": 666
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song4",
+        "DISPLAY_TITLE": "Normal 9s song4",
+        "DURATION": 9833
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song5",
+        "DISPLAY_TITLE": "Normal 4s song5",
+        "DURATION": 4572
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song6",
+        "DISPLAY_TITLE": "Normal 0s song6",
+        "DURATION": 667
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song7",
+        "DISPLAY_TITLE": "Normal 3s song7",
+        "DURATION": 3914
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song8",
+        "DISPLAY_TITLE": "Normal 9s song8",
+        "DURATION": 9519
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song9",
+        "DISPLAY_TITLE": "Normal 4s song9",
+        "DURATION": 4778
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song10",
+        "DISPLAY_TITLE": "Normal 0s song10",
+        "DURATION": 242
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song11",
+        "DISPLAY_TITLE": "Normal 7s song11",
+        "DURATION": 7883
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song12",
+        "DISPLAY_TITLE": "Normal 9s song12",
+        "DURATION": 9884
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song13",
+        "DISPLAY_TITLE": "Normal 8s song13",
+        "DURATION": 8612
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song14",
+        "DISPLAY_TITLE": "Normal 7s song14",
+        "DURATION": 7395
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song15",
+        "DISPLAY_TITLE": "Normal 0s song15",
+        "DURATION": 19
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song16",
+        "DISPLAY_TITLE": "Normal 7s song16",
+        "DURATION": 7452
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song17",
+        "DISPLAY_TITLE": "Normal 2s song17",
+        "DURATION": 2562
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song18",
+        "DISPLAY_TITLE": "Normal 0s song18",
+        "DURATION": 644
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song19",
+        "DISPLAY_TITLE": "Normal 7s song19",
+        "DURATION": 7695
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song20",
+        "DISPLAY_TITLE": "Normal 0s song20",
+        "DURATION": 328
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song21",
+        "DISPLAY_TITLE": "Normal 5s song21",
+        "DURATION": 5640
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song22",
+        "DISPLAY_TITLE": "Normal 4s song22",
+        "DURATION": 4044
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song23",
+        "DISPLAY_TITLE": "Normal 3s song23",
+        "DURATION": 3905
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song24",
+        "DISPLAY_TITLE": "Normal 7s song24",
+        "DURATION": 7649
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song25",
+        "DISPLAY_TITLE": "Normal 8s song25",
+        "DURATION": 8259
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song26",
+        "DISPLAY_TITLE": "Normal 2s song26",
+        "DURATION": 2811
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song27",
+        "DISPLAY_TITLE": "Normal 5s song27",
+        "DURATION": 5156
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song28",
+        "DISPLAY_TITLE": "Normal 9s song28",
+        "DURATION": 9437
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song29",
+        "DISPLAY_TITLE": "Normal 3s song29",
+        "DURATION": 3395
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song30",
+        "DISPLAY_TITLE": "Normal 9s song30",
+        "DURATION": 9268
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song31",
+        "DISPLAY_TITLE": "Normal 5s song31",
+        "DURATION": 5904
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song32",
+        "DISPLAY_TITLE": "Normal 2s song32",
+        "DURATION": 2763
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song33",
+        "DISPLAY_TITLE": "Normal 6s song33",
+        "DURATION": 6387
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song34",
+        "DISPLAY_TITLE": "Normal 1s song34",
+        "DURATION": 1960
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song35",
+        "DISPLAY_TITLE": "Normal 0s song35",
+        "DURATION": 89
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song36",
+        "DISPLAY_TITLE": "Normal 1s song36",
+        "DURATION": 1156
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song37",
+        "DISPLAY_TITLE": "Normal 5s song37",
+        "DURATION": 5235
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song38",
+        "DISPLAY_TITLE": "Normal 3s song38",
+        "DURATION": 3983
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song39",
+        "DISPLAY_TITLE": "Normal 8s song39",
+        "DURATION": 8914
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song40",
+        "DISPLAY_TITLE": "Normal 9s song40",
+        "DURATION": 9568
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song41",
+        "DISPLAY_TITLE": "Normal 5s song41",
+        "DURATION": 5463
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song42",
+        "DISPLAY_TITLE": "Normal 1s song42",
+        "DURATION": 1301
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song43",
+        "DISPLAY_TITLE": "Normal 0s song43",
+        "DURATION": 575
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song44",
+        "DISPLAY_TITLE": "Normal 6s song44",
+        "DURATION": 6578
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song45",
+        "DISPLAY_TITLE": "Normal 2s song45",
+        "DURATION": 2312
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song46",
+        "DISPLAY_TITLE": "Normal 8s song46",
+        "DURATION": 8032
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song47",
+        "DISPLAY_TITLE": "Normal 8s song47",
+        "DURATION": 8120
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song48",
+        "DISPLAY_TITLE": "Normal 5s song48",
+        "DURATION": 5314
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song49",
+        "DISPLAY_TITLE": "Normal 3s song49",
+        "DURATION": 3784
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song50",
+        "DISPLAY_TITLE": "Normal 7s song50",
+        "DURATION": 7785
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song51",
+        "DISPLAY_TITLE": "Normal 5s song51",
+        "DURATION": 5641
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song52",
+        "DISPLAY_TITLE": "Normal 0s song52",
+        "DURATION": 165
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song53",
+        "DISPLAY_TITLE": "Normal 2s song53",
+        "DURATION": 2963
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song54",
+        "DISPLAY_TITLE": "Normal 7s song54",
+        "DURATION": 7742
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song55",
+        "DISPLAY_TITLE": "Normal 5s song55",
+        "DURATION": 5782
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song56",
+        "DISPLAY_TITLE": "Normal 6s song56",
+        "DURATION": 6154
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song57",
+        "DISPLAY_TITLE": "Normal 8s song57",
+        "DURATION": 8849
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song58",
+        "DISPLAY_TITLE": "Normal 8s song58",
+        "DURATION": 8099
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song59",
+        "DISPLAY_TITLE": "Normal 2s song59",
+        "DURATION": 2476
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song60",
+        "DISPLAY_TITLE": "Normal 6s song60",
+        "DURATION": 6323
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song61",
+        "DISPLAY_TITLE": "Normal 1s song61",
+        "DURATION": 1511
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song62",
+        "DISPLAY_TITLE": "Normal 8s song62",
+        "DURATION": 8577
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song63",
+        "DISPLAY_TITLE": "Normal 9s song63",
+        "DURATION": 9315
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song64",
+        "DISPLAY_TITLE": "Normal 4s song64",
+        "DURATION": 4846
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song65",
+        "DISPLAY_TITLE": "Normal 8s song65",
+        "DURATION": 8893
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song66",
+        "DISPLAY_TITLE": "Normal 7s song66",
+        "DURATION": 7404
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song67",
+        "DISPLAY_TITLE": "Normal 7s song67",
+        "DURATION": 7535
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song68",
+        "DISPLAY_TITLE": "Normal 0s song68",
+        "DURATION": 687
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song69",
+        "DISPLAY_TITLE": "Normal 7s song69",
+        "DURATION": 7563
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song70",
+        "DISPLAY_TITLE": "Normal 7s song70",
+        "DURATION": 7956
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song71",
+        "DISPLAY_TITLE": "Normal 3s song71",
+        "DURATION": 3030
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song72",
+        "DISPLAY_TITLE": "Normal 8s song72",
+        "DURATION": 8573
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song73",
+        "DISPLAY_TITLE": "Normal 2s song73",
+        "DURATION": 2621
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song74",
+        "DISPLAY_TITLE": "Normal 1s song74",
+        "DURATION": 1416
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song75",
+        "DISPLAY_TITLE": "Normal 8s song75",
+        "DURATION": 8252
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song76",
+        "DISPLAY_TITLE": "Normal 4s song76",
+        "DURATION": 4182
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song77",
+        "DISPLAY_TITLE": "Normal 9s song77",
+        "DURATION": 9158
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song78",
+        "DISPLAY_TITLE": "Normal 4s song78",
+        "DURATION": 4209
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song79",
+        "DISPLAY_TITLE": "Normal 2s song79",
+        "DURATION": 2265
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song80",
+        "DISPLAY_TITLE": "Normal 9s song80",
+        "DURATION": 9487
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song81",
+        "DISPLAY_TITLE": "Normal 8s song81",
+        "DURATION": 8640
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song82",
+        "DISPLAY_TITLE": "Normal 3s song82",
+        "DURATION": 3683
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song83",
+        "DISPLAY_TITLE": "Normal 8s song83",
+        "DURATION": 8813
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song84",
+        "DISPLAY_TITLE": "Normal 7s song84",
+        "DURATION": 7851
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song85",
+        "DISPLAY_TITLE": "Normal 4s song85",
+        "DURATION": 4161
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song86",
+        "DISPLAY_TITLE": "Normal 2s song86",
+        "DURATION": 2731
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song87",
+        "DISPLAY_TITLE": "Normal 9s song87",
+        "DURATION": 9546
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song88",
+        "DISPLAY_TITLE": "Normal 3s song88",
+        "DURATION": 3591
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song89",
+        "DISPLAY_TITLE": "Normal 7s song89",
+        "DURATION": 7513
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song90",
+        "DISPLAY_TITLE": "Normal 2s song90",
+        "DURATION": 2100
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song91",
+        "DISPLAY_TITLE": "Normal 9s song91",
+        "DURATION": 9359
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song92",
+        "DISPLAY_TITLE": "Normal 1s song92",
+        "DURATION": 1024
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song93",
+        "DISPLAY_TITLE": "Normal 1s song93",
+        "DURATION": 1640
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song94",
+        "DISPLAY_TITLE": "Normal 2s song94",
+        "DURATION": 2301
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song95",
+        "DISPLAY_TITLE": "Normal 2s song95",
+        "DURATION": 2965
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song96",
+        "DISPLAY_TITLE": "Normal 6s song96",
+        "DURATION": 6322
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song97",
+        "DISPLAY_TITLE": "Normal 7s song97",
+        "DURATION": 7693
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song98",
+        "DISPLAY_TITLE": "Normal 5s song98",
+        "DURATION": 5999
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song99",
+        "DISPLAY_TITLE": "Normal 2s song99",
+        "DURATION": 2305
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song100",
+        "DISPLAY_TITLE": "Normal 5s song100",
+        "DURATION": 5215
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song101",
+        "DISPLAY_TITLE": "Normal 5s song101",
+        "DURATION": 5672
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song102",
+        "DISPLAY_TITLE": "Normal 3s song102",
+        "DURATION": 3869
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song103",
+        "DISPLAY_TITLE": "Normal 7s song103",
+        "DURATION": 7274
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song104",
+        "DISPLAY_TITLE": "Normal 7s song104",
+        "DURATION": 7512
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song105",
+        "DISPLAY_TITLE": "Normal 9s song105",
+        "DURATION": 9697
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song106",
+        "DISPLAY_TITLE": "Normal 9s song106",
+        "DURATION": 9357
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song107",
+        "DISPLAY_TITLE": "Normal 9s song107",
+        "DURATION": 9589
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song108",
+        "DISPLAY_TITLE": "Normal 0s song108",
+        "DURATION": 794
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song109",
+        "DISPLAY_TITLE": "Normal 3s song109",
+        "DURATION": 3522
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song110",
+        "DISPLAY_TITLE": "Normal 5s song110",
+        "DURATION": 5709
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song111",
+        "DISPLAY_TITLE": "Normal 9s song111",
+        "DURATION": 9644
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song112",
+        "DISPLAY_TITLE": "Normal 2s song112",
+        "DURATION": 2936
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song113",
+        "DISPLAY_TITLE": "Normal 2s song113",
+        "DURATION": 2703
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song114",
+        "DISPLAY_TITLE": "Normal 3s song114",
+        "DURATION": 3539
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song115",
+        "DISPLAY_TITLE": "Normal 1s song115",
+        "DURATION": 1182
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song116",
+        "DISPLAY_TITLE": "Normal 3s song116",
+        "DURATION": 3520
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song117",
+        "DISPLAY_TITLE": "Normal 6s song117",
+        "DURATION": 6598
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song118",
+        "DISPLAY_TITLE": "Normal 3s song118",
+        "DURATION": 3014
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song119",
+        "DISPLAY_TITLE": "Normal 4s song119",
+        "DURATION": 4976
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song120",
+        "DISPLAY_TITLE": "Normal 1s song120",
+        "DURATION": 1101
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song121",
+        "DISPLAY_TITLE": "Normal 2s song121",
+        "DURATION": 2545
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song122",
+        "DISPLAY_TITLE": "Normal 4s song122",
+        "DURATION": 4163
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song123",
+        "DISPLAY_TITLE": "Normal 9s song123",
+        "DURATION": 9648
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song124",
+        "DISPLAY_TITLE": "Normal 1s song124",
+        "DURATION": 1065
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song125",
+        "DISPLAY_TITLE": "Normal 0s song125",
+        "DURATION": 969
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song126",
+        "DISPLAY_TITLE": "Normal 4s song126",
+        "DURATION": 4604
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song127",
+        "DISPLAY_TITLE": "Normal 5s song127",
+        "DURATION": 5114
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song128",
+        "DISPLAY_TITLE": "Normal 4s song128",
+        "DURATION": 4957
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song129",
+        "DISPLAY_TITLE": "Normal 4s song129",
+        "DURATION": 4596
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song130",
+        "DISPLAY_TITLE": "Normal 2s song130",
+        "DURATION": 2915
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song131",
+        "DISPLAY_TITLE": "Normal 8s song131",
+        "DURATION": 8467
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song132",
+        "DISPLAY_TITLE": "Normal 2s song132",
+        "DURATION": 2614
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song133",
+        "DISPLAY_TITLE": "Normal 4s song133",
+        "DURATION": 4943
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song134",
+        "DISPLAY_TITLE": "Normal 8s song134",
+        "DURATION": 8175
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song135",
+        "DISPLAY_TITLE": "Normal 2s song135",
+        "DURATION": 2499
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song136",
+        "DISPLAY_TITLE": "Normal 1s song136",
+        "DURATION": 1493
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song137",
+        "DISPLAY_TITLE": "Normal 9s song137",
+        "DURATION": 9239
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song138",
+        "DISPLAY_TITLE": "Normal 6s song138",
+        "DURATION": 6921
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song139",
+        "DISPLAY_TITLE": "Normal 8s song139",
+        "DURATION": 8720
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song140",
+        "DISPLAY_TITLE": "Normal 9s song140",
+        "DURATION": 9252
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song141",
+        "DISPLAY_TITLE": "Normal 9s song141",
+        "DURATION": 9328
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song142",
+        "DISPLAY_TITLE": "Normal 6s song142",
+        "DURATION": 6678
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song143",
+        "DISPLAY_TITLE": "Normal 0s song143",
+        "DURATION": 437
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song144",
+        "DISPLAY_TITLE": "Normal 7s song144",
+        "DURATION": 7488
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song145",
+        "DISPLAY_TITLE": "Normal 6s song145",
+        "DURATION": 6697
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song146",
+        "DISPLAY_TITLE": "Normal 9s song146",
+        "DURATION": 9552
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song147",
+        "DISPLAY_TITLE": "Normal 4s song147",
+        "DURATION": 4385
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song148",
+        "DISPLAY_TITLE": "Normal 3s song148",
+        "DURATION": 3911
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song149",
+        "DISPLAY_TITLE": "Normal 1s song149",
+        "DURATION": 1623
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song150",
+        "DISPLAY_TITLE": "Normal 6s song150",
+        "DURATION": 6163
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song151",
+        "DISPLAY_TITLE": "Normal 0s song151",
+        "DURATION": 556
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song152",
+        "DISPLAY_TITLE": "Normal 9s song152",
+        "DURATION": 9855
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song153",
+        "DISPLAY_TITLE": "Normal 7s song153",
+        "DURATION": 7837
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song154",
+        "DISPLAY_TITLE": "Normal 4s song154",
+        "DURATION": 4177
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song155",
+        "DISPLAY_TITLE": "Normal 6s song155",
+        "DURATION": 6693
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song156",
+        "DISPLAY_TITLE": "Normal 0s song156",
+        "DURATION": 193
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song157",
+        "DISPLAY_TITLE": "Normal 9s song157",
+        "DURATION": 9005
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song158",
+        "DISPLAY_TITLE": "Normal 1s song158",
+        "DURATION": 1923
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 0s song159",
+        "DISPLAY_TITLE": "Normal 0s song159",
+        "DURATION": 102
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song160",
+        "DISPLAY_TITLE": "Normal 3s song160",
+        "DURATION": 3632
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song161",
+        "DISPLAY_TITLE": "Normal 1s song161",
+        "DURATION": 1305
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song162",
+        "DISPLAY_TITLE": "Normal 5s song162",
+        "DURATION": 5805
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song163",
+        "DISPLAY_TITLE": "Normal 9s song163",
+        "DURATION": 9961
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song164",
+        "DISPLAY_TITLE": "Normal 6s song164",
+        "DURATION": 6154
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song165",
+        "DISPLAY_TITLE": "Normal 3s song165",
+        "DURATION": 3730
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song166",
+        "DISPLAY_TITLE": "Normal 9s song166",
+        "DURATION": 9677
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song167",
+        "DISPLAY_TITLE": "Normal 9s song167",
+        "DURATION": 9972
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song168",
+        "DISPLAY_TITLE": "Normal 6s song168",
+        "DURATION": 6138
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song169",
+        "DISPLAY_TITLE": "Normal 9s song169",
+        "DURATION": 9330
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song170",
+        "DISPLAY_TITLE": "Normal 9s song170",
+        "DURATION": 9360
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song171",
+        "DISPLAY_TITLE": "Normal 1s song171",
+        "DURATION": 1439
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song172",
+        "DISPLAY_TITLE": "Normal 5s song172",
+        "DURATION": 5831
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song173",
+        "DISPLAY_TITLE": "Normal 1s song173",
+        "DURATION": 1572
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song174",
+        "DISPLAY_TITLE": "Normal 8s song174",
+        "DURATION": 8160
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 1s song175",
+        "DISPLAY_TITLE": "Normal 1s song175",
+        "DURATION": 1110
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song176",
+        "DISPLAY_TITLE": "Normal 7s song176",
+        "DURATION": 7916
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song177",
+        "DISPLAY_TITLE": "Normal 5s song177",
+        "DURATION": 5409
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song178",
+        "DISPLAY_TITLE": "Normal 9s song178",
+        "DURATION": 9773
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song179",
+        "DISPLAY_TITLE": "Normal 5s song179",
+        "DURATION": 5530
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 7s song180",
+        "DISPLAY_TITLE": "Normal 7s song180",
+        "DURATION": 7317
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song181",
+        "DISPLAY_TITLE": "Normal 6s song181",
+        "DURATION": 6614
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song182",
+        "DISPLAY_TITLE": "Normal 4s song182",
+        "DURATION": 4503
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song183",
+        "DISPLAY_TITLE": "Normal 9s song183",
+        "DURATION": 9234
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song184",
+        "DISPLAY_TITLE": "Normal 3s song184",
+        "DURATION": 3411
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 3s song185",
+        "DISPLAY_TITLE": "Normal 3s song185",
+        "DURATION": 3040
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 9s song186",
+        "DISPLAY_TITLE": "Normal 9s song186",
+        "DURATION": 9605
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song187",
+        "DISPLAY_TITLE": "Normal 2s song187",
+        "DURATION": 2432
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song188",
+        "DISPLAY_TITLE": "Normal 5s song188",
+        "DURATION": 5484
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song189",
+        "DISPLAY_TITLE": "Normal 2s song189",
+        "DURATION": 2506
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song190",
+        "DISPLAY_TITLE": "Normal 5s song190",
+        "DURATION": 5558
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song191",
+        "DISPLAY_TITLE": "Normal 5s song191",
+        "DURATION": 5374
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song192",
+        "DISPLAY_TITLE": "Normal 6s song192",
+        "DURATION": 6146
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song193",
+        "DISPLAY_TITLE": "Normal 5s song193",
+        "DURATION": 5933
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 5s song194",
+        "DISPLAY_TITLE": "Normal 5s song194",
+        "DURATION": 5250
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song195",
+        "DISPLAY_TITLE": "Normal 6s song195",
+        "DURATION": 6438
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song196",
+        "DISPLAY_TITLE": "Normal 2s song196",
+        "DURATION": 2766
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 2s song197",
+        "DISPLAY_TITLE": "Normal 2s song197",
+        "DURATION": 2966
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 8s song198",
+        "DISPLAY_TITLE": "Normal 8s song198",
+        "DURATION": 8475
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 4s song199",
+        "DISPLAY_TITLE": "Normal 4s song199",
+        "DURATION": 4945
+      }
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "hundreds_songs normal 6s song200",
+        "DISPLAY_TITLE": "Normal 6s song200",
+        "DURATION": 6697
+      }
+    }
+  ]
+}
diff --git a/TestMediaApp/assets/media_items/toggles.json b/TestMediaApp/assets/media_items/toggles.json
new file mode 100644
index 0000000..c12be00
--- /dev/null
+++ b/TestMediaApp/assets/media_items/toggles.json
@@ -0,0 +1,66 @@
+{
+  "FLAGS": "browsable",
+
+  "METADATA": {
+    "MEDIA_ID": "toggles",
+    "DISPLAY_TITLE": "Toggles"
+  },
+
+  "CHILDREN": [
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "toggles Toggle Empty tab",
+        "DISPLAY_TITLE": "Toggle Empty tab on play",
+        "DURATION": 3000000
+      },
+      "EVENTS": [
+        { "STATE": "PLAYING", "TOGGLE_ITEM": "only_nodes empty node 1" }
+      ]
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "toggles Toggle node toggles",
+        "DISPLAY_TITLE": "Toggle Node toggles node on play",
+        "DURATION": 3000000
+      },
+      "EVENTS": [
+        { "STATE": "PLAYING", "TOGGLE_ITEM": "advanced toggles" }
+      ]
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "toggles Toggle Album Art",
+        "DISPLAY_TITLE": "Toggle Album Art on play",
+        "DURATION": 3000000
+      },
+      "EVENTS": [
+        { "STATE": "PLAYING", "TOGGLE_ITEM": "advanced art nodes" }
+      ]
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "toggles Toggle Nature 64",
+        "DISPLAY_TITLE": "Toggle Nature 64 on play",
+        "DURATION": 3000000
+      },
+      "EVENTS": [
+        { "STATE": "PLAYING", "TOGGLE_ITEM": "album_art/art_nodes nature 64" }
+      ]
+    },
+    {
+      "FLAGS": "playable",
+      "METADATA": {
+        "MEDIA_ID": "toggles Toggle Advanced tab",
+        "DISPLAY_TITLE": "Toggle Advanced tab on play",
+        "DURATION": 3000000
+      },
+      "EVENTS": [
+        { "STATE": "PLAYING", "TOGGLE_ITEM": "only_nodes advanced" }
+      ]
+    }
+  ]
+}
\ 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 61b3a31..c187448 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java
@@ -33,7 +33,6 @@
 import androidx.media.MediaBrowserServiceCompat;
 
 import com.android.car.media.testmediaapp.loader.TmaLoader;
-import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs;
 import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaAccountType;
 import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType;
 import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaReplyDelay;
@@ -41,6 +40,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -148,7 +148,7 @@
                             getResources().getString(R.string.no_account),
                             getResources().getString(R.string.select_account),
                             TmaMediaEvent.ResolutionIntent.PREFS,
-                            TmaMediaEvent.Action.NONE, 0, null));
+                            TmaMediaEvent.Action.NONE, 0, null, null));
         } else {
             // TODO don't reset error in all cases...
             PlaybackStateCompat.Builder playbackState = new PlaybackStateCompat.Builder();
@@ -193,6 +193,10 @@
         getMediaItemsWithDelay(ROOT_ID, result, query);
     }
 
+    private TmaMediaItem getRoot() {
+        return mLibrary.getRoot(mPrefs.mRootNodeType.getValue());
+    }
+
     private void getMediaItemsWithDelay(@NonNull String parentId,
             @NonNull Result<List<MediaItem>> result, @Nullable String filter) {
         // TODO: allow per item override of the delay ?
@@ -202,7 +206,7 @@
             if (TmaAccountType.NONE.equals(mPrefs.mAccountType.getValue())) {
                 node = null;
             } else if (ROOT_ID.equals(parentId)) {
-                node = mLibrary.getRoot(mPrefs.mRootNodeType.getValue());
+                node = getRoot();
             } else {
                 node = mLibrary.getMediaItemById(parentId);
             }
@@ -224,7 +228,11 @@
                     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());
+                        TmaMediaItem child = children.get(childIndex);
+                        if (child.mIsHidden) {
+                            continue;
+                        }
+                        items.add(child.toMediaItem());
                     }
                     result.sendResult(items);
 
@@ -250,6 +258,9 @@
         }
 
         for (TmaMediaItem child : node.getChildren()) {
+            if (child.mIsHidden) {
+                continue;
+            }
             MediaItem item = child.toMediaItem();
             CharSequence title = item.getDescription().getTitle();
             if (title != null) {
@@ -265,6 +276,20 @@
         }
     }
 
+    void toggleItem(@Nullable TmaMediaItem item) {
+        if (item == null) {
+            return;
+        }
+        item.mIsHidden = !item.mIsHidden;
+        if (item.getParent() != null) {
+            String parentId = item.getParent().getMediaId();
+            if (Objects.equals(parentId, getRoot().getMediaId())) {
+                parentId = ROOT_ID;
+            }
+            notifyChildrenChanged(parentId);
+        }
+    }
+
     private class UpdateNodeTask implements Runnable {
 
         private final String mNodeId;
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java
index 491f940..8fe30ef 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaEvent.java
@@ -53,7 +53,7 @@
 
     public static final TmaMediaEvent INSTANT_PLAYBACK =
             new TmaMediaEvent(EventState.PLAYING, StateErrorCode.UNKNOWN_ERROR, null, null,
-                    ResolutionIntent.NONE, Action.NONE, 0, null);
+                    ResolutionIntent.NONE, Action.NONE, 0, null, null);
 
     /** The name of each entry is the value used in the json file. */
     public enum EventState {
@@ -120,10 +120,11 @@
     /** How long to wait before sending the event to the app. */
     final int mPostDelayMs;
     private final String mExceptionClass;
+    final String mMediaItemIdToToggle;
 
     public TmaMediaEvent(EventState state, StateErrorCode errorCode, String errorMessage,
             String actionLabel, ResolutionIntent resolutionIntent, Action action, int postDelayMs,
-            String exceptionClass) {
+            String exceptionClass, String mediaItemIdToToggle) {
         mState = state;
         mErrorCode = errorCode;
         mErrorMessage = errorMessage;
@@ -132,6 +133,7 @@
         mAction = action;
         mPostDelayMs = postDelayMs;
         mExceptionClass = exceptionClass;
+        mMediaItemIdToToggle = mediaItemIdToToggle;
     }
 
     boolean premiumAccountRequired() {
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaItem.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaItem.java
index e2cb533..a759eb4 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaItem.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaMediaItem.java
@@ -78,9 +78,9 @@
 
 
     /** Internally modifiable list (for includes). */
-    private final List<TmaMediaItem> mChildren;
-    /** Read only list. */
-    private final List<TmaMediaItem> mPlayableChildren;
+    private final List<TmaMediaItem> mChildren = new ArrayList<>();
+    /** Internally modifiable list (for includes). */
+    private final List<TmaMediaItem> mPlayableChildren = new ArrayList<>();
     /** Read only list. */
     final List<TmaCustomAction> mCustomActions;
     /** Read only list. Events triggered when starting the playback. */
@@ -91,6 +91,7 @@
     private @Nullable TmaMediaItem mParent;
     int mHearts;
     int mRevealCounter;
+    boolean mIsHidden = false;
 
 
     public TmaMediaItem(int flags, ContentStyle playableStyle, ContentStyle browsableStyle,
@@ -103,17 +104,9 @@
         mMediaMetadata = metadata;
         mSelfUpdateMs = selfUpdateMs;
         mCustomActions = Collections.unmodifiableList(customActions);
-        mChildren = children;
         mMediaEvents = Collections.unmodifiableList(mediaEvents);
         mInclude = include;
-        List<TmaMediaItem> playableChildren = new ArrayList<>(children.size());
-        for (TmaMediaItem child: mChildren) {
-            child.setParent(this);
-            if ((child.mFlags & FLAG_PLAYABLE) != 0) {
-                playableChildren.add(child);
-            }
-        }
-        mPlayableChildren = Collections.unmodifiableList(playableChildren);
+        setChildren(children);
     }
 
     private void setParent(@Nullable TmaMediaItem parent) {
@@ -171,6 +164,16 @@
     void setChildren(List<TmaMediaItem> children) {
         mChildren.clear();
         mChildren.addAll(children);
+
+        List<TmaMediaItem> playableChildren = new ArrayList<>(children.size());
+        for (TmaMediaItem child: mChildren) {
+            child.setParent(this);
+            if ((child.mFlags & FLAG_PLAYABLE) != 0) {
+                playableChildren.add(child);
+            }
+        }
+        mPlayableChildren.clear();
+        mPlayableChildren.addAll(playableChildren);
     }
 
     void updateSessionMetadata(MediaSessionCompat session) {
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
index 65cc787..43cf3af 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
@@ -32,7 +32,6 @@
 import androidx.annotation.Nullable;
 
 import android.app.PendingIntent;
-import android.content.Context;
 import android.content.Intent;
 import android.media.AudioFocusRequest;
 import android.media.AudioManager;
@@ -40,6 +39,7 @@
 import android.os.Handler;
 import android.support.v4.media.session.MediaSessionCompat;
 import android.support.v4.media.session.PlaybackStateCompat;
+import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
 
@@ -59,7 +59,7 @@
 
     private static final String TAG = "TmaPlayer";
 
-    private final Context mContext;
+    private final TmaBrowser mBrowser;
     private final TmaPrefs mPrefs;
     private final TmaLibrary mLibrary;
     private final AudioManager mAudioManager;
@@ -78,10 +78,10 @@
     private TmaMediaItem mActiveItem;
     private int mNextEventIndex = -1;
 
-    TmaPlayer(Context context, TmaLibrary library, AudioManager audioManager, Handler handler,
+    TmaPlayer(TmaBrowser browser, TmaLibrary library, AudioManager audioManager, Handler handler,
             MediaSessionCompat session) {
-        mContext = context;
-        mPrefs = TmaPrefs.getInstance(mContext);
+        mBrowser = browser;
+        mPrefs = TmaPrefs.getInstance(mBrowser);
         mLibrary = library;
         mAudioManager = audioManager;
         mHandler = handler;
@@ -101,9 +101,9 @@
                 .setActions(addActions(ACTION_PAUSE));
         if (ResolutionIntent.PREFS.equals(event.mResolutionIntent)) {
             Intent prefsIntent = new Intent();
-            prefsIntent.setClass(mContext, TmaPrefsActivity.class);
+            prefsIntent.setClass(mBrowser, TmaPrefsActivity.class);
             prefsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, prefsIntent, 0);
+            PendingIntent pendingIntent = PendingIntent.getActivity(mBrowser, 0, prefsIntent, 0);
 
             Bundle extras = new Bundle();
             extras.putString(MediaKeys.ERROR_RESOLUTION_ACTION_LABEL, event.mActionLabel);
@@ -119,7 +119,7 @@
     private void setActiveItemState(PlaybackStateCompat.Builder state) {
         if (mActiveItem != null) {
             for (TmaCustomAction action : mActiveItem.mCustomActions) {
-                String name = mContext.getResources().getString(action.mNameId);
+                String name = mBrowser.getResources().getString(action.mNameId);
                 state.addCustomAction(action.mId, name, action.mIcon);
             }
             state.setActiveQueueItemId(mActiveItem.getQueueId());
@@ -249,14 +249,14 @@
                 mActiveItem.mHearts--;
                 toast("" + mActiveItem.mHearts);
             } else if (TmaCustomAction.REQUEST_LOCATION.mId.equals(action)) {
-                mContext.startService(new Intent(mContext, TmaForegroundService.class));
+                mBrowser.startService(new Intent(mBrowser, TmaForegroundService.class));
             }
         }
     }
 
     /** Note: this is for quick feedback implementation, media apps should avoid toasts... */
     private void toast(String message) {
-        Toast.makeText(mContext, message, Toast.LENGTH_LONG).show();
+        Toast.makeText(mBrowser, message, Toast.LENGTH_LONG).show();
     }
 
     private boolean audioFocusGranted() {
@@ -268,6 +268,9 @@
 
         TmaMediaEvent event = mActiveItem.mMediaEvents.get(mNextEventIndex);
         event.maybeThrow();
+        if (!TextUtils.isEmpty(event.mMediaItemIdToToggle)) {
+            mBrowser.toggleItem(mLibrary.getMediaItemById(event.mMediaItemIdToToggle));
+        }
 
         if (event.premiumAccountRequired() &&
                 TmaAccountType.PAID.equals(mPrefs.mAccountType.getValue())) {
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java b/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java
index 2222afa..4926146 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/loader/TmaMediaEventReader.java
@@ -21,8 +21,6 @@
 import static com.android.car.media.testmediaapp.loader.TmaLoaderUtils.getInt;
 import static com.android.car.media.testmediaapp.loader.TmaLoaderUtils.getString;
 
-import android.util.Log;
-
 import androidx.annotation.Nullable;
 
 import com.android.car.media.testmediaapp.TmaMediaEvent;
@@ -57,7 +55,8 @@
         ACTION,
         /** How long to wait before sending the event to the app. */
         POST_DELAY_MS,
-        THROW_EXCEPTION
+        THROW_EXCEPTION,
+        TOGGLE_ITEM,
     }
 
     private static TmaMediaEventReader sInstance;
@@ -92,6 +91,7 @@
                 getEnum(json, Keys.INTENT, mResolutionIntents, ResolutionIntent.NONE),
                 getEnum(json, Keys.ACTION, mActions, Action.NONE),
                 getInt(json, Keys.POST_DELAY_MS),
-                getString(json, Keys.THROW_EXCEPTION));
+                getString(json, Keys.THROW_EXCEPTION),
+                getString(json, Keys.TOGGLE_ITEM));
     }
 }