diff options
author | 2023-02-18 03:06:41 +0000 | |
---|---|---|
committer | 2023-02-18 03:06:41 +0000 | |
commit | d897e2934d2d2519ab493d36d5da10d02d5377fb (patch) | |
tree | fdec084867f349859b1878875ae08dd08cc391f9 | |
parent | 4ce28e4b3c7bc207197dc1c4958a83690b107670 (diff) | |
parent | 0405865818a6053923e992e80a4abc32162b416c (diff) |
Merge "add setDefaultExecutor to ImsCallSessionListener to set the executor when a conference call is established"
3 files changed, 32 insertions, 3 deletions
diff --git a/telephony/java/android/telephony/ims/ImsCallSessionListener.java b/telephony/java/android/telephony/ims/ImsCallSessionListener.java index db99acfd9a35..3533c0907fac 100644 --- a/telephony/java/android/telephony/ims/ImsCallSessionListener.java +++ b/telephony/java/android/telephony/ims/ImsCallSessionListener.java @@ -31,6 +31,7 @@ import com.android.ims.internal.IImsCallSession; import java.util.ArrayList; import java.util.Objects; import java.util.Set; +import java.util.concurrent.Executor; /** * Listener interface for notifying the Framework's {@link ImsCallSession} for updates to an ongoing @@ -44,8 +45,8 @@ import java.util.Set; // ImsCallSessionListenerConverter is also changed. @SystemApi public class ImsCallSessionListener { - private final IImsCallSessionListener mListener; + private Executor mExecutor = null; /** @hide */ public ImsCallSessionListener(IImsCallSessionListener l) { @@ -243,6 +244,9 @@ public class ImsCallSessionListener { public void callSessionMergeStarted(ImsCallSessionImplBase newSession, ImsCallProfile profile) { try { + if (newSession != null && mExecutor != null) { + newSession.setDefaultExecutor(mExecutor); + } mListener.callSessionMergeStarted(newSession != null ? newSession.getServiceImpl() : null, profile); } catch (RemoteException e) { @@ -274,6 +278,9 @@ public class ImsCallSessionListener { */ public void callSessionMergeComplete(ImsCallSessionImplBase newSession) { try { + if (newSession != null && mExecutor != null) { + newSession.setDefaultExecutor(mExecutor); + } mListener.callSessionMergeComplete(newSession != null ? newSession.getServiceImpl() : null); } catch (RemoteException e) { @@ -361,6 +368,9 @@ public class ImsCallSessionListener { public void callSessionConferenceExtended(ImsCallSessionImplBase newSession, ImsCallProfile profile) { try { + if (newSession != null && mExecutor != null) { + newSession.setDefaultExecutor(mExecutor); + } mListener.callSessionConferenceExtended( newSession != null ? newSession.getServiceImpl() : null, profile); } catch (RemoteException e) { @@ -406,6 +416,9 @@ public class ImsCallSessionListener { public void callSessionConferenceExtendReceived(ImsCallSessionImplBase newSession, ImsCallProfile profile) { try { + if (newSession != null && mExecutor != null) { + newSession.setDefaultExecutor(mExecutor); + } mListener.callSessionConferenceExtendReceived(newSession != null ? newSession.getServiceImpl() : null, profile); } catch (RemoteException e) { @@ -808,5 +821,19 @@ public class ImsCallSessionListener { e.rethrowFromSystemServer(); } } + + /** + * Set default Executor from ImsService. + * @param executor The default executor to use when executing the methods by the vendor + * implementation of {@link ImsCallSessionImplBase} for conference call. + * This executor is dedicated to set vendor CallSessionImpl + * only when conference call is established. + * @hide + */ + public final void setDefaultExecutor(@NonNull Executor executor) { + if (mExecutor == null) { + mExecutor = executor; + } + } } diff --git a/telephony/java/android/telephony/ims/feature/MmTelFeature.java b/telephony/java/android/telephony/ims/feature/MmTelFeature.java index fb0e659ec77b..ebe11e938c39 100644 --- a/telephony/java/android/telephony/ims/feature/MmTelFeature.java +++ b/telephony/java/android/telephony/ims/feature/MmTelFeature.java @@ -644,6 +644,7 @@ public class MmTelFeature extends ImsFeature { throw new IllegalStateException("Session is not available."); } try { + c.setDefaultExecutor(MmTelFeature.this.mExecutor); listener.onIncomingCall(c.getServiceImpl(), extras); } catch (RemoteException e) { throw new RuntimeException(e); diff --git a/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java b/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java index e8100957517f..25bf7d6af9ca 100644 --- a/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java +++ b/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java @@ -173,8 +173,9 @@ public class ImsCallSessionImplBase implements AutoCloseable { @Override public void setListener(IImsCallSessionListener listener) { - executeMethodAsync(() -> ImsCallSessionImplBase.this.setListener( - new ImsCallSessionListener(listener)), "setListener"); + ImsCallSessionListener iCSL = new ImsCallSessionListener(listener); + iCSL.setDefaultExecutor(mExecutor); + executeMethodAsync(() -> ImsCallSessionImplBase.this.setListener(iCSL), "setListener"); } @Override |