From d02c31e693b95c918c9007d75325146886af1f85 Mon Sep 17 00:00:00 2001 From: hughchen Date: Fri, 24 Apr 2020 15:52:21 +0800 Subject: [PATCH] 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 --- .../media/MediaOutputIndicatorSlice.java | 7 +++-- .../media/MediaOutputIndicatorSliceTest.java | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/media/MediaOutputIndicatorSlice.java b/src/com/android/settings/media/MediaOutputIndicatorSlice.java index 63dd2dee8d8..1a535042b6b 100644 --- a/src/com/android/settings/media/MediaOutputIndicatorSlice.java +++ b/src/com/android/settings/media/MediaOutputIndicatorSlice.java @@ -120,14 +120,17 @@ public class MediaOutputIndicatorSlice implements CustomSliceable { 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 1fc39105804..855e2df5d74 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 class MediaOutputIndicatorSliceTest { 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 @@ public class MediaOutputIndicatorSliceTest { 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 {