Loading src/com/android/server/telecom/CallAudioRouteStateMachine.java +14 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading @@ -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; Loading tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java +56 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -224,7 +225,7 @@ public class CallAudioRouteStateMachineTest extends TelecomTestCase { @SmallTest @Test public void testSystemAudioStateIsUpdated() { public void testSystemAudioStateIsNotUpdatedFlagOff() { CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine( mContext, mockCallsManager, Loading @@ -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, Loading Loading
src/com/android/server/telecom/CallAudioRouteStateMachine.java +14 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading @@ -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; Loading
tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java +56 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -224,7 +225,7 @@ public class CallAudioRouteStateMachineTest extends TelecomTestCase { @SmallTest @Test public void testSystemAudioStateIsUpdated() { public void testSystemAudioStateIsNotUpdatedFlagOff() { CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine( mContext, mockCallsManager, Loading @@ -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, Loading