Decouple MediaRouter2Manager from MediaDevice
The required routing methods are now available through InfoMediaManager, still decoupled from MediaRouter2Manager. This is a non-functional change. Bug: 192657812 Test: atest InfoMediaManagerTest MediaDeviceTest LocalMediaManagerTest Change-Id: Idbb22a8c4ebb790f2b0a3ba011d6aa1a1be56550
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user