Merge "[LE Audio] Remove the broadcast icon when the device does not support broadcast feature" into tm-qpr-dev
This commit is contained in:
@@ -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();
|
||||||
|
@@ -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() {
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user