Loading src/com/android/server/telecom/CallsManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -5076,6 +5076,12 @@ public class CallsManager extends Call.ListenerBase // we can just declare it active. setCallState(mCall, CallState.ACTIVE, "answering simulated ringing"); Log.addEvent(mCall, LogUtils.Events.REQUEST_SIMULATED_ACCEPT); } else if (mCall.getState() == CallState.ANSWERED) { // In certain circumstances, the connection service can lose track of a request // to answer a call. Therefore, if the user presses answer again, still send it // on down, but log a warning in the process and don't change the call state. mCall.answer(mVideoState); Log.w(this, "Duplicate answer request for call %s", mCall.getId()); } if (isSpeakerphoneAutoEnabledForVideoCalls(mVideoState)) { mCall.setStartWithSpeakerphoneOn(true); Loading tests/src/com/android/server/telecom/tests/CallsManagerTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ 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.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -104,6 +106,8 @@ import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -628,6 +632,23 @@ public class CallsManagerTest extends TelecomTestCase { verify(heldCall).unhold(any()); } @SmallTest @Test public void testDuplicateAnswerCall() { Call incomingCall = addSpyCall(CallState.RINGING); doAnswer(invocation -> { doReturn(CallState.ANSWERED).when(incomingCall).getState(); return null; }).when(incomingCall).answer(anyInt()); mCallsManager.answerCall(incomingCall, VideoProfile.STATE_AUDIO_ONLY); verifyFocusRequestAndExecuteCallback(incomingCall); reset(mConnectionSvrFocusMgr); mCallsManager.answerCall(incomingCall, VideoProfile.STATE_AUDIO_ONLY); verifyFocusRequestAndExecuteCallback(incomingCall); verify(incomingCall, times(2)).answer(anyInt()); } @SmallTest @Test public void testAnswerCallWhenOngoingCallCanBeHeld() { Loading Loading
src/com/android/server/telecom/CallsManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -5076,6 +5076,12 @@ public class CallsManager extends Call.ListenerBase // we can just declare it active. setCallState(mCall, CallState.ACTIVE, "answering simulated ringing"); Log.addEvent(mCall, LogUtils.Events.REQUEST_SIMULATED_ACCEPT); } else if (mCall.getState() == CallState.ANSWERED) { // In certain circumstances, the connection service can lose track of a request // to answer a call. Therefore, if the user presses answer again, still send it // on down, but log a warning in the process and don't change the call state. mCall.answer(mVideoState); Log.w(this, "Duplicate answer request for call %s", mCall.getId()); } if (isSpeakerphoneAutoEnabledForVideoCalls(mVideoState)) { mCall.setStartWithSpeakerphoneOn(true); Loading
tests/src/com/android/server/telecom/tests/CallsManagerTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ 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.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -104,6 +106,8 @@ import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -628,6 +632,23 @@ public class CallsManagerTest extends TelecomTestCase { verify(heldCall).unhold(any()); } @SmallTest @Test public void testDuplicateAnswerCall() { Call incomingCall = addSpyCall(CallState.RINGING); doAnswer(invocation -> { doReturn(CallState.ANSWERED).when(incomingCall).getState(); return null; }).when(incomingCall).answer(anyInt()); mCallsManager.answerCall(incomingCall, VideoProfile.STATE_AUDIO_ONLY); verifyFocusRequestAndExecuteCallback(incomingCall); reset(mConnectionSvrFocusMgr); mCallsManager.answerCall(incomingCall, VideoProfile.STATE_AUDIO_ONLY); verifyFocusRequestAndExecuteCallback(incomingCall); verify(incomingCall, times(2)).answer(anyInt()); } @SmallTest @Test public void testAnswerCallWhenOngoingCallCanBeHeld() { Loading