summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/simulator/impl/SimulatorConnection.java
diff options
context:
space:
mode:
authorsail <sail@google.com>2017-08-31 16:48:09 -0700
committerEric Erfanian <erfanian@google.com>2017-09-07 04:37:37 +0000
commit53e1ce35f713139629cb24df6ea1245e11464a42 (patch)
treebf94bb3fcbf38857e65c4637aa0dde6bd637868b /java/com/android/dialer/simulator/impl/SimulatorConnection.java
parent273fd7bc5840a71cf8445455bc0bb1945e2cfc8d (diff)
Use simulator to add in-call UI integration tests
This CL uses the simulator connection service to perform integration tests for incallui. The main pieces of this CL are: - DialerCallEvent - this is how we track changes to the incallui calls - Simulator.Event - this is how we track changes to a simulator connection With the above two we can do things like: - block until a DialerCall switches from ACTIVE TO ONHOLD: - DialerCallEspresso.waitForNextEvent(tracker, call, new DialerCallEvent(STATE_CHANGE, "ACTIVE", "ONHOLD") - block for a connection to recive a particular DTMF code: - SimulatorConnectionEspresso.waitForNextEvent(call, Event.DTMF) Future CLs will include things like: - fling to answer / reject - conference calls - screenshot diffing - video calling Test: InCallActivityTest PiperOrigin-RevId: 167211015 Change-Id: Ib013b10fe963092fad0816b07b1659efd69d9468
Diffstat (limited to 'java/com/android/dialer/simulator/impl/SimulatorConnection.java')
-rw-r--r--java/com/android/dialer/simulator/impl/SimulatorConnection.java60
1 files changed, 52 insertions, 8 deletions
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConnection.java b/java/com/android/dialer/simulator/impl/SimulatorConnection.java
index 12d095890..b462b5405 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConnection.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConnection.java
@@ -16,41 +16,85 @@
package com.android.dialer.simulator.impl;
+import android.support.annotation.NonNull;
import android.telecom.Connection;
-import android.telecom.DisconnectCause;
+import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.simulator.Simulator.Event;
+import java.util.ArrayList;
+import java.util.List;
/** Represents a single phone call on the device. */
-final class SimulatorConnection extends Connection {
+public final class SimulatorConnection extends Connection {
+ private final List<Listener> listeners = new ArrayList<>();
+ private final List<Event> events = new ArrayList<>();
+ private int currentState = STATE_NEW;
+
+ public void addListener(@NonNull Listener listener) {
+ listeners.add(Assert.isNotNull(listener));
+ }
+
+ public void removeListener(@NonNull Listener listener) {
+ listeners.remove(Assert.isNotNull(listener));
+ }
+
+ @NonNull
+ public List<Event> getEvents() {
+ return events;
+ }
@Override
public void onAnswer() {
LogUtil.enterBlock("SimulatorConnection.onAnswer");
- setActive();
+ onEvent(new Event(Event.ANSWER));
}
@Override
public void onReject() {
LogUtil.enterBlock("SimulatorConnection.onReject");
- setDisconnected(new DisconnectCause(DisconnectCause.REJECTED));
+ onEvent(new Event(Event.REJECT));
}
@Override
public void onHold() {
LogUtil.enterBlock("SimulatorConnection.onHold");
- setOnHold();
+ onEvent(new Event(Event.HOLD));
}
@Override
public void onUnhold() {
LogUtil.enterBlock("SimulatorConnection.onUnhold");
- setActive();
+ onEvent(new Event(Event.UNHOLD));
}
@Override
public void onDisconnect() {
LogUtil.enterBlock("SimulatorConnection.onDisconnect");
- setDisconnected(new DisconnectCause(DisconnectCause.LOCAL));
- destroy();
+ onEvent(new Event(Event.DISCONNECT));
+ }
+
+ @Override
+ public void onStateChanged(int newState) {
+ LogUtil.enterBlock("SimulatorConnection.onStateChanged");
+ onEvent(new Event(Event.STATE_CHANGE, stateToString(currentState), stateToString(newState)));
+ currentState = newState;
+ }
+
+ @Override
+ public void onPlayDtmfTone(char c) {
+ LogUtil.enterBlock("SimulatorConnection.onPlayDtmfTone");
+ onEvent(new Event(Event.DTMF, Character.toString(c), null));
+ }
+
+ private void onEvent(@NonNull Event event) {
+ events.add(Assert.isNotNull(event));
+ for (Listener listener : listeners) {
+ listener.onEvent(this, event);
+ }
+ }
+
+ /** Callback for when a new event arrives. */
+ public interface Listener {
+ void onEvent(@NonNull SimulatorConnection connection, @NonNull Event event);
}
}