summaryrefslogtreecommitdiff
path: root/java/com/android/incallui
diff options
context:
space:
mode:
authormaxwelb <maxwelb@google.com>2018-05-01 17:50:55 -0700
committerWeijia Xu <weijiaxu@google.com>2018-05-04 06:14:57 +0000
commitd95d0f6bec2b144ae89e5f6ae9fc453508536cd9 (patch)
treeac4f7ae9112bee85dd556f981cbd005256c648e0 /java/com/android/incallui
parent34b1662b7532343341bbee22227e8ed82575864f (diff)
Save connection info in the DialerCall
Bug: 76224138 Test: DialerCallTest PiperOrigin-RevId: 195027298 Change-Id: I5e341af68d7efedff6047421c9fd45b612133a8c
Diffstat (limited to 'java/com/android/incallui')
-rw-r--r--java/com/android/incallui/call/DialerCall.java78
-rw-r--r--java/com/android/incallui/spam/SpamCallListListener.java2
2 files changed, 58 insertions, 22 deletions
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 1c2744644..1a0de1960 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -27,6 +27,7 @@ import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.os.PersistableBundle;
+import android.os.SystemClock;
import android.os.Trace;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
@@ -79,6 +80,7 @@ import com.android.dialer.rtt.RttTranscriptUtil;
import com.android.dialer.telecom.TelecomCallUtil;
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.theme.R;
+import com.android.dialer.time.Clock;
import com.android.dialer.util.PermissionsUtil;
import com.android.incallui.audiomode.AudioModeProvider;
import com.android.incallui.call.state.DialerCallState;
@@ -194,6 +196,8 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
private volatile boolean feedbackRequested = false;
+ private Clock clock = System::currentTimeMillis;
+
@Nullable private PreferredAccountRecorder preferredAccountRecorder;
private boolean isCallRemoved;
@@ -415,18 +419,6 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
updateEnrichedCallSession();
}
- /** Test only constructor to avoid initializing dependencies. */
- @VisibleForTesting
- DialerCall(Context context) {
- this.context = context;
- telecomCall = null;
- latencyReport = null;
- id = null;
- hiddenId = 0;
- dialerCallDelegate = null;
- videoTechManager = null;
- }
-
private static int translateState(int state) {
switch (state) {
case Call.STATE_NEW:
@@ -863,21 +855,49 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
public void setState(int state) {
if (state == DialerCallState.INCOMING) {
logState.isIncoming = true;
- } else if (state == DialerCallState.DISCONNECTED) {
+ }
+ updateCallTiming(state);
+
+ this.state = state;
+ }
+
+ private void updateCallTiming(int newState) {
+ if (newState == DialerCallState.ACTIVE) {
+ if (this.state == DialerCallState.ACTIVE) {
+ LogUtil.i("DialerCall.updateCallTiming", "state is already active");
+ return;
+ }
+ logState.dialerConnectTimeMillis = clock.currentTimeMillis();
+ logState.dialerConnectTimeMillisElapsedRealtime = SystemClock.elapsedRealtime();
+ }
+
+ if (newState == DialerCallState.DISCONNECTED) {
long newDuration =
- getConnectTimeMillis() == 0 ? 0 : System.currentTimeMillis() - getConnectTimeMillis();
- if (this.state != state) {
- logState.duration = newDuration;
- } else {
+ getConnectTimeMillis() == 0 ? 0 : clock.currentTimeMillis() - getConnectTimeMillis();
+ if (this.state == DialerCallState.DISCONNECTED) {
LogUtil.i(
"DialerCall.setState",
"ignoring state transition from DISCONNECTED to DISCONNECTED."
+ " Duration would have changed from %s to %s",
- logState.duration,
+ logState.telecomDurationMillis,
newDuration);
+ return;
}
+ logState.telecomDurationMillis = newDuration;
+ logState.dialerDurationMillis =
+ logState.dialerConnectTimeMillis == 0
+ ? 0
+ : clock.currentTimeMillis() - logState.dialerConnectTimeMillis;
+ logState.dialerDurationMillisElapsedRealtime =
+ logState.dialerConnectTimeMillisElapsedRealtime == 0
+ ? 0
+ : SystemClock.elapsedRealtime() - logState.dialerConnectTimeMillisElapsedRealtime;
}
- this.state = state;
+ }
+
+ @VisibleForTesting
+ void setClock(Clock clock) {
+ this.clock = clock;
}
public int getNumberPresentation() {
@@ -1735,9 +1755,25 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
public CallSpecificAppData callSpecificAppData;
// If this was a conference call, the total number of calls involved in the conference.
public int conferencedCalls = 0;
- public long duration = 0;
public boolean isLogged = false;
+ // Result of subtracting android.telecom.Call.Details#getConnectTimeMillis from the current time
+ public long telecomDurationMillis = 0;
+
+ // Result of a call to System.currentTimeMillis when Dialer sees that a call
+ // moves to the ACTIVE state
+ long dialerConnectTimeMillis = 0;
+
+ // Same as dialer_connect_time_millis, using SystemClock.elapsedRealtime
+ // instead
+ long dialerConnectTimeMillisElapsedRealtime = 0;
+
+ // Result of subtracting dialer_connect_time_millis from System.currentTimeMillis
+ public long dialerDurationMillis = 0;
+
+ // Same as dialerDurationMillis, using SystemClock.elapsedRealtime instead
+ public long dialerDurationMillisElapsedRealtime = 0;
+
private static String lookupToString(ContactLookupResult.Type lookupType) {
switch (lookupType) {
case LOCAL_CONTACT:
@@ -1806,7 +1842,7 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
isIncoming,
lookupToString(contactLookupResult),
initiationToString(callSpecificAppData),
- duration);
+ telecomDurationMillis);
}
}
diff --git a/java/com/android/incallui/spam/SpamCallListListener.java b/java/com/android/incallui/spam/SpamCallListListener.java
index e852f3d2c..350dd60fc 100644
--- a/java/com/android/incallui/spam/SpamCallListListener.java
+++ b/java/com/android/incallui/spam/SpamCallListListener.java
@@ -219,7 +219,7 @@ public class SpamCallListListener implements CallList.Listener {
return false;
}
- if (logState.duration <= 0) {
+ if (logState.telecomDurationMillis <= 0) {
return false;
}