Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a24c597 authored by Hakjun Choi's avatar Hakjun Choi
Browse files

add setDefaultExecutor to ImsCallSessionListener to set the executor when a...

add setDefaultExecutor to ImsCallSessionListener to set the executor when a conference call is established

add a way to set the executor variable in ImsCallSessionListener, because ImsCallSessionListener has the information of ImsCallSessionImpl, which passed from vendor

Bug: 262800764
Test: aTest android.telephony.ims.*
Test: Call / Conference call E2E regression test
Change-Id: I63ba6a9d4ea4b8d963bc7bc2ee8e1d019c75ee10
parent cf19ed31
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -35,6 +35,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
@@ -50,6 +51,7 @@ import java.util.Set;
public class ImsCallSessionListener {
    private static final String TAG = "ImsCallSessionListener";
    private final IImsCallSessionListener mListener;
    private Executor mExecutor = null;

    /** @hide */
    public ImsCallSessionListener(IImsCallSessionListener l) {
@@ -247,6 +249,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) {
@@ -278,6 +283,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) {
@@ -365,6 +373,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) {
@@ -410,6 +421,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) {
@@ -836,5 +850,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;
        }
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -1141,6 +1141,7 @@ public class MmTelFeature extends ImsFeature {
            throw new IllegalStateException("Session is not available.");
        }
        try {
            c.setDefaultExecutor(MmTelFeature.this.mExecutor);
            listener.onIncomingCall(c.getServiceImpl(), null, extras);
        } catch (RemoteException e) {
            throw new RuntimeException(e);
@@ -1175,7 +1176,9 @@ public class MmTelFeature extends ImsFeature {
            IImsCallSessionListener isl =
                    listener.onIncomingCall(c.getServiceImpl(), callId, extras);
            if (isl != null) {
                return new ImsCallSessionListener(isl);
                ImsCallSessionListener iCSL = new ImsCallSessionListener(isl);
                iCSL.setDefaultExecutor(MmTelFeature.this.mExecutor);
                return iCSL;
            } else {
                return null;
            }
+3 −2
Original line number Diff line number Diff line
@@ -220,8 +220,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