From a5280fcc51bbf04d57e41df4caf91f05d2f10b1a Mon Sep 17 00:00:00 2001 From: Tim Peng Date: Thu, 14 May 2020 12:37:45 +0800 Subject: [PATCH] "Play null on" displayed under media volume -Reset package name when it is different with previous one -Add test case Bug: 156224161 Test: make -j50 RunSettingsRoboTests Change-Id: Ifcacc171d86017b702f51343036e0ebf0e0d1989 --- .../media/MediaOutputIndicatorWorker.java | 17 ++++--- .../media/MediaOutputIndicatorWorkerTest.java | 45 ++++++++++++++++--- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/media/MediaOutputIndicatorWorker.java b/src/com/android/settings/media/MediaOutputIndicatorWorker.java index e04f1dd28a1..0c6c434c9dd 100644 --- a/src/com/android/settings/media/MediaOutputIndicatorWorker.java +++ b/src/com/android/settings/media/MediaOutputIndicatorWorker.java @@ -81,14 +81,17 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements mContext.registerReceiver(mReceiver, intentFilter); mLocalBluetoothManager.getEventManager().registerCallback(this); - if (mLocalMediaManager == null) { - final MediaController controller = getActiveLocalMediaController(); - if (controller != null) { - mPackageName = controller.getPackageName(); - } - mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, null); + final MediaController controller = getActiveLocalMediaController(); + if (controller == null) { + mPackageName = null; + } else { + mPackageName = controller.getPackageName(); + } + if (mLocalMediaManager == null || !TextUtils.equals(mPackageName, + mLocalMediaManager.getPackageName())) { + mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, + null /* notification */); } - mLocalMediaManager.registerCallback(this); mLocalMediaManager.startScan(); } diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java index d96541d43b6..dd3a2367780 100644 --- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java +++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java @@ -62,6 +62,8 @@ import java.util.List; @Config(shadows = {ShadowBluetoothAdapter.class, ShadowBluetoothUtils.class}) public class MediaOutputIndicatorWorkerTest { private static final Uri URI = Uri.parse("content://com.android.settings.slices/test"); + private static final String TEST_PACKAGE_NAME = "com.android.test"; + private static final String TEST_PACKAGE_NAME2 = "com.android.test2"; @Mock private BluetoothEventManager mBluetoothEventManager; @@ -109,6 +111,33 @@ public class MediaOutputIndicatorWorkerTest { verify(mLocalMediaManager).startScan(); } + @Test + public void onSlicePinned_packageUpdated_checkPackageName() { + initPlayback(); + when(mMediaController.getPlaybackInfo()).thenReturn(mPlaybackInfo); + when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState); + when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME); + + mMediaOutputIndicatorWorker.onSlicePinned(); + assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).matches( + TEST_PACKAGE_NAME); + + when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME2); + mMediaOutputIndicatorWorker.onSlicePinned(); + + assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).matches( + TEST_PACKAGE_NAME2); + } + + @Test + public void onSlicePinned_noActiveController_noPackageName() { + mMediaControllers.clear(); + + mMediaOutputIndicatorWorker.onSlicePinned(); + + assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).isNull(); + } + @Test public void onSliceUnpinned_unRegisterCallback() { mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager; @@ -138,6 +167,16 @@ public class MediaOutputIndicatorWorkerTest { @Test public void getActiveLocalMediaController_localMediaPlaying_returnController() { + initPlayback(); + + when(mMediaController.getPlaybackInfo()).thenReturn(mPlaybackInfo); + when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState); + + assertThat(mMediaOutputIndicatorWorker.getActiveLocalMediaController()).isEqualTo( + mMediaController); + } + + private void initPlayback() { mPlaybackInfo = new MediaController.PlaybackInfo( MediaController.PlaybackInfo.PLAYBACK_TYPE_LOCAL, VolumeProvider.VOLUME_CONTROL_ABSOLUTE, @@ -148,12 +187,6 @@ public class MediaOutputIndicatorWorkerTest { mPlaybackState = new PlaybackState.Builder() .setState(PlaybackState.STATE_PLAYING, 0, 1) .build(); - - when(mMediaController.getPlaybackInfo()).thenReturn(mPlaybackInfo); - when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState); - - assertThat(mMediaOutputIndicatorWorker.getActiveLocalMediaController()).isEqualTo( - mMediaController); } @Test