Fix problems with wiring of initializing calls (2/2)

Bug: 16993846
Change-Id: Iee3b33fb01d1a567532d791496aa03f908c22bf6
diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 9d587ab..147bdfa 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -1200,6 +1200,8 @@
 
     private int getStateFromConnectionState(int state) {
         switch (state) {
+            case Connection.STATE_INITIALIZING:
+                return CallState.CONNECTING;
             case Connection.STATE_ACTIVE:
                 return CallState.ACTIVE;
             case Connection.STATE_DIALING:
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 9cade3d..0d10b17 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -642,6 +642,13 @@
     }
 
     /**
+     * Removes an existing disconnected call, and notifies the in-call app.
+     */
+    void markCallAsRemoved(Call call) {
+        removeCall(call);
+    }
+
+    /**
      * Cleans up any calls currently associated with the specified connection service when the
      * service binder disconnects unexpectedly.
      *
diff --git a/src/com/android/telecomm/ConnectionServiceWrapper.java b/src/com/android/telecomm/ConnectionServiceWrapper.java
index 2d5ade2..88b2fa4 100644
--- a/src/com/android/telecomm/ConnectionServiceWrapper.java
+++ b/src/com/android/telecomm/ConnectionServiceWrapper.java
@@ -236,8 +236,18 @@
                     }
                     break;
                 }
-                case MSG_REMOVE_CALL:
+                case MSG_REMOVE_CALL: {
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        if (call.isActive()) {
+                            mCallsManager.markCallAsDisconnected(
+                                    call, DisconnectCause.NORMAL, null);
+                        } else {
+                            mCallsManager.markCallAsRemoved(call);
+                        }
+                    }
                     break;
+                }
                 case MSG_ON_POST_DIAL_WAIT: {
                     SomeArgs args = (SomeArgs) msg.obj;
                     try {
@@ -475,6 +485,9 @@
         @Override
         public void removeCall(String callId) {
             logIncoming("removeCall %s", callId);
+            if (mCallIdMapper.isValidCallId(callId)) {
+                mHandler.obtainMessage(MSG_REMOVE_CALL, callId).sendToTarget();
+            }
         }
 
         @Override