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 {