summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/phone/PhoneUtils.java2
-rwxr-xr-xsrc/com/android/services/telephony/ImsConference.java29
-rw-r--r--src/com/android/services/telephony/ImsConferenceController.java2
-rw-r--r--src/com/android/services/telephony/TelephonyConnectionService.java4
4 files changed, 28 insertions, 9 deletions
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index 98090ab14f..e4d0af4c51 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -771,7 +771,7 @@ public class PhoneUtils {
// TODO: Should use some sort of special hidden flag to decorate this account as
// an emergency-only account
String id = isEmergency ? EMERGENCY_ACCOUNT_HANDLE_ID : prefix +
- String.valueOf(phone.getFullIccSerialNumber());
+ String.valueOf((phone != null) ? phone.getFullIccSerialNumber() : null);
return makePstnPhoneAccountHandleWithPrefix(id, prefix, isEmergency);
}
diff --git a/src/com/android/services/telephony/ImsConference.java b/src/com/android/services/telephony/ImsConference.java
index 98b0840e3f..1e39fb0335 100755
--- a/src/com/android/services/telephony/ImsConference.java
+++ b/src/com/android/services/telephony/ImsConference.java
@@ -488,8 +488,17 @@ public class ImsConference extends TelephonyConferenceBase implements Holdable {
// Specify the connection time of the conference to be the connection time of the original
// connection.
- long connectTime = conferenceHost.getOriginalConnection().getConnectTime();
- long connectElapsedTime = conferenceHost.getOriginalConnection().getConnectTimeReal();
+ com.android.internal.telephony.Connection originalConnection =
+ conferenceHost.getOriginalConnection();
+ //In MT IMS conference call, it will cleanup TelephonyConnection which backed the original
+ //connection and remove from telecom, originalConnection will become null, so initialize
+ //'connectTime' and 'connectElapsedTime' when new ImsConference.
+ long connectTime = 0;
+ long connectElapsedTime = 0;
+ if (originalConnection != null ) {
+ connectTime = originalConnection.getConnectTime();
+ connectElapsedTime = originalConnection.getConnectTimeReal();
+ }
setConnectionTime(connectTime);
setConnectionStartElapsedRealtimeMillis(connectElapsedTime);
// Set the connectTime in the connection as well.
@@ -1533,13 +1542,19 @@ public class ImsConference extends TelephonyConferenceBase implements Holdable {
if (mConferenceHost == null) {
disconnectCause = new DisconnectCause(DisconnectCause.CANCELED);
} else {
+ com.android.internal.telephony.Connection originalConnection =
+ mConferenceHost.getOriginalConnection();
if (mConferenceHost.getPhone() != null) {
- disconnectCause = DisconnectCauseUtil.toTelecomDisconnectCause(
- mConferenceHost.getOriginalConnection().getDisconnectCause(),
- null, mConferenceHost.getPhone().getPhoneId());
+ disconnectCause = originalConnection != null ?
+ DisconnectCauseUtil.toTelecomDisconnectCause(
+ originalConnection.getDisconnectCause(),
+ null, mConferenceHost.getPhone().getPhoneId())
+ : new DisconnectCause(DisconnectCause.UNKNOWN);
} else {
- disconnectCause = DisconnectCauseUtil.toTelecomDisconnectCause(
- mConferenceHost.getOriginalConnection().getDisconnectCause());
+ disconnectCause = originalConnection != null ?
+ DisconnectCauseUtil.toTelecomDisconnectCause(
+ originalConnection.getDisconnectCause())
+ : new DisconnectCause(DisconnectCause.UNKNOWN);
}
}
setDisconnected(disconnectCause);
diff --git a/src/com/android/services/telephony/ImsConferenceController.java b/src/com/android/services/telephony/ImsConferenceController.java
index 4631ab5d83..b4b572d203 100644
--- a/src/com/android/services/telephony/ImsConferenceController.java
+++ b/src/com/android/services/telephony/ImsConferenceController.java
@@ -438,6 +438,8 @@ public class ImsConferenceController {
conferenceHostConnection.setVideoPauseSupported(connection.getVideoPauseSupported());
conferenceHostConnection.setManageImsConferenceCallSupported(
connection.isManageImsConferenceCallSupported());
+ conferenceHostConnection.setTelephonyConnectionService(
+ connection.getTelephonyConnectionService());
// WARNING: do not try to copy the video provider from connection to
// conferenceHostConnection here. In connection.cloneConnection, part of the clone
// process is to set the original connection so it's already set:
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 6feb706ab3..1e1e15abb6 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -672,7 +672,6 @@ public class TelephonyConnectionService extends ConnectionService {
}
TelephonyConnection connection = (TelephonyConnection)conn;
-
ImsConference conference = new ImsConference(TelecomAccountRegistry.getInstance(this),
mTelephonyConnectionServiceProxy, connection,
phoneAccountHandle, () -> true,
@@ -2827,6 +2826,9 @@ public class TelephonyConnectionService extends ConnectionService {
// when we go between CDMA and GSM we should replace the TelephonyConnection.
if (connection.isImsConnection()) {
Log.d(this, "Adding IMS connection to conference controller: " + connection);
+ if (connection.getTelephonyConnectionService() == null) {
+ connection.setTelephonyConnectionService(this);
+ }
mImsConferenceController.add(connection);
mTelephonyConferenceController.remove(connection);
if (connection instanceof CdmaConnection) {