From 4f42ca1eac53f901143a4a0a29a17fa3ba94fa6c Mon Sep 17 00:00:00 2001 From: changbetty Date: Mon, 24 Oct 2022 10:29:07 +0000 Subject: [PATCH] [LE Audio] Remove the broadcast icon when the device does not support broadcast feature Bug: 254743785 Test: manual test Test: make RunSettingsRoboTests ROBOTEST_FILTER=MediaOutputIndicatorWorkerTest Test: make RunSettingsRoboTests ROBOTEST_FILTER=MediaVolumePreferenceControllerTest Change-Id: I02e429b3a306e2f9b0e2342118649208617c4944 --- .../media/MediaOutputIndicatorWorker.java | 7 ++++ .../MediaVolumePreferenceController.java | 2 +- .../media/MediaOutputIndicatorWorkerTest.java | 33 +++++++++++++++++-- .../MediaVolumePreferenceControllerTest.java | 13 ++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/media/MediaOutputIndicatorWorker.java b/src/com/android/settings/media/MediaOutputIndicatorWorker.java index 09e06723b86..bf1e06e4e0c 100644 --- a/src/com/android/settings/media/MediaOutputIndicatorWorker.java +++ b/src/com/android/settings/media/MediaOutputIndicatorWorker.java @@ -165,6 +165,13 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements return mPackageName; } + /** Check if this device supports LE Audio Broadcast feature */ + public boolean isBroadcastSupported() { + LocalBluetoothLeBroadcast broadcast = + mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile(); + return broadcast != null ? true : false; + } + public boolean isDeviceBroadcasting() { LocalBluetoothLeBroadcast broadcast = mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile(); diff --git a/src/com/android/settings/notification/MediaVolumePreferenceController.java b/src/com/android/settings/notification/MediaVolumePreferenceController.java index 2466b7747a3..0ddba089b7c 100644 --- a/src/com/android/settings/notification/MediaVolumePreferenceController.java +++ b/src/com/android/settings/notification/MediaVolumePreferenceController.java @@ -93,7 +93,7 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont @VisibleForTesting boolean isSupportEndItem() { - return isConnectedBLEDevice(); + return getWorker() != null && getWorker().isBroadcastSupported() && isConnectedBLEDevice(); } private boolean isConnectedBLEDevice() { diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java index 2339f4c1d71..cd06bae479d 100644 --- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java +++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java @@ -38,11 +38,14 @@ import android.media.session.MediaSessionManager; import android.media.session.PlaybackState; import android.net.Uri; +import com.android.settings.bluetooth.Utils; import com.android.settings.slices.ShadowSliceBackgroundWorker; import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; import com.android.settings.testutils.shadow.ShadowBluetoothUtils; import com.android.settingslib.bluetooth.BluetoothEventManager; +import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast; import com.android.settingslib.bluetooth.LocalBluetoothManager; +import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.settingslib.media.LocalMediaManager; import org.junit.Before; @@ -69,13 +72,17 @@ public class MediaOutputIndicatorWorkerTest { @Mock private BluetoothEventManager mBluetoothEventManager; @Mock - private LocalBluetoothManager mLocalBluetoothManager; + private LocalBluetoothManager mLocalBtManager; + @Mock + private LocalBluetoothProfileManager mLocalBluetoothProfileManager; @Mock private MediaSessionManager mMediaSessionManager; @Mock private MediaController mMediaController; @Mock private LocalMediaManager mLocalMediaManager; + @Mock + private LocalBluetoothLeBroadcast mLeAudioBroadcastProfile; private Context mContext; private MediaOutputIndicatorWorker mMediaOutputIndicatorWorker; @@ -84,14 +91,18 @@ public class MediaOutputIndicatorWorkerTest { private List mMediaControllers = new ArrayList<>(); private PlaybackState mPlaybackState; private MediaController.PlaybackInfo mPlaybackInfo; + private LocalBluetoothManager mLocalBluetoothManager; @Before public void setUp() { MockitoAnnotations.initMocks(this); mShadowApplication = ShadowApplication.getInstance(); mContext = spy(RuntimeEnvironment.application); - ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager; + ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBtManager; + mLocalBluetoothManager = Utils.getLocalBtManager(mContext); when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager); + when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager); + when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(null); mMediaOutputIndicatorWorker = new MediaOutputIndicatorWorker(mContext, URI); doReturn(mMediaSessionManager).when(mContext).getSystemService(MediaSessionManager.class); mMediaControllers.add(mMediaController); @@ -284,4 +295,22 @@ public class MediaOutputIndicatorWorkerTest { assertThat(mMediaOutputIndicatorWorker.getActiveLocalMediaController()).isNull(); } + + @Test + public void isBroadcastSupported_leAudioBroadcastProfileIsNull_returnFalse() { + mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager; + mMediaOutputIndicatorWorker.onSlicePinned(); + + assertThat(mMediaOutputIndicatorWorker.isBroadcastSupported()).isFalse(); + } + + @Test + public void isBroadcastSupported_leAudioBroadcastProfileNotNull_returnTrue() { + mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager; + mMediaOutputIndicatorWorker.onSlicePinned(); + when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()) + .thenReturn(mLeAudioBroadcastProfile); + + assertThat(mMediaOutputIndicatorWorker.isBroadcastSupported()).isTrue(); + } } diff --git a/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java index 56e83bb90ae..2d023d7142f 100644 --- a/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java @@ -113,13 +113,23 @@ public class MediaVolumePreferenceControllerTest { @Test public void isSupportEndItem_withBleDevice_returnsTrue() { + doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); assertThat(mController.isSupportEndItem()).isTrue(); } + @Test + public void isSupportEndItem_notSupportedBroadcast_returnsFalse() { + doReturn(false).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); + doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); + + assertThat(mController.isSupportEndItem()).isFalse(); + } + @Test public void isSupportEndItem_withNonBleDevice_returnsFalse() { + doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); assertThat(mController.isSupportEndItem()).isFalse(); @@ -127,6 +137,7 @@ public class MediaVolumePreferenceControllerTest { @Test public void getSliceEndItem_NotSupportEndItem_getsNullSliceAction() { + doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); final SliceAction sliceAction = mController.getSliceEndItem(mContext); @@ -136,6 +147,7 @@ public class MediaVolumePreferenceControllerTest { @Test public void getSliceEndItem_deviceIsBroadcasting_getsBroadcastIntent() { + doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(mMediaController).when(sMediaOutputIndicatorWorker) @@ -155,6 +167,7 @@ public class MediaVolumePreferenceControllerTest { final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class); when(((BluetoothMediaDevice) device).getCachedDevice()).thenReturn(cachedDevice); when(device.isBLEDevice()).thenReturn(true); + doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(device).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(mMediaController).when(sMediaOutputIndicatorWorker)