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

Commit 500866a8 authored by Sal Savage's avatar Sal Savage
Browse files

Make active device == browsed device, always pause the old active device

Tag: #stability
Bug: 180416295
Bug: 180416562
Test: atest BluetoothInstrumentationTests
Change-Id: I564b92ee982c95b596c1a68b7c08648896cd21eb
parent 8496b3a4
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -234,6 +234,11 @@ public class AvrcpControllerService extends ProfileService {
            if (DBG) Log.d(TAG, "Didn't find a node");
            return new ArrayList(0);
        } else {
            // If we found a node and it belongs to a device then go ahead and make it active
            BluetoothDevice device = requestedNode.getDevice();
            AvrcpControllerStateMachine stateMachine = getStateMachine(device);
            if (stateMachine != null) stateMachine.setActive(true);

            if (!requestedNode.isCached()) {
                if (DBG) Log.d(TAG, "node is not cached");
                refreshContents(requestedNode);
@@ -737,6 +742,9 @@ public class AvrcpControllerService extends ProfileService {
    }

    protected AvrcpControllerStateMachine getStateMachine(BluetoothDevice device) {
        if (device == null) {
            return null;
        }
        return mDeviceStateMap.get(device);
    }

+21 −8
Original line number Diff line number Diff line
@@ -223,6 +223,8 @@ class AvrcpControllerStateMachine extends StateMachine {
        ProfileService.println(sb, "mDevice: " + mDevice.getAddress() + "("
                + mDevice.getName() + ") " + this.toString());
        ProfileService.println(sb, "isActive: " + isActive());
        ProfileService.println(sb, "Control: " + mRemoteControlConnected);
        ProfileService.println(sb, "Browsing: " + mBrowsingConnected);
    }

    @VisibleForTesting
@@ -253,24 +255,39 @@ class AvrcpControllerStateMachine extends StateMachine {
        if (a2dpSinkService == null) {
            return false;
        }

        if (becomeActive) {
            if (isActive()) {
                return true;
            }

            BluetoothDevice previousDevice = sActiveDevice;
            // If we changed devices then send a courtesy pause the previously active device
            if (previousDevice != null) {
                AvrcpControllerStateMachine stateMachine = mService.getStateMachine(previousDevice);
                if (stateMachine != null) {
                    stateMachine.sendMessage(MSG_AVRCP_PASSTHRU,
                            AvrcpControllerService.PASS_THRU_CMD_ID_PAUSE);
                }
            }

            if (a2dpSinkService.setActiveDevice(mDevice)) {
                sActiveDevice = mDevice;
                BluetoothMediaBrowserService.addressedPlayerChanged(mSessionCallbacks);
                BluetoothMediaBrowserService.trackChanged(mAddressedPlayer.getCurrentTrack());
                BluetoothMediaBrowserService.notifyChanged(mAddressedPlayer.getPlaybackState());
                BluetoothMediaBrowserService.notifyChanged(mBrowseTree.mNowPlayingNode);
            }
            return mDevice == sActiveDevice;
        } else if (isActive()) {
            sActiveDevice = null;
            sendMessage(MSG_AVRCP_PASSTHRU, AvrcpControllerService.PASS_THRU_CMD_ID_PAUSE);
            a2dpSinkService.setActiveDevice(null);
            BluetoothMediaBrowserService.trackChanged(null);
            BluetoothMediaBrowserService.notifyChanged(new PlaybackStateCompat.Builder().build());
            BluetoothMediaBrowserService.addressedPlayerChanged(null);
        }

        return true;
    }

@@ -286,10 +303,6 @@ class AvrcpControllerStateMachine extends StateMachine {
    }

    synchronized void onBrowsingConnected() {
        if (mBrowsingConnected) return;
        mService.sBrowseTree.mRootNode.addChild(mBrowseTree.mRootNode);
        BluetoothMediaBrowserService.notifyChanged(mService
                .sBrowseTree.mRootNode);
        mBrowsingConnected = true;
    }

@@ -303,10 +316,6 @@ class AvrcpControllerStateMachine extends StateMachine {
        if (isActive()) {
            BluetoothMediaBrowserService.notifyChanged(mBrowseTree.mNowPlayingNode);
        }
        mService.sBrowseTree.mRootNode.removeChild(
                mBrowseTree.mRootNode);
        BluetoothMediaBrowserService.notifyChanged(mService
                .sBrowseTree.mRootNode);
        removeUnusedArtwork(previousTrackUuid);
        removeUnusedArtworkFromBrowseTree();
        mBrowsingConnected = false;
@@ -450,6 +459,8 @@ class AvrcpControllerStateMachine extends StateMachine {
            if (mMostRecentState == BluetoothProfile.STATE_CONNECTING) {
                requestActive();
                broadcastConnectionStateChanged(BluetoothProfile.STATE_CONNECTED);
                mService.sBrowseTree.mRootNode.addChild(mBrowseTree.mRootNode);
                BluetoothMediaBrowserService.notifyChanged(mService.sBrowseTree.mRootNode);
                connectCoverArt(); // only works if we have a valid PSM
            } else {
                logD("ReEnteringConnected");
@@ -970,6 +981,8 @@ class AvrcpControllerStateMachine extends StateMachine {
        public void enter() {
            disconnectCoverArt();
            onBrowsingDisconnected();
            mService.sBrowseTree.mRootNode.removeChild(mBrowseTree.mRootNode);
            BluetoothMediaBrowserService.notifyChanged(mService.sBrowseTree.mRootNode);
            setActive(false);
            broadcastConnectionStateChanged(BluetoothProfile.STATE_DISCONNECTING);
            transitionTo(mDisconnected);