Merge "[LE Audio] Remove the broadcast icon when the device does not support broadcast feature" into tm-qpr-dev

This commit is contained in:
Betty Chang
2022-10-25 08:49:56 +00:00
committed by Android (Google) Code Review
4 changed files with 52 additions and 3 deletions

View File

@@ -165,6 +165,13 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements
return mPackageName; 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() { public boolean isDeviceBroadcasting() {
LocalBluetoothLeBroadcast broadcast = LocalBluetoothLeBroadcast broadcast =
mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile(); mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile();

View File

@@ -93,7 +93,7 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
@VisibleForTesting @VisibleForTesting
boolean isSupportEndItem() { boolean isSupportEndItem() {
return isConnectedBLEDevice(); return getWorker() != null && getWorker().isBroadcastSupported() && isConnectedBLEDevice();
} }
private boolean isConnectedBLEDevice() { private boolean isConnectedBLEDevice() {

View File

@@ -38,11 +38,14 @@ import android.media.session.MediaSessionManager;
import android.media.session.PlaybackState; import android.media.session.PlaybackState;
import android.net.Uri; import android.net.Uri;
import com.android.settings.bluetooth.Utils;
import com.android.settings.slices.ShadowSliceBackgroundWorker; import com.android.settings.slices.ShadowSliceBackgroundWorker;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settings.testutils.shadow.ShadowBluetoothUtils; import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
import com.android.settingslib.bluetooth.BluetoothEventManager; import com.android.settingslib.bluetooth.BluetoothEventManager;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.LocalMediaManager;
import org.junit.Before; import org.junit.Before;
@@ -69,13 +72,17 @@ public class MediaOutputIndicatorWorkerTest {
@Mock @Mock
private BluetoothEventManager mBluetoothEventManager; private BluetoothEventManager mBluetoothEventManager;
@Mock @Mock
private LocalBluetoothManager mLocalBluetoothManager; private LocalBluetoothManager mLocalBtManager;
@Mock
private LocalBluetoothProfileManager mLocalBluetoothProfileManager;
@Mock @Mock
private MediaSessionManager mMediaSessionManager; private MediaSessionManager mMediaSessionManager;
@Mock @Mock
private MediaController mMediaController; private MediaController mMediaController;
@Mock @Mock
private LocalMediaManager mLocalMediaManager; private LocalMediaManager mLocalMediaManager;
@Mock
private LocalBluetoothLeBroadcast mLeAudioBroadcastProfile;
private Context mContext; private Context mContext;
private MediaOutputIndicatorWorker mMediaOutputIndicatorWorker; private MediaOutputIndicatorWorker mMediaOutputIndicatorWorker;
@@ -84,14 +91,18 @@ public class MediaOutputIndicatorWorkerTest {
private List<MediaController> mMediaControllers = new ArrayList<>(); private List<MediaController> mMediaControllers = new ArrayList<>();
private PlaybackState mPlaybackState; private PlaybackState mPlaybackState;
private MediaController.PlaybackInfo mPlaybackInfo; private MediaController.PlaybackInfo mPlaybackInfo;
private LocalBluetoothManager mLocalBluetoothManager;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mShadowApplication = ShadowApplication.getInstance(); mShadowApplication = ShadowApplication.getInstance();
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager; ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBtManager;
mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager); when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager);
when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(null);
mMediaOutputIndicatorWorker = new MediaOutputIndicatorWorker(mContext, URI); mMediaOutputIndicatorWorker = new MediaOutputIndicatorWorker(mContext, URI);
doReturn(mMediaSessionManager).when(mContext).getSystemService(MediaSessionManager.class); doReturn(mMediaSessionManager).when(mContext).getSystemService(MediaSessionManager.class);
mMediaControllers.add(mMediaController); mMediaControllers.add(mMediaController);
@@ -284,4 +295,22 @@ public class MediaOutputIndicatorWorkerTest {
assertThat(mMediaOutputIndicatorWorker.getActiveLocalMediaController()).isNull(); 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();
}
} }

View File

@@ -113,13 +113,23 @@ public class MediaVolumePreferenceControllerTest {
@Test @Test
public void isSupportEndItem_withBleDevice_returnsTrue() { public void isSupportEndItem_withBleDevice_returnsTrue() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
assertThat(mController.isSupportEndItem()).isTrue(); 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 @Test
public void isSupportEndItem_withNonBleDevice_returnsFalse() { public void isSupportEndItem_withNonBleDevice_returnsFalse() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
assertThat(mController.isSupportEndItem()).isFalse(); assertThat(mController.isSupportEndItem()).isFalse();
@@ -127,6 +137,7 @@ public class MediaVolumePreferenceControllerTest {
@Test @Test
public void getSliceEndItem_NotSupportEndItem_getsNullSliceAction() { public void getSliceEndItem_NotSupportEndItem_getsNullSliceAction() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
final SliceAction sliceAction = mController.getSliceEndItem(mContext); final SliceAction sliceAction = mController.getSliceEndItem(mContext);
@@ -136,6 +147,7 @@ public class MediaVolumePreferenceControllerTest {
@Test @Test
public void getSliceEndItem_deviceIsBroadcasting_getsBroadcastIntent() { public void getSliceEndItem_deviceIsBroadcasting_getsBroadcastIntent() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
doReturn(mMediaController).when(sMediaOutputIndicatorWorker) doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
@@ -155,6 +167,7 @@ public class MediaVolumePreferenceControllerTest {
final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class); final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
when(((BluetoothMediaDevice) device).getCachedDevice()).thenReturn(cachedDevice); when(((BluetoothMediaDevice) device).getCachedDevice()).thenReturn(cachedDevice);
when(device.isBLEDevice()).thenReturn(true); when(device.isBLEDevice()).thenReturn(true);
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(device).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(device).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
doReturn(mMediaController).when(sMediaOutputIndicatorWorker) doReturn(mMediaController).when(sMediaOutputIndicatorWorker)