From 2461575c2feec51e786d6aead7a2c303828e7bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Budnik?= Date: Thu, 6 Jul 2023 12:46:13 +0000 Subject: [PATCH] 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 --- .../media/BluetoothMediaDevice.java | 19 +-- .../settingslib/media/ComplexMediaDevice.java | 9 +- .../settingslib/media/InfoMediaDevice.java | 15 +-- .../settingslib/media/InfoMediaManager.java | 83 +++++++++----- .../settingslib/media/LocalMediaManager.java | 25 ++-- .../media/ManagerInfoMediaManager.java | 45 ++------ .../settingslib/media/MediaDevice.java | 39 +------ .../settingslib/media/PhoneMediaDevice.java | 15 +-- .../media/InfoMediaDeviceTest.java | 3 +- .../media/InfoMediaManagerTest.java | 19 +-- .../media/LocalMediaManagerTest.java | 10 +- .../settingslib/media/MediaDeviceTest.java | 108 ++++++++---------- .../media/PhoneMediaDeviceTest.java | 3 +- .../media/dialog/MediaOutputController.java | 2 +- 14 files changed, 178 insertions(+), 217 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java index 963bd9daa9755..ed518f79156b3 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java @@ -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(); diff --git a/packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java index c38dfe3cca1fb..4e0ebd1bdc1ab 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java @@ -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. diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java index b10d7946f57f6..012cbc05b5b29 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java @@ -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 diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 3e864f905da3c..832131c3462b9 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -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 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 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 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 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; diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index 987f61649ba99..8479df1c76667 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -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); diff --git a/packages/SettingsLib/src/com/android/settingslib/media/ManagerInfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/ManagerInfoMediaManager.java index c86a943eff182..b7ac1dce158c2 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/ManagerInfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/ManagerInfoMediaManager.java @@ -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 { diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java index a9d15f3b4afef..9234d374e1ad6 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java @@ -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 { 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 { */ 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 { 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 */ diff --git a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java index accd88c2bfe32..41afc7b8b194d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java @@ -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(); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java index 19a3db25996e6..a072c1722c10c 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java @@ -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 diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java index ee68fc2fa00dd..45b5de4cf367a 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java @@ -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 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 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 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 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 list = new ArrayList<>(); list.add("fake_id"); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java index 93c6a2f655d4c..d6c33ff852692 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java @@ -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 diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java index f22e090fe7df0..18055d97d835d 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java @@ -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); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java index 00d1f76f025f7..1746befbfa4da 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java @@ -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 diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 25899e5ae178e..f87f53ca12a2e 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -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); }); }