Skip to content
Snippets Groups Projects
Commit 97fdd2b5 authored by Iván Budnik's avatar Iván Budnik Committed by Android (Google) Code Review
Browse files

Merge "Remove spurious calls to the framework when setting selected device" into main

parents 10d37891 fec4a192
No related branches found
No related tags found
No related merge requests found
......@@ -514,17 +514,20 @@ public abstract class InfoMediaManager {
// MediaRoute2Info.getType was made public on API 34, but exists since API 30.
@SuppressWarnings("NewApi")
private synchronized void buildAvailableRoutes() {
for (MediaRoute2Info route : getAvailableRoutes()) {
RoutingSessionInfo activeSession = getActiveRoutingSession();
for (MediaRoute2Info route : getAvailableRoutes(activeSession)) {
if (DEBUG) {
Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : "
+ route.getVolume() + ", type : " + route.getType());
}
addMediaDevice(route);
addMediaDevice(route, activeSession);
}
}
private synchronized List<MediaRoute2Info> getAvailableRoutes() {
private synchronized List<MediaRoute2Info> getAvailableRoutes(
RoutingSessionInfo activeSession) {
List<MediaRoute2Info> availableRoutes = new ArrayList<>();
RoutingSessionInfo activeSession = getActiveRoutingSession();
List<MediaRoute2Info> selectedRoutes = getSelectedRoutes(activeSession);
availableRoutes.addAll(selectedRoutes);
......@@ -562,7 +565,7 @@ public abstract class InfoMediaManager {
// MediaRoute2Info.getType was made public on API 34, but exists since API 30.
@SuppressWarnings("NewApi")
@VisibleForTesting
void addMediaDevice(MediaRoute2Info route) {
void addMediaDevice(MediaRoute2Info route, RoutingSessionInfo activeSession) {
final int deviceType = route.getType();
MediaDevice mediaDevice = null;
switch (deviceType) {
......@@ -627,14 +630,13 @@ public abstract class InfoMediaManager {
break;
}
if (mediaDevice != null
&& getActiveRoutingSession().getSelectedRoutes().contains(route.getId())) {
mediaDevice.setState(STATE_SELECTED);
if (mCurrentConnectedDevice == null) {
mCurrentConnectedDevice = mediaDevice;
}
}
if (mediaDevice != null) {
if (activeSession.getSelectedRoutes().contains(route.getId())) {
mediaDevice.setState(STATE_SELECTED);
if (mCurrentConnectedDevice == null) {
mCurrentConnectedDevice = mediaDevice;
}
}
mMediaDevices.add(mediaDevice);
}
}
......
......@@ -86,6 +86,30 @@ public class InfoMediaManagerTest {
private static final String TEST_DUPLICATED_ID_2 = "test_duplicated_id_2";
private static final String TEST_DUPLICATED_ID_3 = "test_duplicated_id_3";
private static final String TEST_SYSTEM_ROUTE_ID = "TEST_SYSTEM_ROUTE_ID";
private static final String TEST_BLUETOOTH_ROUTE_ID = "TEST_BT_ROUTE_ID";
private static final RoutingSessionInfo TEST_SYSTEM_ROUTING_SESSION =
new RoutingSessionInfo.Builder("FAKE_SYSTEM_ROUTING_SESSION_ID", TEST_PACKAGE_NAME)
.addSelectedRoute(TEST_SYSTEM_ROUTE_ID)
.addTransferableRoute(TEST_BLUETOOTH_ROUTE_ID)
.setSystemSession(true)
.build();
private static final MediaRoute2Info TEST_SELECTED_SYSTEM_ROUTE =
new MediaRoute2Info.Builder(TEST_SYSTEM_ROUTE_ID, "SELECTED_SYSTEM_ROUTE")
.setSystemRoute(true)
.addFeature(MediaRoute2Info.FEATURE_LIVE_AUDIO)
.build();
private static final MediaRoute2Info TEST_BLUETOOTH_ROUTE =
new MediaRoute2Info.Builder(TEST_BLUETOOTH_ROUTE_ID, "BLUETOOTH_ROUTE")
.setSystemRoute(true)
.addFeature(MediaRoute2Info.FEATURE_LIVE_AUDIO)
.setType(TYPE_BLUETOOTH_A2DP)
.setAddress("00:00:00:00:00:00")
.build();
@Mock
private MediaRouter2Manager mRouterManager;
@Mock
......@@ -795,19 +819,19 @@ public class InfoMediaManagerTest {
when(route2Info.getType()).thenReturn(TYPE_REMOTE_SPEAKER);
when(route2Info.getId()).thenReturn(TEST_ID);
mInfoMediaManager.addMediaDevice(route2Info);
mInfoMediaManager.addMediaDevice(route2Info, TEST_SYSTEM_ROUTING_SESSION);
assertThat(mInfoMediaManager.mMediaDevices.get(0) instanceof InfoMediaDevice).isTrue();
when(route2Info.getType()).thenReturn(TYPE_USB_DEVICE);
when(route2Info.getId()).thenReturn(TEST_ID);
mInfoMediaManager.mMediaDevices.clear();
mInfoMediaManager.addMediaDevice(route2Info);
mInfoMediaManager.addMediaDevice(route2Info, TEST_SYSTEM_ROUTING_SESSION);
assertThat(mInfoMediaManager.mMediaDevices.get(0) instanceof PhoneMediaDevice).isTrue();
when(route2Info.getType()).thenReturn(TYPE_WIRED_HEADSET);
when(route2Info.getId()).thenReturn(TEST_ID);
mInfoMediaManager.mMediaDevices.clear();
mInfoMediaManager.addMediaDevice(route2Info);
mInfoMediaManager.addMediaDevice(route2Info, TEST_SYSTEM_ROUTING_SESSION);
assertThat(mInfoMediaManager.mMediaDevices.get(0) instanceof PhoneMediaDevice).isTrue();
when(route2Info.getType()).thenReturn(TYPE_BLUETOOTH_A2DP);
......@@ -818,12 +842,12 @@ public class InfoMediaManagerTest {
when(cachedBluetoothDeviceManager.findDevice(any(BluetoothDevice.class)))
.thenReturn(cachedDevice);
mInfoMediaManager.mMediaDevices.clear();
mInfoMediaManager.addMediaDevice(route2Info);
mInfoMediaManager.addMediaDevice(route2Info, TEST_SYSTEM_ROUTING_SESSION);
assertThat(mInfoMediaManager.mMediaDevices.get(0) instanceof BluetoothMediaDevice).isTrue();
when(route2Info.getType()).thenReturn(TYPE_BUILTIN_SPEAKER);
mInfoMediaManager.mMediaDevices.clear();
mInfoMediaManager.addMediaDevice(route2Info);
mInfoMediaManager.addMediaDevice(route2Info, TEST_SYSTEM_ROUTING_SESSION);
assertThat(mInfoMediaManager.mMediaDevices.get(0) instanceof PhoneMediaDevice).isTrue();
}
......@@ -841,26 +865,27 @@ public class InfoMediaManagerTest {
.thenReturn(null);
mInfoMediaManager.mMediaDevices.clear();
mInfoMediaManager.addMediaDevice(route2Info);
mInfoMediaManager.addMediaDevice(route2Info, TEST_SYSTEM_ROUTING_SESSION);
assertThat(mInfoMediaManager.mMediaDevices.size()).isEqualTo(0);
}
@Test
public void addMediaDevice_deviceIncludedInSelectedDevices_shouldSetAsCurrentConnected() {
final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
final CachedBluetoothDeviceManager cachedBluetoothDeviceManager =
mock(CachedBluetoothDeviceManager.class);
final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
final RoutingSessionInfo sessionInfo = mock(RoutingSessionInfo.class);
routingSessionInfos.add(sessionInfo);
RoutingSessionInfo selectedBtSession =
new RoutingSessionInfo.Builder(TEST_SYSTEM_ROUTING_SESSION)
.clearSelectedRoutes()
.clearTransferableRoutes()
.addSelectedRoute(TEST_BLUETOOTH_ROUTE_ID)
.addTransferableRoute(TEST_SYSTEM_ROUTE_ID)
.build();
when(mRouterManager.getRoutingSessions(TEST_PACKAGE_NAME)).thenReturn(routingSessionInfos);
when(sessionInfo.getSelectedRoutes()).thenReturn(ImmutableList.of(TEST_ID));
when(route2Info.getType()).thenReturn(TYPE_BLUETOOTH_A2DP);
when(route2Info.getAddress()).thenReturn("00:00:00:00:00:00");
when(route2Info.getId()).thenReturn(TEST_ID);
when(mRouterManager.getRoutingSessions(TEST_PACKAGE_NAME))
.thenReturn(List.of(selectedBtSession));
when(mLocalBluetoothManager.getCachedDeviceManager())
.thenReturn(cachedBluetoothDeviceManager);
when(cachedBluetoothDeviceManager.findDevice(any(BluetoothDevice.class)))
......@@ -868,7 +893,7 @@ public class InfoMediaManagerTest {
mInfoMediaManager.mRouterManager = mRouterManager;
mInfoMediaManager.mMediaDevices.clear();
mInfoMediaManager.addMediaDevice(route2Info);
mInfoMediaManager.addMediaDevice(TEST_BLUETOOTH_ROUTE, selectedBtSession);
MediaDevice device = mInfoMediaManager.mMediaDevices.get(0);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment