From add3b8d76e5e468f5740293e8ffb2f1a32666ef3 Mon Sep 17 00:00:00 2001 From: Parvathy Shanmugam Date: Thu, 28 Oct 2021 16:41:12 +0000 Subject: [PATCH 1/2] (IMS Threading refactoring) Telephony IMS classes to schedule IMS callback on the main thread Modified to schedule callbacks on main thread or callback executor rather than on binder thread Introducing utility api runWithCleanCallingIdentity to run the action in executor Test: atest FrameworksTelephonyTests:ImsCallTest Bug: 197989471 Change-Id: Icdb0750d63f242eb79351781a4b75ca745c30083 Merged-In: Icdb0750d63f242eb79351781a4b75ca745c30083 --- .../telephony/util/TelephonyUtils.java | 19 ++ .../android/telephony/ims/ImsCallSession.java | 182 ++++++++++++------ 2 files changed, 143 insertions(+), 58 deletions(-) diff --git a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java index 125296540688..9a991a1b4a9a 100644 --- a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java +++ b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java @@ -107,6 +107,25 @@ public final class TelephonyUtils { } } + /** + * Convenience method for running the provided action in the provided + * executor enclosed in + * {@link Binder#clearCallingIdentity}/{@link Binder#restoreCallingIdentity} + * + * Any exception thrown by the given action will need to be handled by caller. + * + */ + public static void runWithCleanCallingIdentity( + @NonNull Runnable action, @NonNull Executor executor) { + if (action != null) { + if (executor != null) { + executor.execute(() -> runWithCleanCallingIdentity(action)); + } else { + runWithCleanCallingIdentity(action); + } + } + } + /** * Convenience method for running the provided action enclosed in diff --git a/telephony/java/android/telephony/ims/ImsCallSession.java b/telephony/java/android/telephony/ims/ImsCallSession.java index dfe5e6c93f53..6569de626702 100755 --- a/telephony/java/android/telephony/ims/ImsCallSession.java +++ b/telephony/java/android/telephony/ims/ImsCallSession.java @@ -27,10 +27,12 @@ import android.util.Log; import com.android.ims.internal.IImsCallSession; import com.android.ims.internal.IImsVideoCallProvider; +import com.android.internal.telephony.util.TelephonyUtils; import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.concurrent.Executor; /** * Provides the call initiation/termination, and media exchange between two IMS endpoints. @@ -522,6 +524,7 @@ public class ImsCallSession { private final IImsCallSession miSession; private boolean mClosed = false; private Listener mListener; + private Executor mListenerExecutor = Runnable::run; /** @hide */ public ImsCallSession(IImsCallSession iSession) { @@ -538,9 +541,9 @@ public class ImsCallSession { } /** @hide */ - public ImsCallSession(IImsCallSession iSession, Listener listener) { + public ImsCallSession(IImsCallSession iSession, Listener listener, Executor executor) { this(iSession); - setListener(listener); + setListener(listener, executor); } /** @@ -738,10 +741,14 @@ public class ImsCallSession { * override the previous listener. * * @param listener to listen to the session events of this object + * @param executor an Executor that will execute callbacks * @hide */ - public void setListener(Listener listener) { + public void setListener(Listener listener, Executor executor) { mListener = listener; + if (executor != null) { + mListenerExecutor = executor; + } } /** @@ -1206,42 +1213,48 @@ public class ImsCallSession { @Override public void callSessionInitiating(ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionInitiating(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionInitiating( + ImsCallSession.this, profile), mListenerExecutor); } } @Override public void callSessionProgressing(ImsStreamMediaProfile profile) { if (mListener != null) { - mListener.callSessionProgressing(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionProgressing( + ImsCallSession.this, profile), mListenerExecutor); } } @Override public void callSessionInitiated(ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionStarted(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionStarted( + ImsCallSession.this, profile), mListenerExecutor); } } @Override public void callSessionInitiatingFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionStartFailed(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionStartFailed( + ImsCallSession.this, reasonInfo), mListenerExecutor); } } @Override public void callSessionInitiatedFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionStartFailed(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionStartFailed( + ImsCallSession.this, reasonInfo), mListenerExecutor); } } @Override public void callSessionTerminated(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionTerminated(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionTerminated( + ImsCallSession.this, reasonInfo), mListenerExecutor); } } @@ -1251,42 +1264,49 @@ public class ImsCallSession { @Override public void callSessionHeld(ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionHeld(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionHeld( + ImsCallSession.this, profile), mListenerExecutor); } } @Override public void callSessionHoldFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionHoldFailed(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionHoldFailed( + ImsCallSession.this, reasonInfo), mListenerExecutor); } } @Override public void callSessionHoldReceived(ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionHoldReceived(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionHoldReceived( + ImsCallSession.this, profile), mListenerExecutor); } } @Override public void callSessionResumed(ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionResumed(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionResumed( + ImsCallSession.this, profile), mListenerExecutor); } } @Override public void callSessionResumeFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionResumeFailed(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionResumeFailed( + ImsCallSession.this, reasonInfo), mListenerExecutor); } } @Override public void callSessionResumeReceived(ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionResumeReceived(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionResumeReceived(ImsCallSession.this, profile), + mListenerExecutor); } } @@ -1311,13 +1331,15 @@ public class ImsCallSession { @Override public void callSessionMergeComplete(IImsCallSession newSession) { if (mListener != null) { - if (newSession != null) { - // New session created after conference - mListener.callSessionMergeComplete(new ImsCallSession(newSession)); - } else { - // Session already exists. Hence no need to pass - mListener.callSessionMergeComplete(null); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (newSession != null) { + // New session created after conference + mListener.callSessionMergeComplete(new ImsCallSession(newSession)); + } else { + // Session already exists. Hence no need to pass + mListener.callSessionMergeComplete(null); + } + }, mListenerExecutor); } } @@ -1329,7 +1351,9 @@ public class ImsCallSession { @Override public void callSessionMergeFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionMergeFailed(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionMergeFailed(ImsCallSession.this, reasonInfo), + mListenerExecutor); } } @@ -1339,21 +1363,27 @@ public class ImsCallSession { @Override public void callSessionUpdated(ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionUpdated(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionUpdated(ImsCallSession.this, profile), + mListenerExecutor); } } @Override public void callSessionUpdateFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionUpdateFailed(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionUpdateFailed(ImsCallSession.this, reasonInfo), + mListenerExecutor); } } @Override public void callSessionUpdateReceived(ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionUpdateReceived(ImsCallSession.this, profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionUpdateReceived(ImsCallSession.this, profile), + mListenerExecutor); } } @@ -1364,15 +1394,18 @@ public class ImsCallSession { public void callSessionConferenceExtended(IImsCallSession newSession, ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionConferenceExtended(ImsCallSession.this, - new ImsCallSession(newSession), profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionConferenceExtended(ImsCallSession.this, + new ImsCallSession(newSession), profile), mListenerExecutor); } } @Override public void callSessionConferenceExtendFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionConferenceExtendFailed(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionConferenceExtendFailed( + ImsCallSession.this, reasonInfo), mListenerExecutor); } } @@ -1380,8 +1413,9 @@ public class ImsCallSession { public void callSessionConferenceExtendReceived(IImsCallSession newSession, ImsCallProfile profile) { if (mListener != null) { - mListener.callSessionConferenceExtendReceived(ImsCallSession.this, - new ImsCallSession(newSession), profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionConferenceExtendReceived(ImsCallSession.this, + new ImsCallSession(newSession), profile), mListenerExecutor); } } @@ -1392,30 +1426,36 @@ public class ImsCallSession { @Override public void callSessionInviteParticipantsRequestDelivered() { if (mListener != null) { - mListener.callSessionInviteParticipantsRequestDelivered(ImsCallSession.this); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionInviteParticipantsRequestDelivered( + ImsCallSession.this), mListenerExecutor); } } @Override public void callSessionInviteParticipantsRequestFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionInviteParticipantsRequestFailed(ImsCallSession.this, - reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionInviteParticipantsRequestFailed(ImsCallSession.this, + reasonInfo), mListenerExecutor); } } @Override public void callSessionRemoveParticipantsRequestDelivered() { if (mListener != null) { - mListener.callSessionRemoveParticipantsRequestDelivered(ImsCallSession.this); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionRemoveParticipantsRequestDelivered( + ImsCallSession.this), mListenerExecutor); } } @Override public void callSessionRemoveParticipantsRequestFailed(ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionRemoveParticipantsRequestFailed(ImsCallSession.this, - reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionRemoveParticipantsRequestFailed(ImsCallSession.this, + reasonInfo), mListenerExecutor); } } @@ -1425,7 +1465,9 @@ public class ImsCallSession { @Override public void callSessionConferenceStateUpdated(ImsConferenceState state) { if (mListener != null) { - mListener.callSessionConferenceStateUpdated(ImsCallSession.this, state); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionConferenceStateUpdated(ImsCallSession.this, state), + mListenerExecutor); } } @@ -1435,7 +1477,9 @@ public class ImsCallSession { @Override public void callSessionUssdMessageReceived(int mode, String ussdMessage) { if (mListener != null) { - mListener.callSessionUssdMessageReceived(ImsCallSession.this, mode, ussdMessage); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionUssdMessageReceived(ImsCallSession.this, mode, + ussdMessage), mListenerExecutor); } } @@ -1453,8 +1497,9 @@ public class ImsCallSession { @Override public void callSessionMayHandover(int srcNetworkType, int targetNetworkType) { if (mListener != null) { - mListener.callSessionMayHandover(ImsCallSession.this, srcNetworkType, - targetNetworkType); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionMayHandover(ImsCallSession.this, srcNetworkType, + targetNetworkType), mListenerExecutor); } } @@ -1465,8 +1510,9 @@ public class ImsCallSession { public void callSessionHandover(int srcNetworkType, int targetNetworkType, ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionHandover(ImsCallSession.this, srcNetworkType, - targetNetworkType, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionHandover(ImsCallSession.this, srcNetworkType, + targetNetworkType, reasonInfo), mListenerExecutor); } } @@ -1477,8 +1523,9 @@ public class ImsCallSession { public void callSessionHandoverFailed(int srcNetworkType, int targetNetworkType, ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionHandoverFailed(ImsCallSession.this, srcNetworkType, - targetNetworkType, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionHandoverFailed(ImsCallSession.this, srcNetworkType, + targetNetworkType, reasonInfo), mListenerExecutor); } } @@ -1488,7 +1535,9 @@ public class ImsCallSession { @Override public void callSessionTtyModeReceived(int mode) { if (mListener != null) { - mListener.callSessionTtyModeReceived(ImsCallSession.this, mode); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionTtyModeReceived(ImsCallSession.this, mode), + mListenerExecutor); } } @@ -1500,14 +1549,18 @@ public class ImsCallSession { */ public void callSessionMultipartyStateChanged(boolean isMultiParty) { if (mListener != null) { - mListener.callSessionMultipartyStateChanged(ImsCallSession.this, isMultiParty); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionMultipartyStateChanged(ImsCallSession.this, + isMultiParty), mListenerExecutor); } } @Override public void callSessionSuppServiceReceived(ImsSuppServiceNotification suppServiceInfo ) { if (mListener != null) { - mListener.callSessionSuppServiceReceived(ImsCallSession.this, suppServiceInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionSuppServiceReceived(ImsCallSession.this, + suppServiceInfo), mListenerExecutor); } } @@ -1517,7 +1570,9 @@ public class ImsCallSession { @Override public void callSessionRttModifyRequestReceived(ImsCallProfile callProfile) { if (mListener != null) { - mListener.callSessionRttModifyRequestReceived(ImsCallSession.this, callProfile); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionRttModifyRequestReceived(ImsCallSession.this, + callProfile), mListenerExecutor); } } @@ -1527,7 +1582,9 @@ public class ImsCallSession { @Override public void callSessionRttModifyResponseReceived(int status) { if (mListener != null) { - mListener.callSessionRttModifyResponseReceived(status); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionRttModifyResponseReceived(status), + mListenerExecutor); } } @@ -1537,7 +1594,8 @@ public class ImsCallSession { @Override public void callSessionRttMessageReceived(String rttMessage) { if (mListener != null) { - mListener.callSessionRttMessageReceived(rttMessage); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionRttMessageReceived(rttMessage), mListenerExecutor); } } @@ -1547,21 +1605,26 @@ public class ImsCallSession { @Override public void callSessionRttAudioIndicatorChanged(ImsStreamMediaProfile profile) { if (mListener != null) { - mListener.callSessionRttAudioIndicatorChanged(profile); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionRttAudioIndicatorChanged(profile), + mListenerExecutor); } } @Override public void callSessionTransferred() { if (mListener != null) { - mListener.callSessionTransferred(ImsCallSession.this); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionTransferred(ImsCallSession.this), mListenerExecutor); } } @Override public void callSessionTransferFailed(@Nullable ImsReasonInfo reasonInfo) { if (mListener != null) { - mListener.callSessionTransferFailed(ImsCallSession.this, reasonInfo); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionTransferFailed(ImsCallSession.this, reasonInfo), + mListenerExecutor); } } @@ -1572,7 +1635,8 @@ public class ImsCallSession { @Override public void callSessionDtmfReceived(char dtmf) { if (mListener != null) { - mListener.callSessionDtmfReceived(dtmf); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionDtmfReceived( + dtmf), mListenerExecutor); } } @@ -1582,7 +1646,8 @@ public class ImsCallSession { @Override public void callQualityChanged(CallQuality callQuality) { if (mListener != null) { - mListener.callQualityChanged(callQuality); + TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callQualityChanged( + callQuality), mListenerExecutor); } } @@ -1594,8 +1659,9 @@ public class ImsCallSession { public void callSessionRtpHeaderExtensionsReceived( @NonNull List extensions) { if (mListener != null) { - mListener.callSessionRtpHeaderExtensionsReceived( - new ArraySet(extensions)); + TelephonyUtils.runWithCleanCallingIdentity(()-> + mListener.callSessionRtpHeaderExtensionsReceived( + new ArraySet(extensions)), mListenerExecutor); } } } From be7c8dca0d1ac7dd3b4c0c476e37f2e42093c456 Mon Sep 17 00:00:00 2001 From: Parvathy Shanmugam Date: Wed, 12 Jan 2022 04:43:58 +0000 Subject: [PATCH 2/2] Fix for crash while merging 2 audio calls for initiating conference call Null pointer exception occured while calling callsessionupdated on listener object. Listener turned null at the time of executor method is on run. Null check is present before setting the call to executor. Modified the null checks to be inside of the executor. Test: Conference call in oriole userdebug Bug: 210701681 Change-Id: Iffeedb669b4abb9b4f32f015aaea4ba3b99c00f5 Merged-In: Iffeedb669b4abb9b4f32f015aaea4ba3b99c00f5 --- .../android/telephony/ims/ImsCallSession.java | 407 ++++++++++-------- 1 file changed, 218 insertions(+), 189 deletions(-) diff --git a/telephony/java/android/telephony/ims/ImsCallSession.java b/telephony/java/android/telephony/ims/ImsCallSession.java index 6569de626702..d65286f26447 100755 --- a/telephony/java/android/telephony/ims/ImsCallSession.java +++ b/telephony/java/android/telephony/ims/ImsCallSession.java @@ -1212,50 +1212,56 @@ public class ImsCallSession { */ @Override public void callSessionInitiating(ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionInitiating( - ImsCallSession.this, profile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionInitiating(ImsCallSession.this, profile); + } + }, mListenerExecutor); } @Override public void callSessionProgressing(ImsStreamMediaProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionProgressing( - ImsCallSession.this, profile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionProgressing(ImsCallSession.this, profile); + } + }, mListenerExecutor); } @Override public void callSessionInitiated(ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionStarted( - ImsCallSession.this, profile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionStarted(ImsCallSession.this, profile); + } + }, mListenerExecutor); } @Override public void callSessionInitiatingFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionStartFailed( - ImsCallSession.this, reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionStartFailed(ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } @Override public void callSessionInitiatedFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionStartFailed( - ImsCallSession.this, reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionStartFailed(ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } @Override public void callSessionTerminated(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionTerminated( - ImsCallSession.this, reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionTerminated(ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } /** @@ -1263,51 +1269,56 @@ public class ImsCallSession { */ @Override public void callSessionHeld(ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionHeld( - ImsCallSession.this, profile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionHeld(ImsCallSession.this, profile); + } + }, mListenerExecutor); } @Override public void callSessionHoldFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionHoldFailed( - ImsCallSession.this, reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionHoldFailed(ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } @Override public void callSessionHoldReceived(ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionHoldReceived( - ImsCallSession.this, profile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionHoldReceived(ImsCallSession.this, profile); + } + }, mListenerExecutor); } @Override public void callSessionResumed(ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionResumed( - ImsCallSession.this, profile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionResumed(ImsCallSession.this, profile); + } + }, mListenerExecutor); } @Override public void callSessionResumeFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionResumeFailed( - ImsCallSession.this, reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionResumeFailed(ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } @Override public void callSessionResumeReceived(ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionResumeReceived(ImsCallSession.this, profile), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionResumeReceived(ImsCallSession.this, profile); + } + }, mListenerExecutor); } /** @@ -1330,8 +1341,8 @@ public class ImsCallSession { */ @Override public void callSessionMergeComplete(IImsCallSession newSession) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> { + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { if (newSession != null) { // New session created after conference mListener.callSessionMergeComplete(new ImsCallSession(newSession)); @@ -1339,8 +1350,8 @@ public class ImsCallSession { // Session already exists. Hence no need to pass mListener.callSessionMergeComplete(null); } - }, mListenerExecutor); - } + } + }, mListenerExecutor); } /** @@ -1350,11 +1361,11 @@ public class ImsCallSession { */ @Override public void callSessionMergeFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionMergeFailed(ImsCallSession.this, reasonInfo), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionMergeFailed(ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } /** @@ -1362,29 +1373,29 @@ public class ImsCallSession { */ @Override public void callSessionUpdated(ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionUpdated(ImsCallSession.this, profile), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionUpdated(ImsCallSession.this, profile); + } + }, mListenerExecutor); } @Override public void callSessionUpdateFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionUpdateFailed(ImsCallSession.this, reasonInfo), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionUpdateFailed(ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } @Override public void callSessionUpdateReceived(ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionUpdateReceived(ImsCallSession.this, profile), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionUpdateReceived(ImsCallSession.this, profile); + } + }, mListenerExecutor); } /** @@ -1393,30 +1404,33 @@ public class ImsCallSession { @Override public void callSessionConferenceExtended(IImsCallSession newSession, ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionConferenceExtended(ImsCallSession.this, - new ImsCallSession(newSession), profile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionConferenceExtended(ImsCallSession.this, + new ImsCallSession(newSession), profile); + } + }, mListenerExecutor); } @Override public void callSessionConferenceExtendFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionConferenceExtendFailed( - ImsCallSession.this, reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionConferenceExtendFailed( + ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } @Override public void callSessionConferenceExtendReceived(IImsCallSession newSession, ImsCallProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionConferenceExtendReceived(ImsCallSession.this, - new ImsCallSession(newSession), profile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionConferenceExtendReceived(ImsCallSession.this, + new ImsCallSession(newSession), profile); + } + }, mListenerExecutor); } /** @@ -1425,38 +1439,41 @@ public class ImsCallSession { */ @Override public void callSessionInviteParticipantsRequestDelivered() { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionInviteParticipantsRequestDelivered( - ImsCallSession.this), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionInviteParticipantsRequestDelivered( + ImsCallSession.this); + } + }, mListenerExecutor); } @Override public void callSessionInviteParticipantsRequestFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionInviteParticipantsRequestFailed(ImsCallSession.this, - reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionInviteParticipantsRequestFailed(ImsCallSession.this, + reasonInfo); + } + }, mListenerExecutor); } @Override public void callSessionRemoveParticipantsRequestDelivered() { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionRemoveParticipantsRequestDelivered( - ImsCallSession.this), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionRemoveParticipantsRequestDelivered(ImsCallSession.this); + } + }, mListenerExecutor); } @Override public void callSessionRemoveParticipantsRequestFailed(ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionRemoveParticipantsRequestFailed(ImsCallSession.this, - reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionRemoveParticipantsRequestFailed(ImsCallSession.this, + reasonInfo); + } + }, mListenerExecutor); } /** @@ -1464,11 +1481,11 @@ public class ImsCallSession { */ @Override public void callSessionConferenceStateUpdated(ImsConferenceState state) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionConferenceStateUpdated(ImsCallSession.this, state), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionConferenceStateUpdated(ImsCallSession.this, state); + } + }, mListenerExecutor); } /** @@ -1476,11 +1493,12 @@ public class ImsCallSession { */ @Override public void callSessionUssdMessageReceived(int mode, String ussdMessage) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionUssdMessageReceived(ImsCallSession.this, mode, - ussdMessage), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionUssdMessageReceived(ImsCallSession.this, mode, + ussdMessage); + } + }, mListenerExecutor); } /** @@ -1496,11 +1514,12 @@ public class ImsCallSession { */ @Override public void callSessionMayHandover(int srcNetworkType, int targetNetworkType) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionMayHandover(ImsCallSession.this, srcNetworkType, - targetNetworkType), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionMayHandover(ImsCallSession.this, srcNetworkType, + targetNetworkType); + } + }, mListenerExecutor); } /** @@ -1509,11 +1528,12 @@ public class ImsCallSession { @Override public void callSessionHandover(int srcNetworkType, int targetNetworkType, ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionHandover(ImsCallSession.this, srcNetworkType, - targetNetworkType, reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionHandover(ImsCallSession.this, srcNetworkType, + targetNetworkType, reasonInfo); + } + }, mListenerExecutor); } /** @@ -1522,11 +1542,12 @@ public class ImsCallSession { @Override public void callSessionHandoverFailed(int srcNetworkType, int targetNetworkType, ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionHandoverFailed(ImsCallSession.this, srcNetworkType, - targetNetworkType, reasonInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionHandoverFailed(ImsCallSession.this, srcNetworkType, + targetNetworkType, reasonInfo); + } + }, mListenerExecutor); } /** @@ -1534,11 +1555,11 @@ public class ImsCallSession { */ @Override public void callSessionTtyModeReceived(int mode) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionTtyModeReceived(ImsCallSession.this, mode), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionTtyModeReceived(ImsCallSession.this, mode); + } + }, mListenerExecutor); } /** @@ -1548,20 +1569,22 @@ public class ImsCallSession { * otherwise. */ public void callSessionMultipartyStateChanged(boolean isMultiParty) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionMultipartyStateChanged(ImsCallSession.this, - isMultiParty), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionMultipartyStateChanged(ImsCallSession.this, + isMultiParty); + } + }, mListenerExecutor); } @Override public void callSessionSuppServiceReceived(ImsSuppServiceNotification suppServiceInfo ) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionSuppServiceReceived(ImsCallSession.this, - suppServiceInfo), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionSuppServiceReceived(ImsCallSession.this, + suppServiceInfo); + } + }, mListenerExecutor); } /** @@ -1569,11 +1592,12 @@ public class ImsCallSession { */ @Override public void callSessionRttModifyRequestReceived(ImsCallProfile callProfile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionRttModifyRequestReceived(ImsCallSession.this, - callProfile), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionRttModifyRequestReceived(ImsCallSession.this, + callProfile); + } + }, mListenerExecutor); } /** @@ -1581,11 +1605,11 @@ public class ImsCallSession { */ @Override public void callSessionRttModifyResponseReceived(int status) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionRttModifyResponseReceived(status), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionRttModifyResponseReceived(status); + } + }, mListenerExecutor); } /** @@ -1593,10 +1617,11 @@ public class ImsCallSession { */ @Override public void callSessionRttMessageReceived(String rttMessage) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionRttMessageReceived(rttMessage), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionRttMessageReceived(rttMessage); + } + }, mListenerExecutor); } /** @@ -1604,28 +1629,29 @@ public class ImsCallSession { */ @Override public void callSessionRttAudioIndicatorChanged(ImsStreamMediaProfile profile) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionRttAudioIndicatorChanged(profile), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionRttAudioIndicatorChanged(profile); + } + }, mListenerExecutor); } @Override public void callSessionTransferred() { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionTransferred(ImsCallSession.this), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionTransferred(ImsCallSession.this); + } + }, mListenerExecutor); } @Override public void callSessionTransferFailed(@Nullable ImsReasonInfo reasonInfo) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionTransferFailed(ImsCallSession.this, reasonInfo), - mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionTransferFailed(ImsCallSession.this, reasonInfo); + } + }, mListenerExecutor); } /** @@ -1634,10 +1660,11 @@ public class ImsCallSession { */ @Override public void callSessionDtmfReceived(char dtmf) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callSessionDtmfReceived( - dtmf), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionDtmfReceived(dtmf); + } + }, mListenerExecutor); } /** @@ -1645,10 +1672,11 @@ public class ImsCallSession { */ @Override public void callQualityChanged(CallQuality callQuality) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> mListener.callQualityChanged( - callQuality), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callQualityChanged(callQuality); + } + }, mListenerExecutor); } /** @@ -1658,11 +1686,12 @@ public class ImsCallSession { @Override public void callSessionRtpHeaderExtensionsReceived( @NonNull List extensions) { - if (mListener != null) { - TelephonyUtils.runWithCleanCallingIdentity(()-> - mListener.callSessionRtpHeaderExtensionsReceived( - new ArraySet(extensions)), mListenerExecutor); - } + TelephonyUtils.runWithCleanCallingIdentity(()-> { + if (mListener != null) { + mListener.callSessionRtpHeaderExtensionsReceived( + new ArraySet(extensions)); + } + }, mListenerExecutor); } }