Add a new call direction parameter to conferences for multiparty

1) Refactor ParcelableConference - too many optional params
2) Add a new call direction parameter for external multiparty
call scenarios, where a conference is assigned a direction.

Bug: 153595501
Test: atest TelecomUnitTests TeleServiceTests
Change-Id: Icb576a07b9a7a81e228babfea53474be83da7593
This commit is contained in:
Brad Ebinger
2020-04-09 15:30:57 -07:00
parent 31774ae752
commit 43e026594e
3 changed files with 175 additions and 82 deletions

View File

@@ -22,6 +22,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.android.internal.telecom.IVideoProvider;
@@ -32,25 +33,130 @@ import com.android.internal.telecom.IVideoProvider;
*/
public final class ParcelableConference implements Parcelable {
private PhoneAccountHandle mPhoneAccount;
private int mState;
private int mConnectionCapabilities;
private int mConnectionProperties;
private List<String> mConnectionIds;
private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
public static final class Builder {
private final PhoneAccountHandle mPhoneAccount;
private final int mState;
private int mConnectionCapabilities;
private int mConnectionProperties;
private List<String> mConnectionIds = Collections.emptyList();
private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
private IVideoProvider mVideoProvider;
private int mVideoState = VideoProfile.STATE_AUDIO_ONLY;
private StatusHints mStatusHints;
private Bundle mExtras;
private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
private Uri mAddress;
private int mAddressPresentation = TelecomManager.PRESENTATION_UNKNOWN;
private String mCallerDisplayName;
private int mCallerDisplayNamePresentation = TelecomManager.PRESENTATION_UNKNOWN;;
private DisconnectCause mDisconnectCause;
private boolean mRingbackRequested;
private int mCallDirection = Call.Details.DIRECTION_UNKNOWN;
public Builder(
PhoneAccountHandle phoneAccount,
int state) {
mPhoneAccount = phoneAccount;
mState = state;
}
public Builder setDisconnectCause(DisconnectCause cause) {
mDisconnectCause = cause;
return this;
}
public Builder setRingbackRequested(boolean requested) {
mRingbackRequested = requested;
return this;
}
public Builder setCallerDisplayName(String callerDisplayName,
@TelecomManager.Presentation int callerDisplayNamePresentation) {
mCallerDisplayName = callerDisplayName;
mCallerDisplayNamePresentation = callerDisplayNamePresentation;
return this;
}
public Builder setAddress(Uri address,
@TelecomManager.Presentation int addressPresentation) {
mAddress = address;
mAddressPresentation = addressPresentation;
return this;
}
public Builder setExtras(Bundle extras) {
mExtras = extras;
return this;
}
public Builder setStatusHints(StatusHints hints) {
mStatusHints = hints;
return this;
}
public Builder setConnectTimeMillis(long connectTimeMillis, long connectElapsedTimeMillis) {
mConnectTimeMillis = connectTimeMillis;
mConnectElapsedTimeMillis = connectElapsedTimeMillis;
return this;
}
public Builder setVideoAttributes(IVideoProvider provider,
@VideoProfile.VideoState int videoState) {
mVideoProvider = provider;
mVideoState = videoState;
return this;
}
public Builder setConnectionIds(List<String> connectionIds) {
mConnectionIds = connectionIds;
return this;
}
public Builder setConnectionProperties(int properties) {
mConnectionProperties = properties;
return this;
}
public Builder setConnectionCapabilities(int capabilities) {
mConnectionCapabilities = capabilities;
return this;
}
public Builder setCallDirection(int callDirection) {
mCallDirection = callDirection;
return this;
}
public ParcelableConference build() {
return new ParcelableConference(mPhoneAccount, mState, mConnectionCapabilities,
mConnectionProperties, mConnectionIds, mVideoProvider, mVideoState,
mConnectTimeMillis, mConnectElapsedTimeMillis, mStatusHints, mExtras, mAddress,
mAddressPresentation, mCallerDisplayName, mCallerDisplayNamePresentation,
mDisconnectCause, mRingbackRequested, mCallDirection);
}
}
private final PhoneAccountHandle mPhoneAccount;
private final int mState;
private final int mConnectionCapabilities;
private final int mConnectionProperties;
private final List<String> mConnectionIds;
private final long mConnectTimeMillis;
private final IVideoProvider mVideoProvider;
private final int mVideoState;
private StatusHints mStatusHints;
private Bundle mExtras;
private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
private final StatusHints mStatusHints;
private final Bundle mExtras;
private final long mConnectElapsedTimeMillis;
private final Uri mAddress;
private final int mAddressPresentation;
private final String mCallerDisplayName;
private final int mCallerDisplayNamePresentation;
private DisconnectCause mDisconnectCause;
private boolean mRingbackRequested;
private final DisconnectCause mDisconnectCause;
private final boolean mRingbackRequested;
private final int mCallDirection;
public ParcelableConference(
private ParcelableConference(
PhoneAccountHandle phoneAccount,
int state,
int connectionCapabilities,
@@ -67,31 +173,8 @@ public final class ParcelableConference implements Parcelable {
String callerDisplayName,
int callerDisplayNamePresentation,
DisconnectCause disconnectCause,
boolean ringbackRequested) {
this(phoneAccount, state, connectionCapabilities, connectionProperties, connectionIds,
videoProvider, videoState, connectTimeMillis, connectElapsedTimeMillis,
statusHints, extras, address, addressPresentation, callerDisplayName,
callerDisplayNamePresentation);
mDisconnectCause = disconnectCause;
mRingbackRequested = ringbackRequested;
}
public ParcelableConference(
PhoneAccountHandle phoneAccount,
int state,
int connectionCapabilities,
int connectionProperties,
List<String> connectionIds,
IVideoProvider videoProvider,
int videoState,
long connectTimeMillis,
long connectElapsedTimeMillis,
StatusHints statusHints,
Bundle extras,
Uri address,
int addressPresentation,
String callerDisplayName,
int callerDisplayNamePresentation) {
boolean ringbackRequested,
int callDirection) {
mPhoneAccount = phoneAccount;
mState = state;
mConnectionCapabilities = connectionCapabilities;
@@ -107,8 +190,9 @@ public final class ParcelableConference implements Parcelable {
mAddressPresentation = addressPresentation;
mCallerDisplayName = callerDisplayName;
mCallerDisplayNamePresentation = callerDisplayNamePresentation;
mDisconnectCause = null;
mRingbackRequested = false;
mDisconnectCause = disconnectCause;
mRingbackRequested = ringbackRequested;
mCallDirection = callDirection;
}
@Override
@@ -134,6 +218,8 @@ public final class ParcelableConference implements Parcelable {
.append(mRingbackRequested)
.append(", disconnectCause: ")
.append(mDisconnectCause)
.append(", callDirection: ")
.append(mCallDirection)
.toString();
}
@@ -192,10 +278,15 @@ public final class ParcelableConference implements Parcelable {
public boolean isRingbackRequested() {
return mRingbackRequested;
}
public int getHandlePresentation() {
return mAddressPresentation;
}
public int getCallDirection() {
return mCallDirection;
}
public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR =
new Parcelable.Creator<ParcelableConference> () {
@Override
@@ -220,12 +311,13 @@ public final class ParcelableConference implements Parcelable {
int callerDisplayNamePresentation = source.readInt();
DisconnectCause disconnectCause = source.readParcelable(classLoader);
boolean isRingbackRequested = source.readInt() == 1;
int callDirection = source.readInt();
return new ParcelableConference(phoneAccount, state, capabilities, properties,
connectionIds, videoCallProvider, videoState, connectTimeMillis,
connectElapsedTimeMillis, statusHints, extras, address, addressPresentation,
callerDisplayName, callerDisplayNamePresentation, disconnectCause,
isRingbackRequested);
isRingbackRequested, callDirection);
}
@Override
@@ -261,5 +353,6 @@ public final class ParcelableConference implements Parcelable {
destination.writeInt(mCallerDisplayNamePresentation);
destination.writeParcelable(mDisconnectCause, 0);
destination.writeInt(mRingbackRequested ? 1 : 0);
destination.writeInt(mCallDirection);
}
}