Disconnect all calls that are not reused when placing new call

This fixes a bug with Google voice calls where a call that was not
reused was causing future calls to be rejected.

Also log an error when there is no more room for an outgoing call
to make it easier to debug.

Bug: 18481759
Change-Id: I20da180211d81fdf23e50479619a1f6a8a303c9b
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 1697d38..be2e25b 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -412,13 +412,19 @@
     private Call getNewOutgoingCall(Uri handle) {
         // First check to see if we can reuse any of the calls that are waiting to disconnect.
         // See {@link Call#abort} and {@link #onCanceledViaNewOutgoingCall} for more information.
+        Call reusedCall = null;
         for (Call pendingCall : mPendingCallsToDisconnect) {
-            if (Objects.equals(pendingCall.getHandle(), handle)) {
+            if (reusedCall == null && Objects.equals(pendingCall.getHandle(), handle)) {
                 mPendingCallsToDisconnect.remove(pendingCall);
                 Log.i(this, "Reusing disconnected call %s", pendingCall);
-                return pendingCall;
+                reusedCall = pendingCall;
+            } else {
+                pendingCall.disconnect();
             }
         }
+        if (reusedCall != null) {
+            return reusedCall;
+        }
 
         // Create a call with original handle. The handle may be changed when the call is attached
         // to a connection service, but in most cases will remain the same.
@@ -484,6 +490,7 @@
         // a call, or cancel this call altogether.
         if (!isPotentialInCallMMICode && !makeRoomForOutgoingCall(call, isEmergencyCall)) {
             // just cancel at this point.
+            Log.i(this, "No remaining room for outgoing call: %s", call);
             if (mCalls.contains(call)) {
                 // This call can already exist if it is a reused call,
                 // See {@link #getNewOutgoingCall}.