diff options
author | 2017-08-04 09:27:26 -0700 | |
---|---|---|
committer | 2017-08-23 14:47:31 -0700 | |
commit | b2f875bc5468eec359dfbbe8697f94d7734cafed (patch) | |
tree | 77deeca83e566469462f574a7c723f838dd5e03a | |
parent | e605167e0d209c4d9a23280acadab7a4d342ed82 (diff) |
Track conference start in system elapsed time.
This is important so that Telecom can track the duration of the call,
which is tracked using wall clock time.
Test: Manual, unit test
Bug: 64068300
Change-Id: If642d282cd8134060acf6ffe8d81215c394d800c
-rw-r--r-- | api/current.txt | 1 | ||||
-rw-r--r-- | api/system-current.txt | 1 | ||||
-rw-r--r-- | api/test-current.txt | 1 | ||||
-rw-r--r-- | telecomm/java/android/telecom/Conference.java | 37 | ||||
-rw-r--r-- | telecomm/java/android/telecom/Connection.java | 37 | ||||
-rw-r--r-- | telecomm/java/android/telecom/ConnectionService.java | 3 | ||||
-rw-r--r-- | telecomm/java/android/telecom/ParcelableConference.java | 15 | ||||
-rw-r--r-- | telecomm/java/android/telecom/ParcelableConnection.java | 14 |
8 files changed, 100 insertions, 9 deletions
diff --git a/api/current.txt b/api/current.txt index 27474d69aa97..d4afdab19deb 100644 --- a/api/current.txt +++ b/api/current.txt @@ -39013,6 +39013,7 @@ package android.telecom { method public final void setActive(); method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>); method public final void setConnectionCapabilities(int); + method public final void setConnectionElapsedTime(long); method public final void setConnectionProperties(int); method public final void setConnectionTime(long); method public final void setDialing(); diff --git a/api/system-current.txt b/api/system-current.txt index 06c3ce0a4c8d..28a015eb1d01 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -42266,6 +42266,7 @@ package android.telecom { method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>); method public final deprecated void setConnectTimeMillis(long); method public final void setConnectionCapabilities(int); + method public final void setConnectionElapsedTime(long); method public final void setConnectionProperties(int); method public final void setConnectionTime(long); method public final void setDialing(); diff --git a/api/test-current.txt b/api/test-current.txt index 6847d8eed2f9..3e826d14e453 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -39256,6 +39256,7 @@ package android.telecom { method public final void setActive(); method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>); method public final void setConnectionCapabilities(int); + method public final void setConnectionElapsedTime(long); method public final void setConnectionProperties(int); method public final void setConnectionTime(long); method public final void setDialing(); diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java index db4939171aa6..5fcff18aa5be 100644 --- a/telecomm/java/android/telecom/Conference.java +++ b/telecomm/java/android/telecom/Conference.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.os.Bundle; +import android.os.SystemClock; import android.telecom.Connection.VideoProvider; import android.util.ArraySet; @@ -81,6 +82,7 @@ public abstract class Conference extends Conferenceable { private int mConnectionProperties; private String mDisconnectMessage; private long mConnectTimeMillis = CONNECT_TIME_NOT_SPECIFIED; + private long mConnectElapsedTimeMillis = CONNECT_TIME_NOT_SPECIFIED; private StatusHints mStatusHints; private Bundle mExtras; private Set<String> mPreviousExtraKeys; @@ -582,7 +584,11 @@ public abstract class Conference extends Conferenceable { } /** - * Sets the connection start time of the {@code Conference}. + * Sets the connection start time of the {@code Conference}. Should be specified in wall-clock + * time returned by {@link System#currentTimeMillis()}. + * <p> + * When setting the connection time, you should always set the connection elapsed time via + * {@link #setConnectionElapsedTime(long)}. * * @param connectionTimeMillis The connection time, in milliseconds. */ @@ -591,6 +597,20 @@ public abstract class Conference extends Conferenceable { } /** + * Sets the elapsed time since system boot when the {@link Conference} was connected. + * This is used to determine the duration of the {@link Conference}. + * <p> + * When setting the connection elapsed time, you should always set the connection time via + * {@link #setConnectionTime(long)}. + * + * @param connectionElapsedTime The connection time, as measured by + * {@link SystemClock#elapsedRealtime()}. + */ + public final void setConnectionElapsedTime(long connectionElapsedTime) { + mConnectElapsedTimeMillis = connectionElapsedTime; + } + + /** * @hide * @deprecated Use {@link #getConnectionTime}. */ @@ -612,6 +632,21 @@ public abstract class Conference extends Conferenceable { } /** + * Retrieves the connection start time of the {@link Conference}, if specified. A value of + * {@link #CONNECT_TIME_NOT_SPECIFIED} indicates that Telecom should determine the start time + * of the conference. + * + * This is based on the value of {@link SystemClock#elapsedRealtime()} to ensure that it is not + * impacted by wall clock changes (user initiated, network initiated, time zone change, etc). + * + * @return The elapsed time at which the {@link Conference} was connected. + * @hide + */ + public final long getConnectElapsedTime() { + return mConnectElapsedTimeMillis; + } + + /** * Inform this Conference that the state of its audio output has been changed externally. * * @param state The new audio state. diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index f5d37bb6d6c4..ef760a053c54 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -20,7 +20,6 @@ import com.android.internal.os.SomeArgs; import com.android.internal.telecom.IVideoCallback; import com.android.internal.telecom.IVideoProvider; -import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; @@ -37,14 +36,13 @@ import android.os.Looper; import android.os.Message; import android.os.ParcelFileDescriptor; import android.os.RemoteException; +import android.os.SystemClock; import android.util.ArraySet; import android.view.Surface; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -1696,6 +1694,7 @@ public abstract class Connection extends Conferenceable { private VideoProvider mVideoProvider; private boolean mAudioModeIsVoip; private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; + private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; private StatusHints mStatusHints; private int mVideoState; private DisconnectCause mDisconnectCause; @@ -1840,6 +1839,22 @@ public abstract class Connection extends Conferenceable { } /** + * Retrieves the connection start time of the {@link Connection}, if specified. A value of + * {@link Conference#CONNECT_TIME_NOT_SPECIFIED} indicates that Telecom should determine the + * start time of the conference. + * + * Based on the value of {@link SystemClock#elapsedRealtime()}, which ensures that wall-clock + * changes do not impact the call duration. + * + * @return The time at which the {@link Connection} was connected. + * + * @hide + */ + public final long getConnectElapsedTimeMillis() { + return mConnectElapsedTimeMillis; + } + + /** * @return The status hints for this connection. */ public final StatusHints getStatusHints() { @@ -2250,7 +2265,8 @@ public abstract class Connection extends Conferenceable { * Sets the time at which a call became active on this Connection. This is set only * when a conference call becomes active on this connection. * - * @param connectionTimeMillis The connection time, in milliseconds. + * @param connectTimeMillis The connection time, in milliseconds. Should be set using a value + * obtained from {@link System#currentTimeMillis()}. * * @hide */ @@ -2259,6 +2275,19 @@ public abstract class Connection extends Conferenceable { } /** + * Sets the time at which a call became active on this Connection. This is set only + * when a conference call becomes active on this connection. + * + * @param connectElapsedTimeMillis The connection time, in milliseconds. Stored in the format + * {@link SystemClock#elapsedRealtime()}. + * + * @hide + */ + public final void setConnectElapsedTimeMillis(long connectElapsedTimeMillis) { + mConnectElapsedTimeMillis = connectElapsedTimeMillis; + } + + /** * Sets the label and icon status to display in the in-call UI. * * @param statusHints The status label and icon to set. diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index f78e427663c6..e814d0237910 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -1405,6 +1405,7 @@ public abstract class ConnectionService extends Service { connection.isRingbackRequested(), connection.getAudioModeIsVoip(), connection.getConnectTimeMillis(), + connection.getConnectElapsedTimeMillis(), connection.getStatusHints(), connection.getDisconnectCause(), createIdList(connection.getConferenceables()), @@ -1822,6 +1823,7 @@ public abstract class ConnectionService extends Service { null : conference.getVideoProvider().getInterface(), conference.getVideoState(), conference.getConnectTimeMillis(), + conference.getConnectElapsedTime(), conference.getStatusHints(), conference.getExtras()); @@ -1887,6 +1889,7 @@ public abstract class ConnectionService extends Service { connection.isRingbackRequested(), connection.getAudioModeIsVoip(), connection.getConnectTimeMillis(), + connection.getConnectElapsedTimeMillis(), connection.getStatusHints(), connection.getDisconnectCause(), emptyList, diff --git a/telecomm/java/android/telecom/ParcelableConference.java b/telecomm/java/android/telecom/ParcelableConference.java index f5689d882ba8..a6221d4d7236 100644 --- a/telecomm/java/android/telecom/ParcelableConference.java +++ b/telecomm/java/android/telecom/ParcelableConference.java @@ -41,6 +41,7 @@ public final class ParcelableConference implements Parcelable { private final int mVideoState; private StatusHints mStatusHints; private Bundle mExtras; + private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; public ParcelableConference( PhoneAccountHandle phoneAccount, @@ -51,6 +52,7 @@ public final class ParcelableConference implements Parcelable { IVideoProvider videoProvider, int videoState, long connectTimeMillis, + long connectElapsedTimeMillis, StatusHints statusHints, Bundle extras) { mPhoneAccount = phoneAccount; @@ -58,12 +60,12 @@ public final class ParcelableConference implements Parcelable { mConnectionCapabilities = connectionCapabilities; mConnectionProperties = connectionProperties; mConnectionIds = connectionIds; - mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; mVideoProvider = videoProvider; mVideoState = videoState; mConnectTimeMillis = connectTimeMillis; mStatusHints = statusHints; mExtras = extras; + mConnectElapsedTimeMillis = connectElapsedTimeMillis; } @Override @@ -111,6 +113,11 @@ public final class ParcelableConference implements Parcelable { public long getConnectTimeMillis() { return mConnectTimeMillis; } + + public long getConnectElapsedTimeMillis() { + return mConnectElapsedTimeMillis; + } + public IVideoProvider getVideoProvider() { return mVideoProvider; } @@ -144,10 +151,11 @@ public final class ParcelableConference implements Parcelable { StatusHints statusHints = source.readParcelable(classLoader); Bundle extras = source.readBundle(classLoader); int properties = source.readInt(); + long connectElapsedTimeMillis = source.readLong(); return new ParcelableConference(phoneAccount, state, capabilities, properties, - connectionIds, videoCallProvider, videoState, connectTimeMillis, statusHints, - extras); + connectionIds, videoCallProvider, videoState, connectTimeMillis, + connectElapsedTimeMillis, statusHints, extras); } @Override @@ -176,5 +184,6 @@ public final class ParcelableConference implements Parcelable { destination.writeParcelable(mStatusHints, 0); destination.writeBundle(mExtras); destination.writeInt(mConnectionProperties); + destination.writeLong(mConnectElapsedTimeMillis); } } diff --git a/telecomm/java/android/telecom/ParcelableConnection.java b/telecomm/java/android/telecom/ParcelableConnection.java index 434abf53624c..61d5a1265312 100644 --- a/telecomm/java/android/telecom/ParcelableConnection.java +++ b/telecomm/java/android/telecom/ParcelableConnection.java @@ -47,6 +47,7 @@ public final class ParcelableConnection implements Parcelable { private final boolean mRingbackRequested; private final boolean mIsVoipAudioMode; private final long mConnectTimeMillis; + private final long mConnectElapsedTimeMillis; private final StatusHints mStatusHints; private final DisconnectCause mDisconnectCause; private final List<String> mConferenceableConnectionIds; @@ -69,6 +70,7 @@ public final class ParcelableConnection implements Parcelable { boolean ringbackRequested, boolean isVoipAudioMode, long connectTimeMillis, + long connectElapsedTimeMillis, StatusHints statusHints, DisconnectCause disconnectCause, List<String> conferenceableConnectionIds, @@ -77,7 +79,8 @@ public final class ParcelableConnection implements Parcelable { this(phoneAccount, state, capabilities, properties, supportedAudioRoutes, address, addressPresentation, callerDisplayName, callerDisplayNamePresentation, videoProvider, videoState, ringbackRequested, isVoipAudioMode, connectTimeMillis, - statusHints, disconnectCause, conferenceableConnectionIds, extras); + connectElapsedTimeMillis, statusHints, disconnectCause, conferenceableConnectionIds, + extras); mParentCallId = parentCallId; } @@ -97,6 +100,7 @@ public final class ParcelableConnection implements Parcelable { boolean ringbackRequested, boolean isVoipAudioMode, long connectTimeMillis, + long connectElapsedTimeMillis, StatusHints statusHints, DisconnectCause disconnectCause, List<String> conferenceableConnectionIds, @@ -115,6 +119,7 @@ public final class ParcelableConnection implements Parcelable { mRingbackRequested = ringbackRequested; mIsVoipAudioMode = isVoipAudioMode; mConnectTimeMillis = connectTimeMillis; + mConnectElapsedTimeMillis = connectElapsedTimeMillis; mStatusHints = statusHints; mDisconnectCause = disconnectCause; mConferenceableConnectionIds = conferenceableConnectionIds; @@ -190,6 +195,10 @@ public final class ParcelableConnection implements Parcelable { return mConnectTimeMillis; } + public long getConnectElapsedTimeMillis() { + return mConnectElapsedTimeMillis; + } + public final StatusHints getStatusHints() { return mStatusHints; } @@ -255,6 +264,7 @@ public final class ParcelableConnection implements Parcelable { int properties = source.readInt(); int supportedAudioRoutes = source.readInt(); String parentCallId = source.readString(); + long connectElapsedTimeMillis = source.readLong(); return new ParcelableConnection( phoneAccount, @@ -271,6 +281,7 @@ public final class ParcelableConnection implements Parcelable { ringbackRequested, audioModeIsVoip, connectTimeMillis, + connectElapsedTimeMillis, statusHints, disconnectCause, conferenceableConnectionIds, @@ -313,5 +324,6 @@ public final class ParcelableConnection implements Parcelable { destination.writeInt(mConnectionProperties); destination.writeInt(mSupportedAudioRoutes); destination.writeString(mParentCallId); + destination.writeLong(mConnectElapsedTimeMillis); } } |