diff options
author | sail <sail@google.com> | 2017-08-31 16:48:09 -0700 |
---|---|---|
committer | Eric Erfanian <erfanian@google.com> | 2017-09-07 04:37:37 +0000 |
commit | 53e1ce35f713139629cb24df6ea1245e11464a42 (patch) | |
tree | bf94bb3fcbf38857e65c4637aa0dde6bd637868b /java/com/android/dialer/simulator/impl/SimulatorConnection.java | |
parent | 273fd7bc5840a71cf8445455bc0bb1945e2cfc8d (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.java | 60 |
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); } } |