diff options
author | Kunduz Baryktabasova <kunduz@google.com> | 2023-10-24 23:24:41 +0000 |
---|---|---|
committer | Kunduz Baryktabasova <kunduz@google.com> | 2023-11-01 15:31:10 +0000 |
commit | 01ca83b4aa7152b2e04c98b4a3d937efc4d9bc99 (patch) | |
tree | 7056e3f6ad1685ea6560ed252cebbccbfc0ffb07 | |
parent | 95cce436b5d132acab0b55aaeea8922369773a25 (diff) | |
download | Telecomm-01ca83b4aa7152b2e04c98b4a3d937efc4d9bc99.tar.gz |
Add available_routes_never_updated_after_set_system_audio_state flag.
Bug: 292599751
Test: N/A
Change-Id: If28d337898043e883aaee21ba16ef878e99646c2
-rw-r--r-- | src/com/android/server/telecom/CallAudioRouteStateMachine.java | 21 | ||||
-rw-r--r-- | tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java | 57 |
2 files changed, 70 insertions, 8 deletions
diff --git a/src/com/android/server/telecom/CallAudioRouteStateMachine.java b/src/com/android/server/telecom/CallAudioRouteStateMachine.java index e1ea9fec0..f63463f6a 100644 --- a/src/com/android/server/telecom/CallAudioRouteStateMachine.java +++ b/src/com/android/server/telecom/CallAudioRouteStateMachine.java @@ -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,13 +1752,19 @@ public class CallAudioRouteStateMachine extends StateMachine { } return; case UPDATE_SYSTEM_AUDIO_ROUTE: - // Ensure available routes is updated. - updateRouteForForegroundCall(); - // Ensure current audio state gets updated to take this into account. - updateInternalCallAudioState(); - // Either resend the current audio state as it stands, or update to reflect any - // changes put into place based on mAvailableRoutes - setSystemAudioState(mCurrentCallAudioState, true); + if (mFeatureFlags.availableRoutesNeverUpdatedAfterSetSystemAudioState()) { + // Ensure available routes is updated. + updateRouteForForegroundCall(); + // Ensure current audio state gets updated to take this into account. + updateInternalCallAudioState(); + // 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; diff --git a/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java b/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java index 253381c0b..9055dafaf 100644 --- a/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java +++ b/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java @@ -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, |