Add support for handover connections
Change original connections during handover as a result of SRVCC
or Silent Redial.
Bug: 17307064, 17288974
Change-Id: I62ff0fee01d5f1cabca8afdf34730ee7b10fa5d5
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 9d6b298..4d9709a 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -39,6 +39,7 @@
abstract class TelephonyConnection extends Connection {
private static final int MSG_PRECISE_CALL_STATE_CHANGED = 1;
private static final int MSG_RINGBACK_TONE = 2;
+ private static final int MSG_HANDOVER_STATE_CHANGED = 3;
private final Handler mHandler = new Handler() {
@Override
@@ -48,6 +49,13 @@
Log.v(TelephonyConnection.this, "MSG_PRECISE_CALL_STATE_CHANGED");
updateState();
break;
+ case MSG_HANDOVER_STATE_CHANGED:
+ Log.v(TelephonyConnection.this, "MSG_HANDOVER_STATE_CHANGED");
+ AsyncResult ar = (AsyncResult) msg.obj;
+ com.android.internal.telephony.Connection connection =
+ (com.android.internal.telephony.Connection) ar.result;
+ setOriginalConnection(connection);
+ break;
case MSG_RINGBACK_TONE:
Log.v(TelephonyConnection.this, "MSG_RINGBACK_TONE");
// TODO: This code assumes that there is only one connection in the foreground
@@ -358,9 +366,16 @@
void setOriginalConnection(com.android.internal.telephony.Connection originalConnection) {
Log.v(this, "new TelephonyConnection, originalConnection: " + originalConnection);
+ if (mOriginalConnection != null) {
+ getPhone().unregisterForPreciseCallStateChanged(mHandler);
+ getPhone().unregisterForRingbackTone(mHandler);
+ getPhone().unregisterForHandoverStateChanged(mHandler);
+ }
mOriginalConnection = originalConnection;
getPhone().registerForPreciseCallStateChanged(
mHandler, MSG_PRECISE_CALL_STATE_CHANGED, null);
+ getPhone().registerForHandoverStateChanged(
+ mHandler, MSG_HANDOVER_STATE_CHANGED, null);
getPhone().registerForRingbackTone(mHandler, MSG_RINGBACK_TONE, null);
mOriginalConnection.addPostDialListener(mPostDialListener);
mOriginalConnection.addListener(mOriginalConnectionListener);
@@ -507,6 +522,7 @@
if (getPhone() != null) {
getPhone().unregisterForPreciseCallStateChanged(mHandler);
getPhone().unregisterForRingbackTone(mHandler);
+ getPhone().unregisterForHandoverStateChanged(mHandler);
}
mOriginalConnection = null;
destroy();