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

Commit 3d44c9a8 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

(cherry picked from commit 3a3d34faa2053b0481e8ac76da956d42b3fc0596)

Change-Id: I53e4a11636dc798e69e8229bf48db0617cf4dbce
parent b71b5f0c
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