diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java index e764cd57f5b84..33bbb295ab244 100644 --- a/telecomm/java/android/telecom/Conference.java +++ b/telecomm/java/android/telecom/Conference.java @@ -32,6 +32,12 @@ import java.util.concurrent.CopyOnWriteArraySet; @SystemApi public abstract class Conference implements IConferenceable { + /** + * Used to indicate that the conference connection time is not specified. If not specified, + * Telecom will set the connect time. + */ + public static long CONNECT_TIME_NOT_SPECIFIED = 0; + /** @hide */ public abstract static class Listener { public void onStateChanged(Conference conference, int oldState, int newState) {} @@ -59,6 +65,7 @@ public abstract class Conference implements IConferenceable { private DisconnectCause mDisconnectCause; private int mConnectionCapabilities; private String mDisconnectMessage; + private long mConnectTimeMillis = CONNECT_TIME_NOT_SPECIFIED; private final Connection.Listener mConnectionDeathListener = new Connection.Listener() { @Override @@ -421,6 +428,26 @@ public abstract class Conference implements IConferenceable { return mUnmodifiableChildConnections.get(0); } + /** + * Sets the connect time of the {@code Conference}. + * + * @param connectTimeMillis The connection time, in milliseconds. + */ + public void setConnectTimeMillis(long connectTimeMillis) { + mConnectTimeMillis = connectTimeMillis; + } + + /** + * Retrieves the connect time of the {@code Conference}, if specified. A value of + * {@link #CONNECT_TIME_NOT_SPECIFIED} indicates that Telecom should determine the start time + * of the conference. + * + * @return The time the {@code Conference} has been connected. + */ + public long getConnectTimeMillis() { + return mConnectTimeMillis; + } + /** * Inform this Conference that the state of its audio output has been changed externally. * diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index df1637594e126..dfdc3e12f7b0b 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -883,7 +883,8 @@ public abstract class ConnectionService extends Service { conference.getPhoneAccountHandle(), conference.getState(), conference.getConnectionCapabilities(), - connectionIds); + connectionIds, + conference.getConnectTimeMillis()); mAdapter.addConferenceCall(id, parcelableConference); // Go through any child calls and set the parent. diff --git a/telecomm/java/android/telecom/ParcelableConference.java b/telecomm/java/android/telecom/ParcelableConference.java index c4e11d6b6f597..dcc2713ec96be 100644 --- a/telecomm/java/android/telecom/ParcelableConference.java +++ b/telecomm/java/android/telecom/ParcelableConference.java @@ -32,6 +32,7 @@ public final class ParcelableConference implements Parcelable { private int mState; private int mConnectionCapabilities; private List mConnectionIds; + private long mConnectTimeMillis; public ParcelableConference( PhoneAccountHandle phoneAccount, @@ -42,6 +43,17 @@ public final class ParcelableConference implements Parcelable { mState = state; mConnectionCapabilities = connectionCapabilities; mConnectionIds = connectionIds; + mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; + } + + public ParcelableConference( + PhoneAccountHandle phoneAccount, + int state, + int connectionCapabilities, + List connectionIds, + long connectTimeMillis) { + this(phoneAccount, state, connectionCapabilities, connectionIds); + mConnectTimeMillis = connectTimeMillis; } @Override @@ -53,6 +65,8 @@ public final class ParcelableConference implements Parcelable { .append(Connection.stateToString(mState)) .append(", capabilities: ") .append(Connection.capabilitiesToString(mConnectionCapabilities)) + .append(", connectTime: ") + .append(mConnectTimeMillis) .append(", children: ") .append(mConnectionIds) .toString(); @@ -74,6 +88,10 @@ public final class ParcelableConference implements Parcelable { return mConnectionIds; } + public long getConnectTimeMillis() { + return mConnectTimeMillis; + } + public static final Parcelable.Creator CREATOR = new Parcelable.Creator () { @Override @@ -84,8 +102,10 @@ public final class ParcelableConference implements Parcelable { int capabilities = source.readInt(); List connectionIds = new ArrayList<>(2); source.readList(connectionIds, classLoader); + long connectTimeMillis = source.readLong(); - return new ParcelableConference(phoneAccount, state, capabilities, connectionIds); + return new ParcelableConference(phoneAccount, state, capabilities, connectionIds, + connectTimeMillis); } @Override @@ -107,5 +127,6 @@ public final class ParcelableConference implements Parcelable { destination.writeInt(mState); destination.writeInt(mConnectionCapabilities); destination.writeList(mConnectionIds); + destination.writeLong(mConnectTimeMillis); } }