From 53e1ce35f713139629cb24df6ea1245e11464a42 Mon Sep 17 00:00:00 2001 From: sail Date: Thu, 31 Aug 2017 16:48:09 -0700 Subject: 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 --- .../dialer/simulator/impl/SimulatorConnection.java | 60 +++++++++++++++++++--- 1 file changed, 52 insertions(+), 8 deletions(-) (limited to 'java/com/android/dialer/simulator/impl/SimulatorConnection.java') 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 listeners = new ArrayList<>(); + private final List 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 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); } } -- cgit v1.2.3