Hang up original swapped connection
In the past, when we swapped an unknown connection with
an old original connection, we did not hang up the call.
This causes the old connection to stay active in the
CallTracker and can block new calls.
Bug: 62114647
Test: Manual E911 Testing
Change-Id: I68928e3a419f7ecc059f33142a6c6efb19eecbac
diff --git a/src/com/android/services/telephony/PstnIncomingCallNotifier.java b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
index 47fac6a..72b659e 100644
--- a/src/com/android/services/telephony/PstnIncomingCallNotifier.java
+++ b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
@@ -16,10 +16,6 @@
package com.android.services.telephony;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.net.Uri;
import android.os.AsyncResult;
import android.os.Bundle;
@@ -34,13 +30,7 @@
import com.android.internal.telephony.Call;
import com.android.internal.telephony.CallStateException;
import com.android.internal.telephony.Connection;
-import com.android.internal.telephony.DriverCall;
-import com.android.internal.telephony.GsmCdmaCallTracker;
-import com.android.internal.telephony.GsmCdmaConnection;
-import com.android.internal.telephony.GsmCdmaPhone;
import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.TelephonyComponentFactory;
-import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
import com.android.internal.telephony.imsphone.ImsExternalCallTracker;
import com.android.internal.telephony.imsphone.ImsExternalConnection;
@@ -324,6 +314,21 @@
}
telephonyConnection.setOriginalConnection(unknown);
+
+ // Do not call hang up if the original connection is an ImsExternalConnection, it is
+ // not supported.
+ 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());
+ }
return true;
}
return false;