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);