diff options
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) { |