Get route info without pacakage name

Use getAllRoutes() to get all routes if package name is null.

Bug: 142912244
Test: make -j42 RunSettingsLibRoboTests
Change-Id: I8a5e3209756e516909f607c59a0639c18b5276a5
This commit is contained in:
hughchen
2020-01-17 18:30:03 +08:00
parent ece12a89bc
commit 0d20204028
3 changed files with 60 additions and 26 deletions

View File

@@ -40,15 +40,16 @@ public class InfoMediaManager extends MediaManager {
final Executor mExecutor = Executors.newSingleThreadExecutor();
@VisibleForTesting
MediaRouter2Manager mRouterManager;
@VisibleForTesting
String mPackageName;
private String mPackageName;
private MediaDevice mCurrentConnectedDevice;
public InfoMediaManager(Context context, String packageName, Notification notification) {
super(context, notification);
mRouterManager = MediaRouter2Manager.getInstance(context);
if (packageName != null) {
if (!TextUtils.isEmpty(packageName)) {
mPackageName = packageName;
}
}
@@ -57,6 +58,7 @@ public class InfoMediaManager extends MediaManager {
public void startScan() {
mMediaDevices.clear();
mRouterManager.registerCallback(mExecutor, mMediaRouterCallback);
refreshDevices();
}
@VisibleForTesting
@@ -79,21 +81,37 @@ public class InfoMediaManager extends MediaManager {
return mCurrentConnectedDevice;
}
class RouterManagerCallback extends MediaRouter2Manager.Callback {
private void refreshDevices() {
mMediaDevices.clear();
mCurrentConnectedDevice = null;
for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route,
mPackageName);
if (TextUtils.equals(route.getClientPackageName(), mPackageName)) {
mCurrentConnectedDevice = device;
}
mMediaDevices.add(device);
}
dispatchDeviceListAdded();
private void refreshDevices() {
mMediaDevices.clear();
mCurrentConnectedDevice = null;
if (TextUtils.isEmpty(mPackageName)) {
buildAllRoutes();
} else {
buildAvailableRoutes();
}
dispatchDeviceListAdded();
}
private void buildAllRoutes() {
for (MediaRoute2Info route : mRouterManager.getAllRoutes()) {
final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route,
mPackageName);
mMediaDevices.add(device);
}
}
private void buildAvailableRoutes() {
for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route,
mPackageName);
if (TextUtils.equals(route.getClientPackageName(), mPackageName)) {
mCurrentConnectedDevice = device;
}
mMediaDevices.add(device);
}
}
class RouterManagerCallback extends MediaRouter2Manager.Callback {
@Override
public void onRoutesAdded(List<MediaRoute2Info> routes) {

View File

@@ -18,7 +18,6 @@ package com.android.settingslib.media;
import android.app.Notification;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.IntDef;
@@ -162,10 +161,8 @@ public class LocalMediaManager implements BluetoothCallback {
mMediaDevices.clear();
mBluetoothMediaManager.registerCallback(mMediaDeviceCallback);
mBluetoothMediaManager.startScan();
if (!TextUtils.isEmpty(mPackageName)) {
mInfoMediaManager.registerCallback(mMediaDeviceCallback);
mInfoMediaManager.startScan();
}
mInfoMediaManager.registerCallback(mMediaDeviceCallback);
mInfoMediaManager.startScan();
}
private void addPhoneDeviceIfNecessary() {
@@ -208,10 +205,8 @@ public class LocalMediaManager implements BluetoothCallback {
public void stopScan() {
mBluetoothMediaManager.unregisterCallback(mMediaDeviceCallback);
mBluetoothMediaManager.stopScan();
if (!TextUtils.isEmpty(mPackageName)) {
mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
mInfoMediaManager.stopScan();
}
mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
mInfoMediaManager.stopScan();
}
/**

View File

@@ -74,7 +74,7 @@ public class InfoMediaManagerTest {
}
@Test
public void onRouteAdded_shouldAddMediaDevice() {
public void onRouteAdded_getAvailableRoutes_shouldAddMediaDevice() {
final MediaRoute2Info info = mock(MediaRoute2Info.class);
when(info.getId()).thenReturn(TEST_ID);
when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
@@ -94,6 +94,27 @@ public class InfoMediaManagerTest {
assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
}
@Test
public void onRouteAdded_buildAllRoutes_shouldAddMediaDevice() {
final MediaRoute2Info info = mock(MediaRoute2Info.class);
when(info.getId()).thenReturn(TEST_ID);
when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
final List<MediaRoute2Info> routes = new ArrayList<>();
routes.add(info);
when(mRouterManager.getAllRoutes()).thenReturn(routes);
final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
assertThat(mediaDevice).isNull();
mInfoMediaManager.mPackageName = "";
mInfoMediaManager.mMediaRouterCallback.onRoutesAdded(routes);
final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
}
@Test
public void onControlCategoriesChanged_samePackageName_shouldAddMediaDevice() {
final MediaRoute2Info info = mock(MediaRoute2Info.class);