Do not process call intent if call already disconnected

In cases of very quick call and hangup (delay of 0.1 sec using
automation) the call itself will go from NEW -> CONNECTING ->
DISCONNECTED but the CallIntentProcessor will still make the outgoing
call since it does not check the current call state for it has been
disconnected.

Bug: b/28969591
Change-Id: I1de45ff342db3e2552824c17f9f73f9c3a2579d9
diff --git a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
index 2e5b0e1..4d3fb84 100644
--- a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
@@ -131,6 +131,13 @@
                     return;
                 }
 
+                // If this call is already disconnected then we have nothing more to do.
+                if (mCall.isDisconnected()) {
+                    Log.w(this,
+                        "Call has already been disconnected, ignore the broadcast Call %s", mCall);
+                    return;
+                }
+
                 Uri resultHandleUri = Uri.fromParts(
                         mPhoneNumberUtilsAdapter.isUriNumber(resultNumber) ?
                                 PhoneAccount.SCHEME_SIP : PhoneAccount.SCHEME_TEL,
diff --git a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
index 4428c34..a7d98db 100644
--- a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
+++ b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
@@ -127,6 +127,20 @@
     }
 
     @SmallTest
+    public void testAlreadyDisconnectedCall() {
+        Uri handle = Uri.parse("tel:6505551234");
+        doReturn(true).when(mCall).isDisconnected();
+        Intent callIntent = buildIntent(handle, Intent.ACTION_CALL, null);
+        ReceiverIntentPair result = regularCallTestHelper(callIntent, null);
+
+        result.receiver.setResultData(
+                result.intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
+
+        result.receiver.onReceive(mContext, result.intent);
+        verifyNoCallPlaced();
+    }
+
+    @SmallTest
     public void testNoNumberSupplied() {
         Uri handle = Uri.parse("tel:");
         Intent intent = new Intent(Intent.ACTION_CALL, handle);