Merge "Invoke call cleanup on handover from GSM to IMS." into oc-dr1-dev
diff --git a/src/com/android/services/telephony/PstnIncomingCallNotifier.java b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
index 381c131..e52ca72 100644
--- a/src/com/android/services/telephony/PstnIncomingCallNotifier.java
+++ b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
@@ -30,7 +30,9 @@
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Connection;
+import com.android.internal.telephony.GsmCdmaPhone;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
 import com.android.internal.telephony.imsphone.ImsExternalCallTracker;
 import com.android.internal.telephony.imsphone.ImsExternalConnection;
@@ -320,14 +322,16 @@
             if (original instanceof ImsExternalConnection) {
                 return true;
             }
-            // Since we have set the new connection as the original connection, disconnect the old
-            // one, since it is no longer needed.
-            try {
-                original.hangup();
-                Log.i(this, "Hung up original connection: " + original);
-            } catch (CallStateException e) {
-                Log.w(this, "Couldn't hang up original connection: " + original + ", Error: "
-                        + e.getError());
+            // If the connection we're replacing was a GSM or CDMA connection, call upon the call
+            // tracker to perform cleanup of calls.  This ensures that we don't end up with a
+            // call stuck in the call tracker preventing other calls from being placed.
+            if (original.getCall() != null && original.getCall().getPhone() != null &&
+                    original.getCall().getPhone() instanceof GsmCdmaPhone) {
+
+                GsmCdmaPhone phone = (GsmCdmaPhone) original.getCall().getPhone();
+                phone.getCallTracker().cleanupCalls();
+                Log.i(this, "maybeSwapWithUnknownConnection - Invoking call tracker cleanup "
+                        + "for connection: " + original);
             }
             return true;
         }