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

Commit 08df3ad6 authored by Hall Liu's avatar Hall Liu
Browse files

Don't track speakerphone state outside calls

To prevent calls from starting in speakerphone, stop tracking
speakerphone state when not in a call.

Test: atest CallAudioRouteTransitionTests
Test: manual -- receive call while playing voicemail over speaker
Fixes: 152939693
Fixes: 161781504
Change-Id: I78d7e46fa6c99bf1e974f98fd4980077a99b39fe
(cherry picked from commit b4077183)
parent c8ac04d2
Loading
Loading
Loading
Loading
+6 −3
Original line number Original line Diff line number Diff line
@@ -459,6 +459,8 @@ public class CallAudioRouteStateMachine extends StateMachine {
            switch (msg.what) {
            switch (msg.what) {
                case SWITCH_EARPIECE:
                case SWITCH_EARPIECE:
                case USER_SWITCH_EARPIECE:
                case USER_SWITCH_EARPIECE:
                case SPEAKER_ON:
                    // Ignore speakerphone state changes outside of calls.
                case SPEAKER_OFF:
                case SPEAKER_OFF:
                    // Nothing to do here
                    // Nothing to do here
                    return HANDLED;
                    return HANDLED;
@@ -484,7 +486,6 @@ public class CallAudioRouteStateMachine extends StateMachine {
                    return HANDLED;
                    return HANDLED;
                case SWITCH_SPEAKER:
                case SWITCH_SPEAKER:
                case USER_SWITCH_SPEAKER:
                case USER_SWITCH_SPEAKER:
                case SPEAKER_ON:
                    transitionTo(mQuiescentSpeakerRoute);
                    transitionTo(mQuiescentSpeakerRoute);
                    return HANDLED;
                    return HANDLED;
                case SWITCH_FOCUS:
                case SWITCH_FOCUS:
@@ -677,12 +678,13 @@ public class CallAudioRouteStateMachine extends StateMachine {
                    return HANDLED;
                    return HANDLED;
                case SWITCH_HEADSET:
                case SWITCH_HEADSET:
                case USER_SWITCH_HEADSET:
                case USER_SWITCH_HEADSET:
                case SPEAKER_ON:
                    // Ignore speakerphone state changes outside of calls.
                case SPEAKER_OFF:
                case SPEAKER_OFF:
                    // Nothing to do
                    // Nothing to do
                    return HANDLED;
                    return HANDLED;
                case SWITCH_SPEAKER:
                case SWITCH_SPEAKER:
                case USER_SWITCH_SPEAKER:
                case USER_SWITCH_SPEAKER:
                case SPEAKER_ON:
                    transitionTo(mQuiescentSpeakerRoute);
                    transitionTo(mQuiescentSpeakerRoute);
                    return HANDLED;
                    return HANDLED;
                case SWITCH_FOCUS:
                case SWITCH_FOCUS:
@@ -1012,6 +1014,8 @@ public class CallAudioRouteStateMachine extends StateMachine {
                    return HANDLED;
                    return HANDLED;
                case SWITCH_BLUETOOTH:
                case SWITCH_BLUETOOTH:
                case USER_SWITCH_BLUETOOTH:
                case USER_SWITCH_BLUETOOTH:
                case SPEAKER_ON:
                    // Ignore speakerphone state changes outside of calls.
                case SPEAKER_OFF:
                case SPEAKER_OFF:
                    // Nothing to do
                    // Nothing to do
                    return HANDLED;
                    return HANDLED;
@@ -1025,7 +1029,6 @@ public class CallAudioRouteStateMachine extends StateMachine {
                    return HANDLED;
                    return HANDLED;
                case SWITCH_SPEAKER:
                case SWITCH_SPEAKER:
                case USER_SWITCH_SPEAKER:
                case USER_SWITCH_SPEAKER:
                case SPEAKER_ON:
                    transitionTo(mQuiescentSpeakerRoute);
                    transitionTo(mQuiescentSpeakerRoute);
                    return HANDLED;
                    return HANDLED;
                case SWITCH_FOCUS:
                case SWITCH_FOCUS:
+5 −1
Original line number Original line Diff line number Diff line
@@ -384,8 +384,12 @@ public class CallAudioRouteTransitionTests extends TelecomTestCase {
        // rest of the system
        // rest of the system
        verifyNoSystemAudioChanges();
        verifyNoSystemAudioChanges();


        // Special case for SPEAKER_ON -- we don't expect any route transitions to happen when
        // there are no calls, so set the expected state to the initial route.
        int expectedRoute = (mParams.action == CallAudioRouteStateMachine.SPEAKER_ON)
                ? mParams.initialRoute : mParams.expectedRoute;
        // Verify the end state
        // Verify the end state
        CallAudioState expectedState = new CallAudioState(false, mParams.expectedRoute,
        CallAudioState expectedState = new CallAudioState(false, expectedRoute,
                mParams.expectedAvailableRoutes | CallAudioState.ROUTE_SPEAKER,
                mParams.expectedAvailableRoutes | CallAudioState.ROUTE_SPEAKER,
                mParams.expectedBluetoothDevice, mParams.availableBluetoothDevices);
                mParams.expectedBluetoothDevice, mParams.availableBluetoothDevices);
        assertEquals(expectedState, stateMachine.getCurrentCallAudioState());
        assertEquals(expectedState, stateMachine.getCurrentCallAudioState());