diff options
3 files changed, 58 insertions, 24 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index e008cd038317..a4be46cf1f63 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -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; + if (TextUtils.isEmpty(mPackageName)) { + buildAllRoutes(); + } else { + buildAvailableRoutes(); + } + dispatchDeviceListAdded(); + } - 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); + 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; } - dispatchDeviceListAdded(); + mMediaDevices.add(device); } + } + + class RouterManagerCallback extends MediaRouter2Manager.Callback { @Override public void onRoutesAdded(List<MediaRoute2Info> routes) { diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index e85a102294d8..50196d2b2994 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -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(); } /** 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 67f6dd903841..3726fb24479a 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 @@ -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); @@ -95,6 +95,27 @@ public class InfoMediaManagerTest { } @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); when(info.getId()).thenReturn(TEST_ID); |