Merge "Decouple MediaRouter2Manager from MediaDevice" into main

This commit is contained in:
Iván Budnik
2023-07-10 09:00:17 +00:00
committed by Android (Google) Code Review
14 changed files with 178 additions and 217 deletions

View File

@@ -23,7 +23,6 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RouteListingPreference;
import com.android.settingslib.R;
@@ -40,15 +39,21 @@ public class BluetoothMediaDevice extends MediaDevice {
private CachedBluetoothDevice mCachedDevice;
private final AudioManager mAudioManager;
BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName) {
this(context, device, routerManager, info, packageName, null);
BluetoothMediaDevice(
Context context,
CachedBluetoothDevice device,
MediaRoute2Info info,
String packageName) {
this(context, device, info, packageName, null);
}
BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName,
BluetoothMediaDevice(
Context context,
CachedBluetoothDevice device,
MediaRoute2Info info,
String packageName,
RouteListingPreference.Item item) {
super(context, routerManager, info, packageName, item);
super(context, info, packageName, item);
mCachedDevice = device;
mAudioManager = context.getSystemService(AudioManager.class);
initDeviceRecord();

View File

@@ -19,7 +19,6 @@ package com.android.settingslib.media;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RouteListingPreference;
import com.android.settingslib.R;
@@ -32,10 +31,12 @@ public class ComplexMediaDevice extends MediaDevice {
private final String mSummary = "";
ComplexMediaDevice(Context context, MediaRouter2Manager routerManager,
MediaRoute2Info info, String packageName,
ComplexMediaDevice(
Context context,
MediaRoute2Info info,
String packageName,
RouteListingPreference.Item item) {
super(context, routerManager, info, packageName, item);
super(context, info, packageName, item);
}
// MediaRoute2Info.getName was made public on API 34, but exists since API 30.

View File

@@ -29,7 +29,6 @@ import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RouteListingPreference;
import androidx.annotation.VisibleForTesting;
@@ -43,15 +42,17 @@ public class InfoMediaDevice extends MediaDevice {
private static final String TAG = "InfoMediaDevice";
InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
String packageName, RouteListingPreference.Item item) {
super(context, routerManager, info, packageName, item);
InfoMediaDevice(
Context context,
MediaRoute2Info info,
String packageName,
RouteListingPreference.Item item) {
super(context, info, packageName, item);
initDeviceRecord();
}
InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
String packageName) {
this(context, routerManager, info, packageName, null);
InfoMediaDevice(Context context, MediaRoute2Info info, String packageName) {
this(context, info, packageName, null);
}
@Override

View File

@@ -123,6 +123,8 @@ public abstract class InfoMediaManager extends MediaManager {
*/
protected abstract boolean connectDeviceWithoutPackageName(@NonNull MediaDevice device);
protected abstract void transferToRoute(@NonNull MediaRoute2Info route);
protected abstract void selectRoute(
@NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info);
@@ -143,6 +145,8 @@ public abstract class InfoMediaManager extends MediaManager {
protected abstract void setSessionVolume(@NonNull RoutingSessionInfo info, int volume);
protected abstract void setRouteVolume(@NonNull MediaRoute2Info route, int volume);
@Nullable
protected abstract RouteListingPreference getRouteListingPreference();
@@ -165,23 +169,6 @@ public abstract class InfoMediaManager extends MediaManager {
@NonNull
protected abstract List<MediaRoute2Info> getTransferableRoutes(@NonNull String packageName);
@NonNull
protected abstract ComplexMediaDevice createComplexMediaDevice(
MediaRoute2Info route, RouteListingPreference.Item routeListingPreferenceItem);
@NonNull
protected abstract InfoMediaDevice createInfoMediaDevice(
MediaRoute2Info route, RouteListingPreference.Item routeListingPreferenceItem);
@NonNull
protected abstract PhoneMediaDevice createPhoneMediaDevice(MediaRoute2Info route,
RouteListingPreference.Item routeListingPreferenceItem);
@NonNull
protected abstract BluetoothMediaDevice createBluetoothMediaDevice(
MediaRoute2Info route, CachedBluetoothDevice cachedDevice,
RouteListingPreference.Item routeListingPreferenceItem);
protected final void rebuildDeviceList() {
mMediaDevices.clear();
mCurrentConnectedDevice = null;
@@ -211,6 +198,20 @@ public abstract class InfoMediaManager extends MediaManager {
return mCurrentConnectedDevice;
}
/* package */ void connectToDevice(MediaDevice device) {
if (device.mRouteInfo == null) {
Log.w(TAG, "Unable to connect. RouteInfo is empty");
return;
}
if (TextUtils.isEmpty(mPackageName)) {
connectDeviceWithoutPackageName(device);
} else {
device.setConnectedRecord();
transferToRoute(device.mRouteInfo);
}
}
/**
* Add a MediaDevice to let it play current media.
*
@@ -335,7 +336,8 @@ public abstract class InfoMediaManager extends MediaManager {
final List<MediaDevice> deviceList = new ArrayList<>();
for (MediaRoute2Info route : getSelectableRoutes(info)) {
deviceList.add(
createInfoMediaDevice(route, mPreferenceItemMap.get(route.getId())));
new InfoMediaDevice(
mContext, route, mPackageName, mPreferenceItemMap.get(route.getId())));
}
return deviceList;
}
@@ -361,7 +363,8 @@ public abstract class InfoMediaManager extends MediaManager {
final List<MediaDevice> deviceList = new ArrayList<>();
for (MediaRoute2Info route : getDeselectableRoutes(info)) {
deviceList.add(
createInfoMediaDevice(route, mPreferenceItemMap.get(route.getId())));
new InfoMediaDevice(
mContext, route, mPackageName, mPreferenceItemMap.get(route.getId())));
Log.d(TAG, route.getName() + " is deselectable for " + mPackageName);
}
return deviceList;
@@ -388,11 +391,20 @@ public abstract class InfoMediaManager extends MediaManager {
final List<MediaDevice> deviceList = new ArrayList<>();
for (MediaRoute2Info route : getSelectedRoutes(info)) {
deviceList.add(
createInfoMediaDevice(route, mPreferenceItemMap.get(route.getId())));
new InfoMediaDevice(
mContext, route, mPackageName, mPreferenceItemMap.get(route.getId())));
}
return deviceList;
}
/* package */ void adjustDeviceVolume(MediaDevice device, int volume) {
if (device.mRouteInfo == null) {
Log.w(TAG, "Unable to set volume. RouteInfo is empty");
return;
}
setRouteVolume(device.mRouteInfo, volume);
}
void adjustSessionVolume(RoutingSessionInfo info, int volume) {
if (info == null) {
Log.w(TAG, "Unable to adjust session volume. RoutingSessionInfo is empty");
@@ -585,7 +597,12 @@ public abstract class InfoMediaManager extends MediaManager {
case TYPE_REMOTE_CAR:
case TYPE_REMOTE_SMARTWATCH:
case TYPE_REMOTE_SMARTPHONE:
mediaDevice = createInfoMediaDevice(route, mPreferenceItemMap.get(route.getId()));
mediaDevice =
new InfoMediaDevice(
mContext,
route,
mPackageName,
mPreferenceItemMap.get(route.getId()));
break;
case TYPE_BUILTIN_SPEAKER:
case TYPE_USB_DEVICE:
@@ -595,8 +612,12 @@ public abstract class InfoMediaManager extends MediaManager {
case TYPE_HDMI:
case TYPE_WIRED_HEADSET:
case TYPE_WIRED_HEADPHONES:
mediaDevice = createPhoneMediaDevice(route,
mPreferenceItemMap.getOrDefault(route.getId(), null));
mediaDevice =
new PhoneMediaDevice(
mContext,
route,
mPackageName,
mPreferenceItemMap.getOrDefault(route.getId(), null));
break;
case TYPE_HEARING_AID:
case TYPE_BLUETOOTH_A2DP:
@@ -606,14 +627,22 @@ public abstract class InfoMediaManager extends MediaManager {
final CachedBluetoothDevice cachedDevice =
mBluetoothManager.getCachedDeviceManager().findDevice(device);
if (cachedDevice != null) {
mediaDevice = createBluetoothMediaDevice(route, cachedDevice,
mPreferenceItemMap.getOrDefault(route.getId(), null));
mediaDevice =
new BluetoothMediaDevice(
mContext,
cachedDevice,
route,
mPackageName,
mPreferenceItemMap.getOrDefault(route.getId(), null));
}
break;
case TYPE_REMOTE_AUDIO_VIDEO_RECEIVER:
mediaDevice =
createComplexMediaDevice(
route, mPreferenceItemMap.get(route.getId()));
new ComplexMediaDevice(
mContext,
route,
mPackageName,
mPreferenceItemMap.get(route.getId()));
default:
Log.w(TAG, "addMediaDevice() unknown device type : " + deviceType);
break;

View File

@@ -188,11 +188,7 @@ public class LocalMediaManager implements BluetoothCallback {
}
device.setState(MediaDeviceState.STATE_CONNECTING);
if (TextUtils.isEmpty(mPackageName)) {
mInfoMediaManager.connectDeviceWithoutPackageName(device);
} else {
device.connect();
}
mInfoMediaManager.connectToDevice(device);
return true;
}
@@ -375,6 +371,16 @@ public class LocalMediaManager implements BluetoothCallback {
return mInfoMediaManager.getSelectedMediaDevices();
}
/**
* Requests a volume change for a specific media device.
*
* This operation is different from {@link #adjustSessionVolume(String, int)}, which changes the
* volume of the overall session.
*/
public void adjustDeviceVolume(MediaDevice device, int volume) {
mInfoMediaManager.adjustDeviceVolume(device, volume);
}
/**
* Adjust the volume of session.
*
@@ -559,9 +565,7 @@ public class LocalMediaManager implements BluetoothCallback {
final CachedBluetoothDevice cachedDevice =
cachedDeviceManager.findDevice(device);
if (isBondedMediaDevice(cachedDevice) && isMutingExpectedDevice(cachedDevice)) {
return new BluetoothMediaDevice(mContext,
cachedDevice,
null, null, mPackageName);
return new BluetoothMediaDevice(mContext, cachedDevice, null, mPackageName);
}
}
return null;
@@ -607,9 +611,8 @@ public class LocalMediaManager implements BluetoothCallback {
unRegisterDeviceAttributeChangeCallback();
mDisconnectedMediaDevices.clear();
for (CachedBluetoothDevice cachedDevice : cachedBluetoothDeviceList) {
final MediaDevice mediaDevice = new BluetoothMediaDevice(mContext,
cachedDevice,
null, null, mPackageName);
final MediaDevice mediaDevice =
new BluetoothMediaDevice(mContext, cachedDevice, null, mPackageName);
if (!mMediaDevices.contains(mediaDevice)) {
cachedDevice.registerCallback(mDeviceAttributeChangeCallback);
mDisconnectedMediaDevices.add(mediaDevice);

View File

@@ -28,7 +28,6 @@ import android.text.TextUtils;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import java.util.ArrayList;
@@ -80,6 +79,11 @@ public class ManagerInfoMediaManager extends InfoMediaManager {
}
}
@Override
protected void transferToRoute(@NonNull MediaRoute2Info route) {
mRouterManager.transfer(mPackageName, route);
}
@Override
protected boolean connectDeviceWithoutPackageName(@NonNull MediaDevice device) {
final RoutingSessionInfo info = mRouterManager.getSystemRoutingSession(null);
@@ -128,6 +132,11 @@ public class ManagerInfoMediaManager extends InfoMediaManager {
mRouterManager.setSessionVolume(info, volume);
}
@Override
protected void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
mRouterManager.setRouteVolume(route, volume);
}
@Override
@Nullable
protected RouteListingPreference getRouteListingPreference() {
@@ -167,40 +176,6 @@ public class ManagerInfoMediaManager extends InfoMediaManager {
return mRouterManager.getTransferableRoutes(packageName);
}
@Override
@NonNull
protected ComplexMediaDevice createComplexMediaDevice(
MediaRoute2Info route, RouteListingPreference.Item routeListingPreferenceItem) {
return new ComplexMediaDevice(
mContext, mRouterManager, route, mPackageName, routeListingPreferenceItem);
}
@Override
@NonNull
protected InfoMediaDevice createInfoMediaDevice(
MediaRoute2Info route, RouteListingPreference.Item routeListingPreferenceItem) {
return new InfoMediaDevice(
mContext, mRouterManager, route, mPackageName, routeListingPreferenceItem);
}
@Override
@NonNull
protected PhoneMediaDevice createPhoneMediaDevice(MediaRoute2Info route,
RouteListingPreference.Item routeListingPreferenceItem) {
return new PhoneMediaDevice(mContext, mRouterManager, route, mPackageName,
routeListingPreferenceItem);
}
@Override
@NonNull
protected BluetoothMediaDevice createBluetoothMediaDevice(
MediaRoute2Info route, CachedBluetoothDevice cachedDevice,
RouteListingPreference.Item routeListingPreferenceItem) {
return new BluetoothMediaDevice(
mContext, cachedDevice, mRouterManager, route, mPackageName,
routeListingPreferenceItem);
}
@VisibleForTesting
/* package */ final class RouterManagerCallback implements MediaRouter2Manager.Callback {

View File

@@ -50,7 +50,6 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.NearbyDevice;
import android.media.RouteListingPreference;
import android.os.Build;
@@ -116,15 +115,16 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
protected final Context mContext;
protected final MediaRoute2Info mRouteInfo;
protected final MediaRouter2Manager mRouterManager;
protected final RouteListingPreference.Item mItem;
protected final String mPackageName;
MediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
String packageName, RouteListingPreference.Item item) {
MediaDevice(
Context context,
MediaRoute2Info info,
String packageName,
RouteListingPreference.Item item) {
mContext = context;
mRouteInfo = info;
mRouterManager = routerManager;
mPackageName = packageName;
mItem = item;
setType(info);
@@ -305,20 +305,6 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
*/
public abstract boolean isConnected();
/**
* Request to set volume.
*
* @param volume is the new value.
*/
public void requestSetVolume(int volume) {
if (mRouteInfo == null) {
Log.w(TAG, "Unable to set volume. RouteInfo is empty");
return;
}
mRouterManager.setRouteVolume(mRouteInfo, volume);
}
/**
* Get max volume from MediaDevice.
*
@@ -392,21 +378,6 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
return mRouteInfo.getVolumeHandling() == MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
}
/**
* Transfer MediaDevice for media
*
* @return result of transfer media
*/
public boolean connect() {
if (mRouteInfo == null) {
Log.w(TAG, "Unable to connect. RouteInfo is empty");
return false;
}
setConnectedRecord();
mRouterManager.transfer(mPackageName, mRouteInfo);
return true;
}
/**
* Stop transfer MediaDevice
*/

View File

@@ -29,7 +29,6 @@ import static com.android.settingslib.media.MediaDevice.SelectionBehavior.SELECT
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RouteListingPreference;
import androidx.annotation.VisibleForTesting;
@@ -52,14 +51,16 @@ public class PhoneMediaDevice extends MediaDevice {
private final DeviceIconUtil mDeviceIconUtil;
PhoneMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
String packageName) {
this(context, routerManager, info, packageName, null);
PhoneMediaDevice(Context context, MediaRoute2Info info, String packageName) {
this(context, info, packageName, null);
}
PhoneMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
String packageName, RouteListingPreference.Item item) {
super(context, routerManager, info, packageName, item);
PhoneMediaDevice(
Context context,
MediaRoute2Info info,
String packageName,
RouteListingPreference.Item item) {
super(context, info, packageName, item);
mDeviceIconUtil = new DeviceIconUtil();
initDeviceRecord();
}

View File

@@ -65,8 +65,7 @@ public class InfoMediaDeviceTest {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mInfoMediaDevice = new InfoMediaDevice(mContext, mRouterManager, mRouteInfo,
TEST_PACKAGE_NAME);
mInfoMediaDevice = new InfoMediaDevice(mContext, mRouteInfo, TEST_PACKAGE_NAME);
}
@Test

View File

@@ -547,8 +547,7 @@ public class InfoMediaManagerTest {
@Test
public void connectDeviceWithoutPackageName_noSession_returnFalse() {
final MediaRoute2Info info = mock(MediaRoute2Info.class);
final MediaDevice device = new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager,
info, TEST_PACKAGE_NAME);
final MediaDevice device = new InfoMediaDevice(mContext, info, TEST_PACKAGE_NAME);
final List<RoutingSessionInfo> infos = new ArrayList<>();
@@ -624,9 +623,7 @@ public class InfoMediaManagerTest {
routingSessionInfos.add(info);
final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
final MediaDevice device =
new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
TEST_PACKAGE_NAME);
final MediaDevice device = new InfoMediaDevice(mContext, route2Info, TEST_PACKAGE_NAME);
final List<String> list = new ArrayList<>();
list.add(TEST_ID);
@@ -647,9 +644,7 @@ public class InfoMediaManagerTest {
routingSessionInfos.add(info);
final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
final MediaDevice device =
new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
TEST_PACKAGE_NAME);
final MediaDevice device = new InfoMediaDevice(mContext, route2Info, TEST_PACKAGE_NAME);
final List<String> list = new ArrayList<>();
list.add("fake_id");
@@ -679,9 +674,7 @@ public class InfoMediaManagerTest {
routingSessionInfos.add(info);
final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
final MediaDevice device =
new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
TEST_PACKAGE_NAME);
final MediaDevice device = new InfoMediaDevice(mContext, route2Info, TEST_PACKAGE_NAME);
final List<String> list = new ArrayList<>();
list.add(TEST_ID);
@@ -702,9 +695,7 @@ public class InfoMediaManagerTest {
routingSessionInfos.add(info);
final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
final MediaDevice device =
new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
TEST_PACKAGE_NAME);
final MediaDevice device = new InfoMediaDevice(mContext, route2Info, TEST_PACKAGE_NAME);
final List<String> list = new ArrayList<>();
list.add("fake_id");

View File

@@ -116,10 +116,8 @@ public class LocalMediaManagerTest {
when(mLocalProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
when(mLocalProfileManager.getHearingAidProfile()).thenReturn(mHapProfile);
mInfoMediaDevice1 = spy(new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1,
TEST_PACKAGE_NAME));
mInfoMediaDevice2 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo2,
TEST_PACKAGE_NAME);
mInfoMediaDevice1 = spy(new InfoMediaDevice(mContext, mRouteInfo1, TEST_PACKAGE_NAME));
mInfoMediaDevice2 = new InfoMediaDevice(mContext, mRouteInfo2, TEST_PACKAGE_NAME);
mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager,
mInfoMediaManager, "com.test.packagename");
mLocalMediaManager.mAudioManager = mAudioManager;
@@ -150,7 +148,7 @@ public class LocalMediaManagerTest {
assertThat(mLocalMediaManager.connectDevice(device)).isTrue();
verify(currentDevice).disconnect();
verify(device).connect();
verify(mInfoMediaManager).connectToDevice(device);
}
@Test
@@ -508,7 +506,7 @@ public class LocalMediaManagerTest {
devices.add(currentDevice);
mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
verify(mInfoMediaDevice1).connect();
verify(mInfoMediaManager).connectToDevice(mInfoMediaDevice1);
}
@Test

View File

@@ -26,14 +26,12 @@ import static com.android.settingslib.media.MediaDevice.SelectionBehavior.SELECT
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.NearbyDevice;
import android.media.RouteListingPreference;
import android.os.Parcel;
@@ -111,9 +109,6 @@ public class MediaDeviceTest {
private A2dpProfile mA2dpProfile;
@Mock
private BluetoothDevice mDevice;
@Mock
private MediaRouter2Manager mMediaRouter2Manager;
private RouteListingPreference.Item mItem;
private BluetoothMediaDevice mBluetoothMediaDevice1;
@@ -175,23 +170,18 @@ public class MediaDeviceTest {
when(mA2dpProfile.getActiveDevice()).thenReturn(mDevice);
mBluetoothMediaDevice1 =
new BluetoothMediaDevice(mContext, mCachedDevice1, mMediaRouter2Manager,
mBluetoothRouteInfo1, TEST_PACKAGE_NAME);
new BluetoothMediaDevice(
mContext, mCachedDevice1, mBluetoothRouteInfo1, TEST_PACKAGE_NAME);
mBluetoothMediaDevice2 =
new BluetoothMediaDevice(mContext, mCachedDevice2, mMediaRouter2Manager,
mBluetoothRouteInfo2, TEST_PACKAGE_NAME);
new BluetoothMediaDevice(
mContext, mCachedDevice2, mBluetoothRouteInfo2, TEST_PACKAGE_NAME);
mBluetoothMediaDevice3 =
new BluetoothMediaDevice(mContext, mCachedDevice3, mMediaRouter2Manager,
mBluetoothRouteInfo3, TEST_PACKAGE_NAME);
mInfoMediaDevice1 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1,
TEST_PACKAGE_NAME);
mInfoMediaDevice2 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo2,
TEST_PACKAGE_NAME);
mInfoMediaDevice3 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo3,
TEST_PACKAGE_NAME);
mPhoneMediaDevice =
new PhoneMediaDevice(mContext, mMediaRouter2Manager, mPhoneRouteInfo,
TEST_PACKAGE_NAME);
new BluetoothMediaDevice(
mContext, mCachedDevice3, mBluetoothRouteInfo3, TEST_PACKAGE_NAME);
mInfoMediaDevice1 = new InfoMediaDevice(mContext, mRouteInfo1, TEST_PACKAGE_NAME);
mInfoMediaDevice2 = new InfoMediaDevice(mContext, mRouteInfo2, TEST_PACKAGE_NAME);
mInfoMediaDevice3 = new InfoMediaDevice(mContext, mRouteInfo3, TEST_PACKAGE_NAME);
mPhoneMediaDevice = new PhoneMediaDevice(mContext, mPhoneRouteInfo, TEST_PACKAGE_NAME);
}
@Test
@@ -257,7 +247,7 @@ public class MediaDeviceTest {
public void compareTo_lastSelected_others_lastSelectedFirst() {
mMediaDevices.add(mBluetoothMediaDevice1);
mMediaDevices.add(mBluetoothMediaDevice2);
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice2.setConnectedRecord();
assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
Collections.sort(mMediaDevices, COMPARATOR);
@@ -268,9 +258,9 @@ public class MediaDeviceTest {
public void compareTo_connectionRecord_sortByRecord() {
mMediaDevices.add(mBluetoothMediaDevice1);
mMediaDevices.add(mBluetoothMediaDevice2);
mBluetoothMediaDevice1.connect();
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice1.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
// Reset last selected record
ConnectionRecordManager.getInstance().setConnectionRecord(mContext, null, 0);
@@ -287,9 +277,9 @@ public class MediaDeviceTest {
mMediaDevices.add(mBluetoothMediaDevice2);
when(mCachedDevice2.isConnected()).thenReturn(false);
mBluetoothMediaDevice1.connect();
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice1.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
// Reset last selected record
ConnectionRecordManager.getInstance().setConnectionRecord(mContext, null, 0);
@@ -325,8 +315,8 @@ public class MediaDeviceTest {
final MediaRoute2Info phoneRouteInfo = mock(MediaRoute2Info.class);
when(phoneRouteInfo.getType()).thenReturn(TYPE_WIRED_HEADPHONES);
final PhoneMediaDevice phoneMediaDevice = new PhoneMediaDevice(mContext,
mMediaRouter2Manager, phoneRouteInfo, TEST_PACKAGE_NAME);
final PhoneMediaDevice phoneMediaDevice =
new PhoneMediaDevice(mContext, phoneRouteInfo, TEST_PACKAGE_NAME);
mMediaDevices.add(mBluetoothMediaDevice1);
mMediaDevices.add(phoneMediaDevice);
@@ -341,8 +331,8 @@ public class MediaDeviceTest {
final MediaRoute2Info phoneRouteInfo = mock(MediaRoute2Info.class);
when(phoneRouteInfo.getType()).thenReturn(TYPE_WIRED_HEADPHONES);
final PhoneMediaDevice phoneMediaDevice = new PhoneMediaDevice(mContext,
mMediaRouter2Manager, phoneRouteInfo, TEST_PACKAGE_NAME);
final PhoneMediaDevice phoneMediaDevice =
new PhoneMediaDevice(mContext, phoneRouteInfo, TEST_PACKAGE_NAME);
mMediaDevices.add(mInfoMediaDevice1);
mMediaDevices.add(phoneMediaDevice);
@@ -403,13 +393,13 @@ public class MediaDeviceTest {
mMediaDevices.add(mInfoMediaDevice2);
mMediaDevices.add(mInfoMediaDevice3);
mMediaDevices.add(mPhoneMediaDevice);
mBluetoothMediaDevice3.connect();
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice2.connect();
mInfoMediaDevice3.connect();
mInfoMediaDevice2.connect();
mInfoMediaDevice2.connect();
mInfoMediaDevice1.connect();
mBluetoothMediaDevice3.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
mInfoMediaDevice3.setConnectedRecord();
mInfoMediaDevice2.setConnectedRecord();
mInfoMediaDevice2.setConnectedRecord();
mInfoMediaDevice1.setConnectedRecord();
Collections.sort(mMediaDevices, COMPARATOR);
assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
@@ -443,15 +433,15 @@ public class MediaDeviceTest {
mMediaDevices.add(mInfoMediaDevice2);
mMediaDevices.add(mInfoMediaDevice3);
mMediaDevices.add(mPhoneMediaDevice);
mBluetoothMediaDevice3.connect();
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice2.connect();
mBluetoothMediaDevice2.connect();
mInfoMediaDevice3.connect();
mInfoMediaDevice2.connect();
mInfoMediaDevice2.connect();
mInfoMediaDevice1.connect();
mBluetoothMediaDevice3.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
mBluetoothMediaDevice2.setConnectedRecord();
mInfoMediaDevice3.setConnectedRecord();
mInfoMediaDevice2.setConnectedRecord();
mInfoMediaDevice2.setConnectedRecord();
mInfoMediaDevice1.setConnectedRecord();
Collections.sort(mMediaDevices, COMPARATOR);
assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
@@ -463,13 +453,6 @@ public class MediaDeviceTest {
assertThat(mMediaDevices.get(6)).isEqualTo(mBluetoothMediaDevice2);
}
@Test
public void connect_shouldSelectRoute() {
mInfoMediaDevice1.connect();
verify(mMediaRouter2Manager).transfer(TEST_PACKAGE_NAME, mRouteInfo1);
}
@Test
public void getClientPackageName_returnPackageName() {
when(mRouteInfo1.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
@@ -498,8 +481,9 @@ public class MediaDeviceTest {
@Test
public void getFeatures_noRouteInfo_returnEmptyList() {
mBluetoothMediaDevice1 = new BluetoothMediaDevice(mContext, mCachedDevice1,
mMediaRouter2Manager, null /* MediaRoute2Info */, TEST_PACKAGE_NAME);
mBluetoothMediaDevice1 =
new BluetoothMediaDevice(
mContext, mCachedDevice1, null /* MediaRoute2Info */, TEST_PACKAGE_NAME);
assertThat(mBluetoothMediaDevice1.getFeatures().size()).isEqualTo(0);
}
@@ -509,11 +493,15 @@ public class MediaDeviceTest {
mItem = new RouteListingPreference.Item.Builder(DEVICE_ADDRESS_1)
.setSelectionBehavior(SELECTION_BEHAVIOR_GO_TO_APP)
.build();
mBluetoothMediaDevice1 = new BluetoothMediaDevice(mContext, mCachedDevice1,
mMediaRouter2Manager, null /* MediaRoute2Info */, TEST_PACKAGE_NAME, mItem);
mBluetoothMediaDevice1 =
new BluetoothMediaDevice(
mContext,
mCachedDevice1,
null /* MediaRoute2Info */,
TEST_PACKAGE_NAME,
mItem);
mPhoneMediaDevice =
new PhoneMediaDevice(mContext, mMediaRouter2Manager, mPhoneRouteInfo,
TEST_PACKAGE_NAME, mItem);
new PhoneMediaDevice(mContext, mPhoneRouteInfo, TEST_PACKAGE_NAME, mItem);
assertThat(mBluetoothMediaDevice1.getSelectionBehavior()).isEqualTo(
SELECTION_BEHAVIOR_TRANSFER);

View File

@@ -56,8 +56,7 @@ public class PhoneMediaDeviceTest {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mPhoneMediaDevice =
new PhoneMediaDevice(mContext, null, mInfo, null);
mPhoneMediaDevice = new PhoneMediaDevice(mContext, mInfo, null);
}
@Test

View File

@@ -837,7 +837,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
void adjustVolume(MediaDevice device, int volume) {
ThreadUtils.postOnBackgroundThread(() -> {
device.requestSetVolume(volume);
mLocalMediaManager.adjustDeviceVolume(device, volume);
});
}