Merge "[Output Switcher] Improvement for seekbar volume control" into tm-qpr-dev

This commit is contained in:
Shaowei Shen
2022-09-14 09:27:12 +00:00
committed by Android (Google) Code Review
3 changed files with 28 additions and 8 deletions

View File

@@ -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();
}
}
}

View File

@@ -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

View File

@@ -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;
@@ -207,6 +208,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;
}
@@ -1003,10 +1007,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;
}
};