Merge "Fix output switcher will show wrong active device" into rvc-dev am: 8911616d84

Change-Id: I37d76e1096a2e1e5cef17449ab962d375ecc1663
This commit is contained in:
TreeHugger Robot
2020-05-26 09:19:23 +00:00
committed by Automerger Merge Worker
4 changed files with 53 additions and 9 deletions

View File

@@ -56,7 +56,7 @@ import java.util.concurrent.Executors;
public class InfoMediaManager extends MediaManager { public class InfoMediaManager extends MediaManager {
private static final String TAG = "InfoMediaManager"; private static final String TAG = "InfoMediaManager";
private static final boolean DEBUG = false; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);;
@VisibleForTesting @VisibleForTesting
final RouterManagerCallback mMediaRouterCallback = new RouterManagerCallback(); final RouterManagerCallback mMediaRouterCallback = new RouterManagerCallback();
@VisibleForTesting @VisibleForTesting
@@ -364,8 +364,8 @@ public class InfoMediaManager extends MediaManager {
private void buildAvailableRoutes() { private void buildAvailableRoutes() {
for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) { for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : "
+ ", type : " + route.getType()); + route.getVolume() + ", type : " + route.getType());
} }
addMediaDevice(route); addMediaDevice(route);
} }

View File

@@ -394,7 +394,9 @@ public class LocalMediaManager implements BluetoothCallback {
return mPackageName; return mPackageName;
} }
private MediaDevice updateCurrentConnectedDevice() { @VisibleForTesting
MediaDevice updateCurrentConnectedDevice() {
MediaDevice connectedDevice = null;
synchronized (mMediaDevicesLock) { synchronized (mMediaDevicesLock) {
for (MediaDevice device : mMediaDevices) { for (MediaDevice device : mMediaDevices) {
if (device instanceof BluetoothMediaDevice) { if (device instanceof BluetoothMediaDevice) {
@@ -402,12 +404,12 @@ public class LocalMediaManager implements BluetoothCallback {
return device; return device;
} }
} else if (device instanceof PhoneMediaDevice) { } else if (device instanceof PhoneMediaDevice) {
return device; connectedDevice = device;
} }
} }
} }
Log.w(TAG, "updateCurrentConnectedDevice() can't found current connected device");
return null; return connectedDevice;
} }
private boolean isActiveDevice(CachedBluetoothDevice device) { private boolean isActiveDevice(CachedBluetoothDevice device) {

View File

@@ -590,7 +590,7 @@ public class InfoMediaManagerTest {
final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID); final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
assertThat(mediaDevice).isNull(); assertThat(mediaDevice).isNull();
mInfoMediaManager.mMediaRouterCallback.onTransferred(null, null); mInfoMediaManager.mMediaRouterCallback.onTransferred(sessionInfo, sessionInfo);
final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0); final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
assertThat(infoDevice.getId()).isEqualTo(TEST_ID); assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
@@ -602,6 +602,7 @@ public class InfoMediaManagerTest {
@Test @Test
public void onTransferred_buildAllRoutes_shouldAddMediaDevice() { public void onTransferred_buildAllRoutes_shouldAddMediaDevice() {
final MediaRoute2Info info = mock(MediaRoute2Info.class); final MediaRoute2Info info = mock(MediaRoute2Info.class);
final RoutingSessionInfo sessionInfo = mock(RoutingSessionInfo.class);
mInfoMediaManager.registerCallback(mCallback); mInfoMediaManager.registerCallback(mCallback);
when(info.getId()).thenReturn(TEST_ID); when(info.getId()).thenReturn(TEST_ID);
@@ -616,7 +617,7 @@ public class InfoMediaManagerTest {
assertThat(mediaDevice).isNull(); assertThat(mediaDevice).isNull();
mInfoMediaManager.mPackageName = ""; mInfoMediaManager.mPackageName = "";
mInfoMediaManager.mMediaRouterCallback.onTransferred(null, null); mInfoMediaManager.mMediaRouterCallback.onTransferred(sessionInfo, sessionInfo);
final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0); final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
assertThat(infoDevice.getId()).isEqualTo(TEST_ID); assertThat(infoDevice.getId()).isEqualTo(TEST_ID);

View File

@@ -31,6 +31,7 @@ import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context; import android.content.Context;
import android.media.MediaRoute2Info; import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager; import android.media.MediaRouter2Manager;
@@ -725,4 +726,44 @@ public class LocalMediaManagerTest {
verify(mInfoMediaManager).adjustSessionVolume(info, 10); verify(mInfoMediaManager).adjustSessionVolume(info, 10);
} }
@Test
public void updateCurrentConnectedDevice_bluetoothDeviceIsActive_returnBluetoothDevice() {
final BluetoothMediaDevice device1 = mock(BluetoothMediaDevice.class);
final BluetoothMediaDevice device2 = mock(BluetoothMediaDevice.class);
final PhoneMediaDevice phoneDevice = mock(PhoneMediaDevice.class);
final CachedBluetoothDevice cachedDevice1 = mock(CachedBluetoothDevice.class);
final CachedBluetoothDevice cachedDevice2 = mock(CachedBluetoothDevice.class);
when(device1.getCachedDevice()).thenReturn(cachedDevice1);
when(device2.getCachedDevice()).thenReturn(cachedDevice2);
when(cachedDevice1.isActiveDevice(BluetoothProfile.A2DP)).thenReturn(false);
when(cachedDevice2.isActiveDevice(BluetoothProfile.A2DP)).thenReturn(true);
mLocalMediaManager.mMediaDevices.add(device1);
mLocalMediaManager.mMediaDevices.add(phoneDevice);
mLocalMediaManager.mMediaDevices.add(device2);
assertThat(mLocalMediaManager.updateCurrentConnectedDevice()).isEqualTo(device2);
}
@Test
public void updateCurrentConnectedDevice_phoneDeviceIsActive_returnPhoneDevice() {
final BluetoothMediaDevice device1 = mock(BluetoothMediaDevice.class);
final BluetoothMediaDevice device2 = mock(BluetoothMediaDevice.class);
final PhoneMediaDevice phoneDevice = mock(PhoneMediaDevice.class);
final CachedBluetoothDevice cachedDevice1 = mock(CachedBluetoothDevice.class);
final CachedBluetoothDevice cachedDevice2 = mock(CachedBluetoothDevice.class);
when(device1.getCachedDevice()).thenReturn(cachedDevice1);
when(device2.getCachedDevice()).thenReturn(cachedDevice2);
when(cachedDevice1.isActiveDevice(BluetoothProfile.A2DP)).thenReturn(false);
when(cachedDevice2.isActiveDevice(BluetoothProfile.A2DP)).thenReturn(false);
mLocalMediaManager.mMediaDevices.add(device1);
mLocalMediaManager.mMediaDevices.add(phoneDevice);
mLocalMediaManager.mMediaDevices.add(device2);
assertThat(mLocalMediaManager.updateCurrentConnectedDevice()).isEqualTo(phoneDevice);
}
} }