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

Commit da111027 authored by Qing Zhong's avatar Qing Zhong Committed by Android (Google) Code Review
Browse files

Merge "Add available_routes_never_updated_after_set_system_audio_state flag." into main

parents 4659f381 01ca83b4
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.telecom;


import android.annotation.FlaggedApi;
import android.app.ActivityManager;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
@@ -1751,6 +1752,7 @@ public class CallAudioRouteStateMachine extends StateMachine {
                }
                return;
            case UPDATE_SYSTEM_AUDIO_ROUTE:
                if (mFeatureFlags.availableRoutesNeverUpdatedAfterSetSystemAudioState()) {
                    // Ensure available routes is updated.
                    updateRouteForForegroundCall();
                    // Ensure current audio state gets updated to take this into account.
@@ -1758,6 +1760,11 @@ public class CallAudioRouteStateMachine extends StateMachine {
                    // Either resend the current audio state as it stands, or update to reflect any
                    // changes put into place based on mAvailableRoutes
                    setSystemAudioState(mCurrentCallAudioState, true);
                } else {
                    updateInternalCallAudioState();
                    updateRouteForForegroundCall();
                    resendSystemAudioState();
                }
                return;
            case RUN_RUNNABLE:
                java.lang.Runnable r = (java.lang.Runnable) msg.obj;
+56 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.telecom.tests;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
@@ -224,7 +225,7 @@ public class CallAudioRouteStateMachineTest extends TelecomTestCase {

    @SmallTest
    @Test
    public void testSystemAudioStateIsUpdated() {
    public void testSystemAudioStateIsNotUpdatedFlagOff() {
        CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine(
                mContext,
                mockCallsManager,
@@ -241,6 +242,60 @@ public class CallAudioRouteStateMachineTest extends TelecomTestCase {

        Set<Call> trackedCalls = new HashSet<>(Arrays.asList(fakeCall, fakeSelfManagedCall));
        when(mockCallsManager.getTrackedCalls()).thenReturn(trackedCalls);
        when(mFeatureFlags.availableRoutesNeverUpdatedAfterSetSystemAudioState()).thenReturn(false);

        // start state --> ROUTE_EARPIECE
        CallAudioState initState = new CallAudioState(false, CallAudioState.ROUTE_EARPIECE,
                CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_SPEAKER);
        stateMachine.initialize(initState);

        stateMachine.setCallAudioManager(mockCallAudioManager);

        assertEquals(stateMachine.getCurrentCallAudioState().getRoute(),
                CallAudioRouteStateMachine.ROUTE_EARPIECE);

        // ROUTE_EARPIECE  --> ROUTE_SPEAKER
        stateMachine.sendMessageWithSessionInfo(CallAudioRouteStateMachine.SWITCH_SPEAKER,
                CallAudioRouteStateMachine.SPEAKER_ON);

        stateMachine.sendMessageWithSessionInfo(
                CallAudioRouteStateMachine.UPDATE_SYSTEM_AUDIO_ROUTE);

        waitForHandlerAction(stateMachine.getHandler(), TEST_TIMEOUT);
        waitForHandlerAction(stateMachine.getHandler(), TEST_TIMEOUT);

        CallAudioState expectedCallAudioState = stateMachine.getLastKnownCallAudioState();

        // assert expected end state
        assertEquals(stateMachine.getCurrentCallAudioState().getRoute(),
                CallAudioRouteStateMachine.ROUTE_SPEAKER);
        // should update the audio route on all tracked calls ...
        verify(mockConnectionServiceWrapper, times(trackedCalls.size()))
                .onCallAudioStateChanged(any(), any());

        assertNotEquals(expectedCallAudioState, stateMachine.getCurrentCallAudioState());
    }

    @SmallTest
    @Test
    public void testSystemAudioStateIsUpdatedFlagOn() {
        CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine(
                mContext,
                mockCallsManager,
                mockBluetoothRouteManager,
                mockWiredHeadsetManager,
                mockStatusBarNotifier,
                mAudioServiceFactory,
                CallAudioRouteStateMachine.EARPIECE_AUTO_DETECT,
                mThreadHandler.getLooper(),
                Runnable::run /** do async stuff sync for test purposes */,
                mCommunicationDeviceTracker,
                mFeatureFlags);
        stateMachine.setCallAudioManager(mockCallAudioManager);

        Set<Call> trackedCalls = new HashSet<>(Arrays.asList(fakeCall, fakeSelfManagedCall));
        when(mockCallsManager.getTrackedCalls()).thenReturn(trackedCalls);
        when(mFeatureFlags.availableRoutesNeverUpdatedAfterSetSystemAudioState()).thenReturn(true);

        // start state --> ROUTE_EARPIECE
        CallAudioState initState = new CallAudioState(false, CallAudioState.ROUTE_EARPIECE,