From f961f2ca6fd94696a98d23189bfa9c4a813e8db1 Mon Sep 17 00:00:00 2001 From: hughchen Date: Wed, 25 Mar 2020 17:14:02 +0800 Subject: [PATCH] Update devices list when onRoutesChanged() called - Update devices list when onRoutesChanged() is called because when volume is changed the onRoutesChanged() also be called. We need to update devices list to let caller get correct volume value. - Send onConnectedDeviceChanged() when onTransferred() is called. Bug: 151709228 Test: make -j42 RunSettingsLibRoboTests Change-Id: I64d14883123d7135537b6df01d24afc90db6849d --- .../settingslib/media/InfoMediaManager.java | 30 ++++----- .../media/InfoMediaManagerTest.java | 63 +++++++++++++++++-- 2 files changed, 73 insertions(+), 20 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index cf1662409efc0..19c8b20b7822b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -338,7 +338,8 @@ public class InfoMediaManager extends MediaManager { private void buildAllRoutes() { for (MediaRoute2Info route : mRouterManager.getAllRoutes()) { if (DEBUG) { - Log.d(TAG, "buildAllRoutes() route : " + route.getName()); + Log.d(TAG, "buildAllRoutes() route : " + route.getName() + ", volume : " + + route.getVolume()); } if (route.isSystemRoute()) { addMediaDevice(route); @@ -414,6 +415,20 @@ public class InfoMediaManager extends MediaManager { @Override public void onRoutesChanged(List routes) { + refreshDevices(); + } + + @Override + public void onRoutesRemoved(List routes) { + refreshDevices(); + } + + @Override + public void onTransferred(RoutingSessionInfo oldSession, RoutingSessionInfo newSession) { + if (DEBUG) { + Log.d(TAG, "onTransferred() oldSession : " + oldSession.getName() + + ", newSession : " + newSession.getName()); + } mMediaDevices.clear(); mCurrentConnectedDevice = null; if (TextUtils.isEmpty(mPackageName)) { @@ -428,19 +443,6 @@ public class InfoMediaManager extends MediaManager { dispatchConnectedDeviceChanged(id); } - @Override - public void onRoutesRemoved(List routes) { - refreshDevices(); - } - - @Override - public void onTransferred(RoutingSessionInfo oldSession, RoutingSessionInfo newSession) { - if (DEBUG) { - Log.d(TAG, "onTransferred() oldSession : " + oldSession.getName() - + ", newSession : " + newSession.getName()); - } - } - @Override public void onTransferFailed(RoutingSessionInfo session, MediaRoute2Info route) { dispatchOnRequestFailed(REASON_UNKNOWN_ERROR); 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 d0c37a0bd8c18..c21582cdf203c 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 @@ -173,8 +173,6 @@ public class InfoMediaManagerTest { mShadowRouter2Manager.setRoutingSessions(routingSessionInfos); final MediaRoute2Info info = mock(MediaRoute2Info.class); - mInfoMediaManager.registerCallback(mCallback); - when(info.getId()).thenReturn(TEST_ID); when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); @@ -191,14 +189,11 @@ public class InfoMediaManagerTest { assertThat(infoDevice.getId()).isEqualTo(TEST_ID); assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice); assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size()); - verify(mCallback).onConnectedDeviceChanged(TEST_ID); } @Test public void onRoutesChanged_buildAllRoutes_shouldAddMediaDevice() { final MediaRoute2Info info = mock(MediaRoute2Info.class); - mInfoMediaManager.registerCallback(mCallback); - when(info.getId()).thenReturn(TEST_ID); when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); when(info.isSystemRoute()).thenReturn(true); @@ -216,7 +211,6 @@ public class InfoMediaManagerTest { final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0); assertThat(infoDevice.getId()).isEqualTo(TEST_ID); assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size()); - verify(mCallback).onConnectedDeviceChanged(null); } @Test @@ -550,4 +544,61 @@ public class InfoMediaManagerTest { verify(mCallback).onRequestFailed(REASON_NETWORK_ERROR); } + + @Test + public void onTransferred_getAvailableRoutes_shouldAddMediaDevice() { + final List routingSessionInfos = new ArrayList<>(); + final RoutingSessionInfo sessionInfo = mock(RoutingSessionInfo.class); + routingSessionInfos.add(sessionInfo); + final List selectedRoutes = new ArrayList<>(); + selectedRoutes.add(TEST_ID); + when(sessionInfo.getSelectedRoutes()).thenReturn(selectedRoutes); + mShadowRouter2Manager.setRoutingSessions(routingSessionInfos); + + final MediaRoute2Info info = mock(MediaRoute2Info.class); + mInfoMediaManager.registerCallback(mCallback); + + when(info.getId()).thenReturn(TEST_ID); + when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); + + final List routes = new ArrayList<>(); + routes.add(info); + mShadowRouter2Manager.setAvailableRoutes(routes); + + final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID); + assertThat(mediaDevice).isNull(); + + mInfoMediaManager.mMediaRouterCallback.onTransferred(null, null); + + final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0); + assertThat(infoDevice.getId()).isEqualTo(TEST_ID); + assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice); + assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size()); + verify(mCallback).onConnectedDeviceChanged(TEST_ID); + } + + @Test + public void onTransferred_buildAllRoutes_shouldAddMediaDevice() { + final MediaRoute2Info info = mock(MediaRoute2Info.class); + mInfoMediaManager.registerCallback(mCallback); + + when(info.getId()).thenReturn(TEST_ID); + when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); + when(info.isSystemRoute()).thenReturn(true); + + final List routes = new ArrayList<>(); + routes.add(info); + mShadowRouter2Manager.setAllRoutes(routes); + + final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID); + assertThat(mediaDevice).isNull(); + + mInfoMediaManager.mPackageName = ""; + mInfoMediaManager.mMediaRouterCallback.onTransferred(null, null); + + final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0); + assertThat(infoDevice.getId()).isEqualTo(TEST_ID); + assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size()); + verify(mCallback).onConnectedDeviceChanged(null); + } }