Loading src/com/android/server/telecom/CallAudioRouteStateMachine.java +17 −2 Original line number Diff line number Diff line Loading @@ -1640,8 +1640,23 @@ public class CallAudioRouteStateMachine extends StateMachine { private void setSpeakerphoneOn(boolean on) { Log.i(this, "turning speaker phone %s", on); mAudioManager.setSpeakerphoneOn(on); mStatusBarNotifier.notifySpeakerphone(on); AudioDeviceInfo speakerDevice = null; for (AudioDeviceInfo info : mAudioManager.getAvailableCommunicationDevices()) { if (info.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) { speakerDevice = info; break; } } boolean speakerOn = false; if (speakerDevice != null && on) { boolean result = mAudioManager.setCommunicationDevice(speakerDevice); if (result) { speakerOn = true; } } else { mAudioManager.clearCommunicationDevice(); } mStatusBarNotifier.notifySpeakerphone(speakerOn); } private void setBluetoothOn(String address) { Loading tests/src/com/android/server/telecom/tests/BasicCallTests.java +7 −3 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.IContentProvider; import android.content.pm.PackageManager; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.net.Uri; import android.os.Binder; Loading Loading @@ -637,14 +638,17 @@ public class BasicCallTests extends TelecomSystemTest { mInCallServiceFixtureX.mInCallAdapter.setAudioRoute(CallAudioState.ROUTE_SPEAKER, null); waitForHandlerAction(mTelecomSystem.getCallsManager().getCallAudioManager() .getCallAudioRouteStateMachine().getHandler(), TEST_TIMEOUT); verify(audioManager, timeout(TEST_TIMEOUT)) .setSpeakerphoneOn(true); ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor = ArgumentCaptor.forClass(AudioDeviceInfo.class); verify(audioManager, timeout(TEST_TIMEOUT)).setCommunicationDevice( infoArgumentCaptor.capture()); assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, infoArgumentCaptor.getValue().getType()); mInCallServiceFixtureX.mInCallAdapter.setAudioRoute(CallAudioState.ROUTE_EARPIECE, null); waitForHandlerAction(mTelecomSystem.getCallsManager().getCallAudioManager() .getCallAudioRouteStateMachine().getHandler(), TEST_TIMEOUT); // setSpeakerPhoneOn(false) gets called once during the call initiation phase verify(audioManager, timeout(TEST_TIMEOUT).atLeast(1)) .setSpeakerphoneOn(false); .clearCommunicationDevice(); mConnectionServiceFixtureA. sendSetDisconnected(outgoing.mConnectionId, DisconnectCause.REMOTE); Loading tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java +5 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.media.IAudioService; import android.os.HandlerThread; Loading Loading @@ -562,7 +563,10 @@ public class CallAudioRouteStateMachineTest extends TelecomTestCase { // Make sure that we've successfully switched to the active speaker route and that we've // called setSpeakerOn assertTrue(stateMachine.isInActiveState()); verify(mockAudioManager).setSpeakerphoneOn(true); ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor = ArgumentCaptor.forClass( AudioDeviceInfo.class); verify(mockAudioManager).setCommunicationDevice(infoArgumentCaptor.capture()); assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, infoArgumentCaptor.getValue().getType()); } @SmallTest Loading tests/src/com/android/server/telecom/tests/CallAudioRouteTransitionTests.java +12 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; Loading @@ -30,6 +31,7 @@ import static org.mockito.Mockito.when; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.media.IAudioService; import android.os.Handler; Loading Loading @@ -325,11 +327,18 @@ public class CallAudioRouteTransitionTests extends TelecomTestCase { switch (mParams.speakerInteraction) { case NONE: verify(mockAudioManager, never()).setSpeakerphoneOn(any(Boolean.class)); verify(mockAudioManager, never()).setCommunicationDevice( any(AudioDeviceInfo.class)); break; case ON: ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor = ArgumentCaptor.forClass( AudioDeviceInfo.class); verify(mockAudioManager).setCommunicationDevice(infoArgumentCaptor.capture()); assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, infoArgumentCaptor.getValue().getType()); break; case ON: // fall through case OFF: verify(mockAudioManager).setSpeakerphoneOn(mParams.speakerInteraction == ON); verify(mockAudioManager).clearCommunicationDevice(); break; case OPTIONAL: // optional, don't test Loading Loading
src/com/android/server/telecom/CallAudioRouteStateMachine.java +17 −2 Original line number Diff line number Diff line Loading @@ -1640,8 +1640,23 @@ public class CallAudioRouteStateMachine extends StateMachine { private void setSpeakerphoneOn(boolean on) { Log.i(this, "turning speaker phone %s", on); mAudioManager.setSpeakerphoneOn(on); mStatusBarNotifier.notifySpeakerphone(on); AudioDeviceInfo speakerDevice = null; for (AudioDeviceInfo info : mAudioManager.getAvailableCommunicationDevices()) { if (info.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) { speakerDevice = info; break; } } boolean speakerOn = false; if (speakerDevice != null && on) { boolean result = mAudioManager.setCommunicationDevice(speakerDevice); if (result) { speakerOn = true; } } else { mAudioManager.clearCommunicationDevice(); } mStatusBarNotifier.notifySpeakerphone(speakerOn); } private void setBluetoothOn(String address) { Loading
tests/src/com/android/server/telecom/tests/BasicCallTests.java +7 −3 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.IContentProvider; import android.content.pm.PackageManager; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.net.Uri; import android.os.Binder; Loading Loading @@ -637,14 +638,17 @@ public class BasicCallTests extends TelecomSystemTest { mInCallServiceFixtureX.mInCallAdapter.setAudioRoute(CallAudioState.ROUTE_SPEAKER, null); waitForHandlerAction(mTelecomSystem.getCallsManager().getCallAudioManager() .getCallAudioRouteStateMachine().getHandler(), TEST_TIMEOUT); verify(audioManager, timeout(TEST_TIMEOUT)) .setSpeakerphoneOn(true); ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor = ArgumentCaptor.forClass(AudioDeviceInfo.class); verify(audioManager, timeout(TEST_TIMEOUT)).setCommunicationDevice( infoArgumentCaptor.capture()); assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, infoArgumentCaptor.getValue().getType()); mInCallServiceFixtureX.mInCallAdapter.setAudioRoute(CallAudioState.ROUTE_EARPIECE, null); waitForHandlerAction(mTelecomSystem.getCallsManager().getCallAudioManager() .getCallAudioRouteStateMachine().getHandler(), TEST_TIMEOUT); // setSpeakerPhoneOn(false) gets called once during the call initiation phase verify(audioManager, timeout(TEST_TIMEOUT).atLeast(1)) .setSpeakerphoneOn(false); .clearCommunicationDevice(); mConnectionServiceFixtureA. sendSetDisconnected(outgoing.mConnectionId, DisconnectCause.REMOTE); Loading
tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java +5 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.media.IAudioService; import android.os.HandlerThread; Loading Loading @@ -562,7 +563,10 @@ public class CallAudioRouteStateMachineTest extends TelecomTestCase { // Make sure that we've successfully switched to the active speaker route and that we've // called setSpeakerOn assertTrue(stateMachine.isInActiveState()); verify(mockAudioManager).setSpeakerphoneOn(true); ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor = ArgumentCaptor.forClass( AudioDeviceInfo.class); verify(mockAudioManager).setCommunicationDevice(infoArgumentCaptor.capture()); assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, infoArgumentCaptor.getValue().getType()); } @SmallTest Loading
tests/src/com/android/server/telecom/tests/CallAudioRouteTransitionTests.java +12 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; Loading @@ -30,6 +31,7 @@ import static org.mockito.Mockito.when; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.media.IAudioService; import android.os.Handler; Loading Loading @@ -325,11 +327,18 @@ public class CallAudioRouteTransitionTests extends TelecomTestCase { switch (mParams.speakerInteraction) { case NONE: verify(mockAudioManager, never()).setSpeakerphoneOn(any(Boolean.class)); verify(mockAudioManager, never()).setCommunicationDevice( any(AudioDeviceInfo.class)); break; case ON: ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor = ArgumentCaptor.forClass( AudioDeviceInfo.class); verify(mockAudioManager).setCommunicationDevice(infoArgumentCaptor.capture()); assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, infoArgumentCaptor.getValue().getType()); break; case ON: // fall through case OFF: verify(mockAudioManager).setSpeakerphoneOn(mParams.speakerInteraction == ON); verify(mockAudioManager).clearCommunicationDevice(); break; case OPTIONAL: // optional, don't test Loading