Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eebc3a56 authored by shaoweishen's avatar shaoweishen Committed by Shaowei Shen
Browse files

[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
parent 4c318891
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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();
        }
    }
}
+12 −2
Original line number Diff line number Diff line
@@ -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
+12 −2
Original line number Diff line number Diff line
@@ -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;
        }
    };