[Output Switcher] Improvement for seekbar volume control
1. dispatchDataChanged will not build devices again, we need to do that to update volume quicker. 2. dismiss dialog only when Media change to pause or stop. Bug: 243759774 Test: verified on device Change-Id: I9b93c7e21c899f011418ee51cec3be08c30004fa
This commit is contained in:
committed by
Shaowei Shen
parent
4c31889176
commit
eebc3a56bd
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user