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

Commit 042ae601 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "mcp: Synchronize mPendingStateRequest list access"

parents 21b9ef9d c8daebc8
Loading
Loading
Loading
Loading
+78 −68
Original line number Diff line number Diff line
@@ -192,7 +192,7 @@ public class MediaControlProfile implements MediaControlServiceCallbacks {
        }
    }

    private void removePendingStateRequests(Set<PlayerStateField> fields) {
    private synchronized void removePendingStateRequests(Set<PlayerStateField> fields) {
        if (mPendingStateRequest == null) return;

        for (PlayerStateField field : fields) {
@@ -263,7 +263,9 @@ public class MediaControlProfile implements MediaControlServiceCallbacks {

    @Override
    public void onPlayerStateRequest(PlayerStateField[] stateFields) {
        synchronized (this) {
            mPendingStateRequest = Stream.of(stateFields).collect(Collectors.toList());
        }
        processPendingPlayerStateRequest();
    }

@@ -513,10 +515,10 @@ public class MediaControlProfile implements MediaControlServiceCallbacks {

        Map<PlayerStateField, Object> handled_request_map = new HashMap<>();

        synchronized (this) {
            if (mPendingStateRequest == null) return;

        // Notice: If we are unable to provide the requested field it will stay queued until we are
        //         able to provide it.
            // Notice: If we are unable to provide the requested field it will stay queued until we
            //         are able to provide it.
            for (PlayerStateField settings_field : mPendingStateRequest) {
                switch (settings_field) {
                    case PLAYBACK_STATE:
@@ -537,7 +539,8 @@ public class MediaControlProfile implements MediaControlServiceCallbacks {
                    case SEEKING_SPEED:
                        float seeking_speed = 1.0f;
                        if (mCurrentData.state != null) {
                        if ((mCurrentData.state.getState() == PlaybackState.STATE_FAST_FORWARDING)
                            if ((mCurrentData.state.getState()
                                    == PlaybackState.STATE_FAST_FORWARDING)
                                    || (mCurrentData.state.getState()
                                            == PlaybackState.STATE_REWINDING)) {
                                seeking_speed = mCurrentData.state.getPlaybackSpeed();
@@ -552,12 +555,15 @@ public class MediaControlProfile implements MediaControlServiceCallbacks {
                    case TRACK_POSITION:
                        if (mCurrentData.state != null) {
                            handled_request_map.put(
                                settings_field, getDriftCorrectedTrackPosition(mCurrentData.state));
                                    settings_field, getDriftCorrectedTrackPosition(
                                            mCurrentData.state));
                        }
                        break;
                    case PLAYER_NAME:
                        String player_name = getCurrentPlayerName();
                    if (player_name != null) handled_request_map.put(settings_field, player_name);
                        if (player_name != null) {
                            handled_request_map.put(settings_field, player_name);
                        }
                        break;
                    case ICON_URL:
                        // Not implemented
@@ -574,11 +580,13 @@ public class MediaControlProfile implements MediaControlServiceCallbacks {
                    case OPCODES_SUPPORTED:
                        if (mCurrentData.state != null) {
                            handled_request_map.put(settings_field,
                                playerActions2McsSupportedOpcodes(mCurrentData.state.getActions()));
                                    playerActions2McsSupportedOpcodes(
                                            mCurrentData.state.getActions()));
                        }
                        break;
                }
            }
        }

        if (!handled_request_map.isEmpty()) {
            removePendingStateRequests(handled_request_map.keySet());
@@ -588,6 +596,7 @@ public class MediaControlProfile implements MediaControlServiceCallbacks {
        }

        if (DBG) {
            synchronized (this) {
                if (mPendingStateRequest != null && !mPendingStateRequest.isEmpty()) {
                    Log.w(TAG, "MCS service state fields left unhandled: ");
                    for (PlayerStateField item : mPendingStateRequest) {
@@ -596,6 +605,7 @@ public class MediaControlProfile implements MediaControlServiceCallbacks {
                }
            }
        }
    }

    @VisibleForTesting
    PlayingOrder getCurrentPlayerPlayingOrder() {