diff options
3 files changed, 28 insertions, 8 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index a72f311e55ed..58c15eb8073c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -422,7 +422,7 @@ public class InfoMediaManager extends MediaManager { || sessionInfo.getSelectedRoutes().size() <= 1; } - private void refreshDevices() { + private synchronized void refreshDevices() { mMediaDevices.clear(); mCurrentConnectedDevice = null; if (TextUtils.isEmpty(mPackageName)) { @@ -452,7 +452,7 @@ public class InfoMediaManager extends MediaManager { return infos; } - private void buildAvailableRoutes() { + private synchronized void buildAvailableRoutes() { for (MediaRoute2Info route : getAvailableRoutes(mPackageName)) { if (DEBUG) { Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : " @@ -462,7 +462,7 @@ public class InfoMediaManager extends MediaManager { } } - private List<MediaRoute2Info> getAvailableRoutes(String packageName) { + private synchronized List<MediaRoute2Info> getAvailableRoutes(String packageName) { final List<MediaRoute2Info> infos = new ArrayList<>(); RoutingSessionInfo routingSessionInfo = getRoutingSessionInfo(packageName); if (routingSessionInfo != null) { @@ -596,7 +596,7 @@ public class InfoMediaManager extends MediaManager { @Override public void onSessionUpdated(RoutingSessionInfo sessionInfo) { - dispatchDataChanged(); + refreshDevices(); } } } 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 ee7b7d6b180f..d04d85a70858 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 @@ -666,12 +666,22 @@ public class InfoMediaManagerTest { } @Test - public void onSessionUpdated_shouldDispatchDataChanged() { + public void onSessionUpdated_shouldDispatchDeviceListAdded() { + final MediaRoute2Info info = mock(MediaRoute2Info.class); + when(info.getId()).thenReturn(TEST_ID); + when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); + when(info.isSystemRoute()).thenReturn(true); + + final List<MediaRoute2Info> routes = new ArrayList<>(); + routes.add(info); + mShadowRouter2Manager.setAllRoutes(routes); + + mInfoMediaManager.mPackageName = ""; mInfoMediaManager.registerCallback(mCallback); mInfoMediaManager.mMediaRouterCallback.onSessionUpdated(mock(RoutingSessionInfo.class)); - verify(mCallback).onDeviceAttributesChanged(); + verify(mCallback).onDeviceListAdded(any()); } @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 8dd843a6f921..6b8a9997edcd 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -133,6 +133,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, @VisibleForTesting LocalMediaManager mLocalMediaManager; private MediaOutputMetricLogger mMetricLogger; + private int mCurrentState; private int mColorItemContent; private int mColorSeekbarProgress; @@ -204,6 +205,9 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, if (TextUtils.equals(controller.getPackageName(), mPackageName)) { mMediaController = controller; mMediaController.unregisterCallback(mCb); + if (mMediaController.getPlaybackState() != null) { + mCurrentState = mMediaController.getPlaybackState().getState(); + } mMediaController.registerCallback(mCb); break; } @@ -994,10 +998,16 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, @Override public void onPlaybackStateChanged(PlaybackState playbackState) { - final int state = playbackState.getState(); - if (state == PlaybackState.STATE_STOPPED || state == PlaybackState.STATE_PAUSED) { + final int newState = + playbackState == null ? PlaybackState.STATE_STOPPED : playbackState.getState(); + if (mCurrentState == newState) { + return; + } + + if (newState == PlaybackState.STATE_STOPPED || newState == PlaybackState.STATE_PAUSED) { mCallback.onMediaStoppedOrPaused(); } + mCurrentState = newState; } }; |