Add switch playback mdeia test to catbox

Test: local
Bug: 267234551
Change-Id: I18bfd394ec3c92a9f8b136502095910ada1314e2
diff --git a/libraries/app-helpers/interfaces/auto/src/android/platform/helpers/IAutoMediaHelper.java b/libraries/app-helpers/interfaces/auto/src/android/platform/helpers/IAutoMediaHelper.java
index 7292f95..06abb33 100644
--- a/libraries/app-helpers/interfaces/auto/src/android/platform/helpers/IAutoMediaHelper.java
+++ b/libraries/app-helpers/interfaces/auto/src/android/platform/helpers/IAutoMediaHelper.java
@@ -184,4 +184,29 @@
      * <p>Scroll down on page.
      */
     boolean scrollDownOnePage();
+
+    /**
+     * Setup expectations: media test app is open.
+     *
+     * <p>This method is used to open Folder Menu with menuOptions and scroll into view the track.
+     * Example - openMenu->Folder->Mediafilename->trackName
+     * openMenuWith(Folder,mediafilename,trackName);
+     *
+     * @param menuOptions used to pass multiple level of menu options in one go.
+     */
+    void selectMediaTrack(String... menuOptions);
+
+    /**
+     * Setup expectations: Now Playing is open.
+     *
+     * <p>This method is used to select previous track.
+     */
+    void minimizeNowPlaying();
+
+    /**
+     * Setup expectations: media test app is open and Minimize control bar present.
+     *
+     * <p>This method is used to maximize the play back screen.
+     */
+    void maximizeNowPlaying();
 }
diff --git a/libraries/automotive-helpers/media-center-app-helper/src/android/platform/helpers/MediaCenterHelperImpl.java b/libraries/automotive-helpers/media-center-app-helper/src/android/platform/helpers/MediaCenterHelperImpl.java
index 7d2f21c..6dd8b6c 100644
--- a/libraries/automotive-helpers/media-center-app-helper/src/android/platform/helpers/MediaCenterHelperImpl.java
+++ b/libraries/automotive-helpers/media-center-app-helper/src/android/platform/helpers/MediaCenterHelperImpl.java
@@ -31,6 +31,7 @@
 import android.support.test.uiautomator.UiObjectNotFoundException;
 import android.support.test.uiautomator.UiScrollable;
 import android.support.test.uiautomator.UiSelector;
+import android.support.test.uiautomator.Until;
 
 import java.util.List;
 import java.util.regex.Pattern;
@@ -344,10 +345,9 @@
         }
     }
 
-    /**
-     * Minimize the Now Playing window.
-     */
-    private void minimizeNowPlaying() {
+    /** {@inheritDoc} */
+    @Override
+    public void minimizeNowPlaying() {
         UiObject2 trackNameText =
                 findUiObject(
                         getResourceFromConfig(
@@ -359,6 +359,20 @@
         }
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public void maximizeNowPlaying() {
+        UiObject2 trackNameText =
+                findUiObject(
+                        getResourceFromConfig(
+                                AutoConfigConstants.MEDIA_CENTER,
+                                AutoConfigConstants.MEDIA_CENTER_SCREEN,
+                                AutoConfigConstants.MINIMIZED_MEDIA_CONTROLS));
+        if (trackNameText != null) {
+            trackNameText.click();
+        }
+    }
+
     /**
      * Scrolls through the list in search of the provided menu
      *
@@ -485,4 +499,23 @@
         }
         return noLoginMsg.getText();
     }
+
+    /** {@inheritDoc} */
+    @Override
+    public void selectMediaTrack(String... menuOptions) {
+        for (String option : menuOptions) {
+            while (true) {
+                UiObject2 object =
+                        mDevice.wait(Until.findObject(By.text(option)), UI_RESPONSE_WAIT_MS);
+                if (object != null) {
+                    object.click();
+                    mDevice.waitForIdle();
+                    break;
+                }
+                if (!scrollDownOnePage()) {
+                    throw new UnknownUiException("Unable to find object " + option);
+                }
+            }
+        }
+    }
 }
diff --git a/tests/automotive/health/mediacenter/src/android/platform/scenario/mediacenter/SwitchPlayback.java b/tests/automotive/health/mediacenter/src/android/platform/scenario/mediacenter/SwitchPlayback.java
new file mode 100644
index 0000000..8a4713e
--- /dev/null
+++ b/tests/automotive/health/mediacenter/src/android/platform/scenario/mediacenter/SwitchPlayback.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.platform.test.scenario.mediacenter;
+
+import android.platform.helpers.HelperAccessor;
+import android.platform.helpers.IAutoMediaHelper;
+import android.platform.test.scenario.annotation.Scenario;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@Scenario
+@RunWith(JUnit4.class)
+public class SwitchPlayback {
+    static HelperAccessor<IAutoMediaHelper> sMediaCenterHelper =
+            new HelperAccessor<>(IAutoMediaHelper.class);
+
+    @Test
+    public void testSwitchPlayback() {
+        sMediaCenterHelper.get().minimizeNowPlaying();
+        sMediaCenterHelper.get().maximizeNowPlaying();
+    }
+}
diff --git a/tests/automotive/health/mediacenter/tests/src/android/platform/scenario/mediacenter/SwitchPlaybackMicrobenchmark.java b/tests/automotive/health/mediacenter/tests/src/android/platform/scenario/mediacenter/SwitchPlaybackMicrobenchmark.java
new file mode 100644
index 0000000..1ea38cf
--- /dev/null
+++ b/tests/automotive/health/mediacenter/tests/src/android/platform/scenario/mediacenter/SwitchPlaybackMicrobenchmark.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.platform.test.scenario.mediacenter;
+
+import android.platform.test.microbenchmark.Microbenchmark;
+import android.platform.test.option.StringOption;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.runner.RunWith;
+
+@RunWith(Microbenchmark.class)
+public class SwitchPlaybackMicrobenchmark extends SwitchPlayback {
+    public static final String SONG_NAME = "song-name";
+    private static final String DEFAULT_SONG_NAME = "A normal 1H song";
+
+    @ClassRule
+    public static StringOption mSongName =
+            new StringOption(SONG_NAME).setDefault(DEFAULT_SONG_NAME);
+
+    @BeforeClass
+    public static void openApp() {
+        sMediaCenterHelper.get().open();
+        sMediaCenterHelper.get().dismissInitialDialogs();
+        sMediaCenterHelper.get().selectMediaTrack(mSongName.get());
+    }
+
+    @AfterClass
+    public static void closeApp() {
+        sMediaCenterHelper.get().exit();
+    }
+}