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:
@@ -1092,16 +1092,16 @@ public abstract class Conference extends Conferenceable {
|
|||||||
* This is applicable in two cases:
|
* This is applicable in two cases:
|
||||||
* <ol>
|
* <ol>
|
||||||
* <li>When {@link #setConferenceState(boolean)} is used to mark a conference as
|
* <li>When {@link #setConferenceState(boolean)} is used to mark a conference as
|
||||||
* temporarily "not a conference"; we need to present the correct address in the in-call
|
* temporarily "not a conference"; we need to present the correct address presentation in
|
||||||
* UI.</li>
|
* the in-call UI.</li>
|
||||||
* <li>When the conference is not hosted on the current device, we need to know the address
|
* <li>When the conference is not hosted on the current device, we need to know the address
|
||||||
* information for the purpose of showing the original address to the user, as well as for
|
* presentation information for the purpose of showing the original address to the user, as
|
||||||
* logging to the call log.</li>
|
* well as for logging to the call log.</li>
|
||||||
* </ol>
|
* </ol>
|
||||||
* @return The address of the conference, or {@code null} if not applicable.
|
* @return The address presentation of the conference.
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public final int getAddressPresentation() {
|
public final @TelecomManager.Presentation int getAddressPresentation() {
|
||||||
return mAddressPresentation;
|
return mAddressPresentation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1865,25 +1865,23 @@ public abstract class ConnectionService extends Service {
|
|||||||
mConferenceById.put(callId, conference);
|
mConferenceById.put(callId, conference);
|
||||||
mIdByConference.put(conference, callId);
|
mIdByConference.put(conference, callId);
|
||||||
conference.addListener(mConferenceListener);
|
conference.addListener(mConferenceListener);
|
||||||
ParcelableConference parcelableConference = new ParcelableConference(
|
ParcelableConference parcelableConference = new ParcelableConference.Builder(
|
||||||
request.getAccountHandle(),
|
request.getAccountHandle(), conference.getState())
|
||||||
conference.getState(),
|
.setConnectionCapabilities(conference.getConnectionCapabilities())
|
||||||
conference.getConnectionCapabilities(),
|
.setConnectionProperties(conference.getConnectionProperties())
|
||||||
conference.getConnectionProperties(),
|
.setVideoAttributes(conference.getVideoProvider() == null
|
||||||
Collections.<String>emptyList(), //connectionIds
|
? null : conference.getVideoProvider().getInterface(),
|
||||||
conference.getVideoProvider() == null ?
|
conference.getVideoState())
|
||||||
null : conference.getVideoProvider().getInterface(),
|
.setConnectTimeMillis(conference.getConnectTimeMillis(),
|
||||||
conference.getVideoState(),
|
conference.getConnectionStartElapsedRealtimeMillis())
|
||||||
conference.getConnectTimeMillis(),
|
.setStatusHints(conference.getStatusHints())
|
||||||
conference.getConnectionStartElapsedRealtimeMillis(),
|
.setExtras(conference.getExtras())
|
||||||
conference.getStatusHints(),
|
.setAddress(conference.getAddress(), conference.getAddressPresentation())
|
||||||
conference.getExtras(),
|
.setCallerDisplayName(conference.getCallerDisplayName(),
|
||||||
conference.getAddress(),
|
conference.getCallerDisplayNamePresentation())
|
||||||
conference.getAddressPresentation(),
|
.setDisconnectCause(conference.getDisconnectCause())
|
||||||
conference.getCallerDisplayName(),
|
.setRingbackRequested(conference.isRingbackRequested())
|
||||||
conference.getCallerDisplayNamePresentation(),
|
.build();
|
||||||
conference.getDisconnectCause(),
|
|
||||||
conference.isRingbackRequested());
|
|
||||||
if (conference.getState() != Connection.STATE_DISCONNECTED) {
|
if (conference.getState() != Connection.STATE_DISCONNECTED) {
|
||||||
conference.setTelecomCallId(callId);
|
conference.setTelecomCallId(callId);
|
||||||
mAdapter.setVideoProvider(callId, conference.getVideoProvider());
|
mAdapter.setVideoProvider(callId, conference.getVideoProvider());
|
||||||
@@ -2484,23 +2482,25 @@ public abstract class ConnectionService extends Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
conference.setTelecomCallId(id);
|
conference.setTelecomCallId(id);
|
||||||
ParcelableConference parcelableConference = new ParcelableConference(
|
ParcelableConference parcelableConference = new ParcelableConference.Builder(
|
||||||
conference.getPhoneAccountHandle(),
|
conference.getPhoneAccountHandle(), conference.getState())
|
||||||
conference.getState(),
|
.setConnectionCapabilities(conference.getConnectionCapabilities())
|
||||||
conference.getConnectionCapabilities(),
|
.setConnectionProperties(conference.getConnectionProperties())
|
||||||
conference.getConnectionProperties(),
|
.setConnectionIds(connectionIds)
|
||||||
connectionIds,
|
.setVideoAttributes(conference.getVideoProvider() == null
|
||||||
conference.getVideoProvider() == null ?
|
? null : conference.getVideoProvider().getInterface(),
|
||||||
null : conference.getVideoProvider().getInterface(),
|
conference.getVideoState())
|
||||||
conference.getVideoState(),
|
.setConnectTimeMillis(conference.getConnectTimeMillis(),
|
||||||
conference.getConnectTimeMillis(),
|
conference.getConnectionStartElapsedRealtimeMillis())
|
||||||
conference.getConnectionStartElapsedRealtimeMillis(),
|
.setStatusHints(conference.getStatusHints())
|
||||||
conference.getStatusHints(),
|
.setExtras(conference.getExtras())
|
||||||
conference.getExtras(),
|
.setAddress(conference.getAddress(), conference.getAddressPresentation())
|
||||||
conference.getAddress(),
|
.setCallerDisplayName(conference.getCallerDisplayName(),
|
||||||
conference.getAddressPresentation(),
|
conference.getCallerDisplayNamePresentation())
|
||||||
conference.getCallerDisplayName(),
|
.setDisconnectCause(conference.getDisconnectCause())
|
||||||
conference.getCallerDisplayNamePresentation());
|
.setRingbackRequested(conference.isRingbackRequested())
|
||||||
|
.setCallDirection(conference.getCallDirection())
|
||||||
|
.build();
|
||||||
|
|
||||||
mAdapter.addConferenceCall(id, parcelableConference);
|
mAdapter.addConferenceCall(id, parcelableConference);
|
||||||
mAdapter.setVideoProvider(id, conference.getVideoProvider());
|
mAdapter.setVideoProvider(id, conference.getVideoProvider());
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import android.os.Parcel;
|
|||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.android.internal.telecom.IVideoProvider;
|
import com.android.internal.telecom.IVideoProvider;
|
||||||
@@ -32,25 +33,130 @@ import com.android.internal.telecom.IVideoProvider;
|
|||||||
*/
|
*/
|
||||||
public final class ParcelableConference implements Parcelable {
|
public final class ParcelableConference implements Parcelable {
|
||||||
|
|
||||||
private PhoneAccountHandle mPhoneAccount;
|
public static final class Builder {
|
||||||
private int mState;
|
private final PhoneAccountHandle mPhoneAccount;
|
||||||
|
private final int mState;
|
||||||
private int mConnectionCapabilities;
|
private int mConnectionCapabilities;
|
||||||
private int mConnectionProperties;
|
private int mConnectionProperties;
|
||||||
private List<String> mConnectionIds;
|
private List<String> mConnectionIds = Collections.emptyList();
|
||||||
private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
|
private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
|
||||||
private final IVideoProvider mVideoProvider;
|
private IVideoProvider mVideoProvider;
|
||||||
private final int mVideoState;
|
private int mVideoState = VideoProfile.STATE_AUDIO_ONLY;
|
||||||
private StatusHints mStatusHints;
|
private StatusHints mStatusHints;
|
||||||
private Bundle mExtras;
|
private Bundle mExtras;
|
||||||
private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
|
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 final StatusHints mStatusHints;
|
||||||
|
private final Bundle mExtras;
|
||||||
|
private final long mConnectElapsedTimeMillis;
|
||||||
private final Uri mAddress;
|
private final Uri mAddress;
|
||||||
private final int mAddressPresentation;
|
private final int mAddressPresentation;
|
||||||
private final String mCallerDisplayName;
|
private final String mCallerDisplayName;
|
||||||
private final int mCallerDisplayNamePresentation;
|
private final int mCallerDisplayNamePresentation;
|
||||||
private DisconnectCause mDisconnectCause;
|
private final DisconnectCause mDisconnectCause;
|
||||||
private boolean mRingbackRequested;
|
private final boolean mRingbackRequested;
|
||||||
|
private final int mCallDirection;
|
||||||
|
|
||||||
public ParcelableConference(
|
private ParcelableConference(
|
||||||
PhoneAccountHandle phoneAccount,
|
PhoneAccountHandle phoneAccount,
|
||||||
int state,
|
int state,
|
||||||
int connectionCapabilities,
|
int connectionCapabilities,
|
||||||
@@ -67,31 +173,8 @@ public final class ParcelableConference implements Parcelable {
|
|||||||
String callerDisplayName,
|
String callerDisplayName,
|
||||||
int callerDisplayNamePresentation,
|
int callerDisplayNamePresentation,
|
||||||
DisconnectCause disconnectCause,
|
DisconnectCause disconnectCause,
|
||||||
boolean ringbackRequested) {
|
boolean ringbackRequested,
|
||||||
this(phoneAccount, state, connectionCapabilities, connectionProperties, connectionIds,
|
int callDirection) {
|
||||||
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) {
|
|
||||||
mPhoneAccount = phoneAccount;
|
mPhoneAccount = phoneAccount;
|
||||||
mState = state;
|
mState = state;
|
||||||
mConnectionCapabilities = connectionCapabilities;
|
mConnectionCapabilities = connectionCapabilities;
|
||||||
@@ -107,8 +190,9 @@ public final class ParcelableConference implements Parcelable {
|
|||||||
mAddressPresentation = addressPresentation;
|
mAddressPresentation = addressPresentation;
|
||||||
mCallerDisplayName = callerDisplayName;
|
mCallerDisplayName = callerDisplayName;
|
||||||
mCallerDisplayNamePresentation = callerDisplayNamePresentation;
|
mCallerDisplayNamePresentation = callerDisplayNamePresentation;
|
||||||
mDisconnectCause = null;
|
mDisconnectCause = disconnectCause;
|
||||||
mRingbackRequested = false;
|
mRingbackRequested = ringbackRequested;
|
||||||
|
mCallDirection = callDirection;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -134,6 +218,8 @@ public final class ParcelableConference implements Parcelable {
|
|||||||
.append(mRingbackRequested)
|
.append(mRingbackRequested)
|
||||||
.append(", disconnectCause: ")
|
.append(", disconnectCause: ")
|
||||||
.append(mDisconnectCause)
|
.append(mDisconnectCause)
|
||||||
|
.append(", callDirection: ")
|
||||||
|
.append(mCallDirection)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,10 +278,15 @@ public final class ParcelableConference implements Parcelable {
|
|||||||
public boolean isRingbackRequested() {
|
public boolean isRingbackRequested() {
|
||||||
return mRingbackRequested;
|
return mRingbackRequested;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getHandlePresentation() {
|
public int getHandlePresentation() {
|
||||||
return mAddressPresentation;
|
return mAddressPresentation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getCallDirection() {
|
||||||
|
return mCallDirection;
|
||||||
|
}
|
||||||
|
|
||||||
public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR =
|
public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR =
|
||||||
new Parcelable.Creator<ParcelableConference> () {
|
new Parcelable.Creator<ParcelableConference> () {
|
||||||
@Override
|
@Override
|
||||||
@@ -220,12 +311,13 @@ public final class ParcelableConference implements Parcelable {
|
|||||||
int callerDisplayNamePresentation = source.readInt();
|
int callerDisplayNamePresentation = source.readInt();
|
||||||
DisconnectCause disconnectCause = source.readParcelable(classLoader);
|
DisconnectCause disconnectCause = source.readParcelable(classLoader);
|
||||||
boolean isRingbackRequested = source.readInt() == 1;
|
boolean isRingbackRequested = source.readInt() == 1;
|
||||||
|
int callDirection = source.readInt();
|
||||||
|
|
||||||
return new ParcelableConference(phoneAccount, state, capabilities, properties,
|
return new ParcelableConference(phoneAccount, state, capabilities, properties,
|
||||||
connectionIds, videoCallProvider, videoState, connectTimeMillis,
|
connectionIds, videoCallProvider, videoState, connectTimeMillis,
|
||||||
connectElapsedTimeMillis, statusHints, extras, address, addressPresentation,
|
connectElapsedTimeMillis, statusHints, extras, address, addressPresentation,
|
||||||
callerDisplayName, callerDisplayNamePresentation, disconnectCause,
|
callerDisplayName, callerDisplayNamePresentation, disconnectCause,
|
||||||
isRingbackRequested);
|
isRingbackRequested, callDirection);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -261,5 +353,6 @@ public final class ParcelableConference implements Parcelable {
|
|||||||
destination.writeInt(mCallerDisplayNamePresentation);
|
destination.writeInt(mCallerDisplayNamePresentation);
|
||||||
destination.writeParcelable(mDisconnectCause, 0);
|
destination.writeParcelable(mDisconnectCause, 0);
|
||||||
destination.writeInt(mRingbackRequested ? 1 : 0);
|
destination.writeInt(mRingbackRequested ? 1 : 0);
|
||||||
|
destination.writeInt(mCallDirection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user