Hide the "play media to" option

This CL will hide the "play media to" option is there are no active
media session and media state is not playing.

Bug: 154457882
Test: manually test
Change-Id: If272a336f06b51e7a2e1605c8dc092b2ca134c25
diff --git a/src/com/android/settings/media/MediaOutputIndicatorSlice.java b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
index 63dd2de..1a53504 100644
--- a/src/com/android/settings/media/MediaOutputIndicatorSlice.java
+++ b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
@@ -120,14 +120,17 @@
         return mWorker;
     }
 
-    private boolean isVisible() {
+    @VisibleForTesting
+    boolean isVisible() {
         // To decide Slice's visibility.
         // Return true if
         // 1. AudioMode is not in on-going call
         // 2. worker is not null
         // 3. Available devices are more than 0
+        // 4. The local media session is active and the state is playing.
         return getWorker() != null
                 && !com.android.settingslib.Utils.isAudioModeOngoingCall(mContext)
-                && getWorker().getMediaDevices().size() > 0;
+                && getWorker().getMediaDevices().size() > 0
+                && getWorker().getActiveLocalMediaController() != null;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
index 1fc3910..855e2df 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
@@ -120,6 +120,8 @@
     public void getSlice_withConnectedDevice_verifyMetadata() {
         mDevices.add(mDevice1);
         when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
+                .getActiveLocalMediaController();
         doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
         mAudioManager.setMode(AudioManager.MODE_NORMAL);
 
@@ -215,6 +217,30 @@
                 MediaOutputSliceConstants.KEY_MEDIA_SESSION_TOKEN) == null).isTrue();
     }
 
+    @Test
+    public void isVisible_allConditionMatched_returnTrue() {
+        mAudioManager.setMode(AudioManager.MODE_NORMAL);
+        mDevices.add(mDevice1);
+
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
+                .getActiveLocalMediaController();
+
+        assertThat(mMediaOutputIndicatorSlice.isVisible()).isTrue();
+    }
+
+    @Test
+    public void isVisible_noActiveSession_returnFalse() {
+        mAudioManager.setMode(AudioManager.MODE_NORMAL);
+        mDevices.add(mDevice1);
+
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(null).when(sMediaOutputIndicatorWorker)
+                .getActiveLocalMediaController();
+
+        assertThat(mMediaOutputIndicatorSlice.isVisible()).isFalse();
+    }
+
     @Implements(SliceBackgroundWorker.class)
     public static class ShadowSliceBackgroundWorker {