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

Commit 26233db5 authored by Joseph Pirozzo's avatar Joseph Pirozzo
Browse files

Remove broadcastMetadata trigger.

On some devices the play/pause status would go through an extra
transition due to the value provided by the Media Browse Service not
being in line with the actual state.  By eliminating that state we
eliminate the race condition.

Bug: 74605206
Test: runtest bluetooth -p com.android.bluetooth.a2dpsink
Change-Id: I0b7716f1d1602e81ff050ca2b268ae036265b1c6
(cherry picked from commit 6d756e22abf77db19c0cb45877b78f61b9e801af)
parent b2d3e63e
Loading
Loading
Loading
Loading
+3 −20
Original line number Diff line number Diff line
@@ -129,7 +129,6 @@ class AvrcpControllerStateMachine extends StateMachine {

    // Only accessed from State Machine processMessage
    private boolean mAbsoluteVolumeChangeInProgress = false;
    private boolean mBroadcastMetadata = false;
    private int mPreviousPercentageVol = -1;

    // Depth from root of current browsing. This can be used to move to root directly.
@@ -217,22 +216,6 @@ class AvrcpControllerStateMachine extends StateMachine {
            A2dpSinkService a2dpSinkService = A2dpSinkService.getA2dpSinkService();
            synchronized (mLock) {
                switch (msg.what) {
                    case MESSAGE_STOP_METADATA_BROADCASTS:
                        mBroadcastMetadata = false;
                        broadcastPlayBackStateChanged(
                                new PlaybackState.Builder().setState(PlaybackState.STATE_PAUSED,
                                        mAddressedPlayer.getPlayTime(), 0).build());
                        break;

                    case MESSAGE_START_METADATA_BROADCASTS:
                        mBroadcastMetadata = true;
                        broadcastPlayBackStateChanged(mAddressedPlayer.getPlaybackState());
                        if (mAddressedPlayer.getCurrentTrack() != null) {
                            broadcastMetaDataChanged(
                                    mAddressedPlayer.getCurrentTrack().getMediaMetaData());
                        }
                        break;

                    case MESSAGE_SEND_PASS_THROUGH_CMD:
                        BluetoothDevice device = (BluetoothDevice) msg.obj;
                        AvrcpControllerService.sendPassThroughCommandNative(
@@ -421,7 +404,6 @@ class AvrcpControllerStateMachine extends StateMachine {

                    case MESSAGE_PROCESS_TRACK_CHANGED:
                        // Music start playing automatically and update Metadata
                        mBroadcastMetadata = true;
                        mAddressedPlayer.updateCurrentTrack((TrackInfo) msg.obj);
                        broadcastMetaDataChanged(
                                mAddressedPlayer.getCurrentTrack().getMediaMetaData());
@@ -436,8 +418,8 @@ class AvrcpControllerStateMachine extends StateMachine {
                        break;

                    case MESSAGE_PROCESS_PLAY_POS_CHANGED:
                        if (msg.arg2 != -1) {
                            mAddressedPlayer.setPlayTime(msg.arg2);
                        if (mBroadcastMetadata) {
                            broadcastPlayBackStateChanged(getCurrentPlayBackState());
                        }
                        break;
@@ -445,6 +427,7 @@ class AvrcpControllerStateMachine extends StateMachine {
                    case MESSAGE_PROCESS_PLAY_STATUS_CHANGED:
                        int status = msg.arg1;
                        mAddressedPlayer.setPlayStatus(status);
                        broadcastPlayBackStateChanged(getCurrentPlayBackState());
                        if (status == PlaybackState.STATE_PLAYING) {
                            a2dpSinkService.informTGStatePlaying(mRemoteDevice.mBTDevice, true);
                        } else if (status == PlaybackState.STATE_PAUSED