Loading android/app/src/com/android/bluetooth/mcp/MediaControlProfile.java +78 −68 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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(); } Loading Loading @@ -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: Loading @@ -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(); Loading @@ -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 Loading @@ -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()); Loading @@ -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) { Loading @@ -596,6 +605,7 @@ public class MediaControlProfile implements MediaControlServiceCallbacks { } } } } @VisibleForTesting PlayingOrder getCurrentPlayerPlayingOrder() { Loading Loading
android/app/src/com/android/bluetooth/mcp/MediaControlProfile.java +78 −68 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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(); } Loading Loading @@ -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: Loading @@ -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(); Loading @@ -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 Loading @@ -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()); Loading @@ -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) { Loading @@ -596,6 +605,7 @@ public class MediaControlProfile implements MediaControlServiceCallbacks { } } } } @VisibleForTesting PlayingOrder getCurrentPlayerPlayingOrder() { Loading