summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tyler Gunn <tgunn@google.com> 2017-08-04 09:27:26 -0700
committer Tyler Gunn <tgunn@google.com> 2017-08-23 14:47:31 -0700
commitb2f875bc5468eec359dfbbe8697f94d7734cafed (patch)
tree77deeca83e566469462f574a7c723f838dd5e03a
parente605167e0d209c4d9a23280acadab7a4d342ed82 (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.txt1
-rw-r--r--api/system-current.txt1
-rw-r--r--api/test-current.txt1
-rw-r--r--telecomm/java/android/telecom/Conference.java37
-rw-r--r--telecomm/java/android/telecom/Connection.java37
-rw-r--r--telecomm/java/android/telecom/ConnectionService.java3
-rw-r--r--telecomm/java/android/telecom/ParcelableConference.java15
-rw-r--r--telecomm/java/android/telecom/ParcelableConnection.java14
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);
}
}