diff options
author | Treehugger Robot <android-build-prod@system.gserviceaccount.com> | 2022-02-24 08:35:57 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-02-24 08:35:57 +0000 |
commit | 3e2abcb11d3e916877d9d105e54e54929ad189c2 (patch) | |
tree | 35871d089ca14cc4c2fe0c4b13864a6b6ca867c5 | |
parent | 029413016c5d4239d498b09b2c8fc96cb6bceea2 (diff) | |
parent | c5e97a4057104890148c4730db333d45f9ab032c (diff) |
Merge "IMS: Fix the crashes in MT conference call" into s-keystone-qcom-dev
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 7d374381a5..8a013db173 100644 --- a/src/com/android/services/telephony/ImsConferenceController.java +++ b/src/com/android/services/telephony/ImsConferenceController.java @@ -448,6 +448,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 116e13b9c0..0abbce756e 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) { |