Reduce latency for InCallUI by adding an intermediate state

Immediately add a call to Telecomm before the outgoing call broadcast
intent returns, this will reduce the latency for the InCallUI by
allowing the InCallActivity to start before Telecomm has responded.

Bug: 16396523

Change-Id: I4edd533083d3d7edb7a14d179c174223374a4282
diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 607d994..0e231b0 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -21,10 +21,12 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
+import android.net.Uri;
 import android.os.Bundle;
 import android.telecomm.PhoneAccountHandle;
 import android.telecomm.TelecommManager;
 import android.telecomm.TelecommManager;
+import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
 /**
@@ -105,8 +107,17 @@
      * @param intent Call intent containing data about the handle to call.
      */
     private void processOutgoingCallIntent(Intent intent) {
+        String uriString = intent.getData().getSchemeSpecificPart();
+        Uri handle = Uri.fromParts(
+                PhoneNumberUtils.isUriNumber(uriString) ? "sip" : "tel", uriString, null);
+        PhoneAccountHandle phoneAccountHandle = intent.getParcelableExtra(
+                TelecommManager.EXTRA_PHONE_ACCOUNT_HANDLE);
+
+        // Send to CallsManager to ensure the InCallUI gets kicked off before the broadcast returns
+        Call call = mCallsManager.startOutgoingCall(handle, phoneAccountHandle);
+
         NewOutgoingCallIntentBroadcaster broadcaster = new NewOutgoingCallIntentBroadcaster(
-                mCallsManager, intent, isDefaultDialer());
+                mCallsManager, call, intent, isDefaultDialer());
         final boolean success = broadcaster.processIntent();
         setResult(success ? RESULT_OK : RESULT_CANCELED);
     }