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

This commit is contained in:
Hakjun Choi
2023-02-18 03:06:41 +00:00
committed by Gerrit Code Review
3 changed files with 32 additions and 3 deletions

View File

@@ -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;
}
}
}

View File

@@ -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);

View File

@@ -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