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

Commit aa4a4694 authored by Yuyang Huang's avatar Yuyang Huang
Browse files

when ScoManagedByAudioEnabled, Bluetooth don't suspend a2dp or LE Audio

Audio Framework does the suspend and un-suspend

Bug: 343773577
Bug: 315234036
Flag: com::android::bluetooth::flags::is_sco_managed_by_audio
Test: atest HeadsetStateMachineTest
Change-Id: I4868ac86100d5fdf9f788f5c67f032bb1c0c8231
parent fdd869eb
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -2384,7 +2384,7 @@ public class HeadsetService extends ProfileService {
                }
                }


                // Unsuspend A2DP when SCO connection is gone and call state is idle
                // Unsuspend A2DP when SCO connection is gone and call state is idle
                if (mSystemInterface.isCallIdle()) {
                if (mSystemInterface.isCallIdle() && !Utils.isScoManagedByAudioEnabled()) {
                    mSystemInterface.getAudioManager().setA2dpSuspended(false);
                    mSystemInterface.getAudioManager().setA2dpSuspended(false);
                    if (isAtLeastU()) {
                    if (isAtLeastU()) {
                        mSystemInterface.getAudioManager().setLeAudioSuspended(false);
                        mSystemInterface.getAudioManager().setLeAudioSuspended(false);
+5 −0
Original line number Original line Diff line number Diff line
@@ -1306,6 +1306,11 @@ class HeadsetStateMachine extends StateMachine {
                    break;
                    break;
                case CONNECT_AUDIO:
                case CONNECT_AUDIO:
                    stateLogD("CONNECT_AUDIO, device=" + mDevice);
                    stateLogD("CONNECT_AUDIO, device=" + mDevice);
                    if (Utils.isScoManagedByAudioEnabled()) {
                        stateLogD("ScoManagedByAudioEnabled, BT does not CONNECT_AUDIO");
                        transitionTo(mAudioConnecting);
                        break;
                    }
                    mSystemInterface.getAudioManager().setA2dpSuspended(true);
                    mSystemInterface.getAudioManager().setA2dpSuspended(true);
                    if (isAtLeastU()) {
                    if (isAtLeastU()) {
                        mSystemInterface.getAudioManager().setLeAudioSuspended(true);
                        mSystemInterface.getAudioManager().setLeAudioSuspended(true);
+21 −0
Original line number Original line Diff line number Diff line
@@ -593,6 +593,27 @@ public class HeadsetStateMachineTest {
                IsInstanceOf.instanceOf(HeadsetStateMachine.AudioConnecting.class));
                IsInstanceOf.instanceOf(HeadsetStateMachine.AudioConnecting.class));
    }
    }


    /**
     * Test state transition from Connected to AudioConnecting state via CONNECT_AUDIO message when
     * ScoManagedByAudioEnabled
     */
    @Test
    public void testStateTransition_ConnectedToAudioConnecting_ConnectAudio_ScoManagedbyAudio() {
        mSetFlagsRule.enableFlags(Flags.FLAG_IS_SCO_MANAGED_BY_AUDIO);
        Utils.setIsScoManagedByAudioEnabled(true);

        setUpConnectedState();
        // Send CONNECT_AUDIO message
        mHeadsetStateMachine.sendMessage(HeadsetStateMachine.CONNECT_AUDIO, mTestDevice);
        // verify no native connect audio
        verify(mNativeInterface, never()).connectAudio(mTestDevice);
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());
        Assert.assertThat(
                mHeadsetStateMachine.getCurrentState(),
                IsInstanceOf.instanceOf(HeadsetStateMachine.AudioConnecting.class));
        Utils.setIsScoManagedByAudioEnabled(false);
    }

    /**
    /**
     * Test state transition from Connected to AudioConnecting state via StackEvent.AUDIO_CONNECTING
     * Test state transition from Connected to AudioConnecting state via StackEvent.AUDIO_CONNECTING
     * message
     * message