Merge "Modified to operated when acceptRingingCall or endCall in TelecomManager are called with SIMULATED_RING state"
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 08d77a0..0fad81e 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -1930,12 +1930,12 @@
     }
 
     private void acceptRingingCallInternal(int videoState) {
-        Call call = mCallsManager.getFirstCallWithState(CallState.RINGING);
+        Call call = mCallsManager.getFirstCallWithState(CallState.RINGING, CallState.SIMULATED_RINGING);
         if (call != null) {
             if (videoState == DEFAULT_VIDEO_STATE || !isValidAcceptVideoState(videoState)) {
                 videoState = call.getVideoState();
             }
-            call.answer(videoState);
+            mCallsManager.answerCall(call, videoState);
         }
     }
 
@@ -1949,6 +1949,7 @@
                     CallState.DIALING,
                     CallState.PULLING,
                     CallState.RINGING,
+                    CallState.SIMULATED_RINGING,
                     CallState.ON_HOLD);
         }
 
@@ -1958,10 +1959,11 @@
                 return false;
             }
 
-            if (call.getState() == CallState.RINGING) {
-                call.reject(false /* rejectWithMessage */, null, callingPackage);
+            if (call.getState() == CallState.RINGING
+                    || call.getState() == CallState.SIMULATED_RINGING) {
+                mCallsManager.rejectCall(call, false /* rejectWithMessage */, null);
             } else {
-                call.disconnect(0 /* disconnectionTimeout */, callingPackage);
+                mCallsManager.disconnectCall(call);
             }
             return true;
         }
diff --git a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
index 324bca2..815b523 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
@@ -899,7 +899,17 @@
         when(call.getState()).thenReturn(CallState.RINGING);
         when(mFakeCallsManager.getForegroundCall()).thenReturn(call);
         assertTrue(mTSIBinder.endCall(TEST_PACKAGE));
-        verify(call).reject(eq(false), isNull(), eq(TEST_PACKAGE));
+        verify(mFakeCallsManager).rejectCall(eq(call), eq(false), isNull());
+    }
+
+    @SmallTest
+    @Test
+    public void testEndCallWithSimulatedRingingForegroundCall() throws Exception {
+        Call call = mock(Call.class);
+        when(call.getState()).thenReturn(CallState.SIMULATED_RINGING);
+        when(mFakeCallsManager.getForegroundCall()).thenReturn(call);
+        assertTrue(mTSIBinder.endCall(TEST_PACKAGE));
+        verify(mFakeCallsManager).rejectCall(eq(call), eq(false), isNull());
     }
 
     @SmallTest
@@ -909,7 +919,7 @@
         when(call.getState()).thenReturn(CallState.ACTIVE);
         when(mFakeCallsManager.getForegroundCall()).thenReturn(call);
         assertTrue(mTSIBinder.endCall(TEST_PACKAGE));
-        verify(call).disconnect(eq(0L), eq(TEST_PACKAGE));
+        verify(mFakeCallsManager).disconnectCall(eq(call));
     }
 
     @SmallTest
@@ -920,7 +930,7 @@
         when(mFakeCallsManager.getFirstCallWithState(any()))
                 .thenReturn(call);
         assertTrue(mTSIBinder.endCall(TEST_PACKAGE));
-        verify(call).disconnect(eq(0L), eq(TEST_PACKAGE));
+        verify(mFakeCallsManager).disconnectCall(eq(call));
     }
 
     @SmallTest
@@ -933,27 +943,27 @@
     @Test
     public void testAcceptRingingCall() throws Exception {
         Call call = mock(Call.class);
-        when(mFakeCallsManager.getFirstCallWithState(anyInt())).thenReturn(call);
+        when(mFakeCallsManager.getFirstCallWithState(anyInt(), anyInt())).thenReturn(call);
         // Not intended to be a real video state. Here to ensure that the call will be answered
         // with whatever video state it's currently in.
         int fakeVideoState = 29578215;
         when(call.getVideoState()).thenReturn(fakeVideoState);
         mTSIBinder.acceptRingingCall("");
-        verify(call).answer(eq(fakeVideoState));
+        verify(mFakeCallsManager).answerCall(eq(call), eq(fakeVideoState));
     }
 
     @SmallTest
     @Test
     public void testAcceptRingingCallWithValidVideoState() throws Exception {
         Call call = mock(Call.class);
-        when(mFakeCallsManager.getFirstCallWithState(anyInt())).thenReturn(call);
+        when(mFakeCallsManager.getFirstCallWithState(anyInt(), anyInt())).thenReturn(call);
         // Not intended to be a real video state. Here to ensure that the call will be answered
         // with the video state passed in to acceptRingingCallWithVideoState
         int fakeVideoState = 29578215;
         int realVideoState = VideoProfile.STATE_RX_ENABLED | VideoProfile.STATE_TX_ENABLED;
         when(call.getVideoState()).thenReturn(fakeVideoState);
         mTSIBinder.acceptRingingCallWithVideoState("", realVideoState);
-        verify(call).answer(realVideoState);
+        verify(mFakeCallsManager).answerCall(eq(call), eq(realVideoState));
     }
 
     @SmallTest