diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-02-23 03:32:42 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-02-23 03:32:42 +0000 |
commit | 54d8e8c065bfd9d7e6397302bc38ae9f13e4c0ce (patch) | |
tree | d310519cc3c1534a2f743b882931ed1a6fe43773 | |
parent | e938109e267aee33a5c30c1ae9d76482093b4e87 (diff) | |
parent | 067b074d7e93b701e0239c3178db51e73cf6ad49 (diff) |
Merge "Add dialer simulation functionality into simulator."
3 files changed, 100 insertions, 22 deletions
diff --git a/java/com/android/dialer/simulator/impl/NonSimulatorConnectionListener.java b/java/com/android/dialer/simulator/impl/NonSimulatorConnectionListener.java new file mode 100644 index 000000000..333d66c34 --- /dev/null +++ b/java/com/android/dialer/simulator/impl/NonSimulatorConnectionListener.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.dialer.simulator.impl; + +import android.support.annotation.NonNull; +import android.telecom.Connection.RttModifyStatus; +import android.telecom.DisconnectCause; +import com.android.dialer.common.Assert; +import com.android.dialer.common.LogUtil; +import com.android.dialer.common.concurrent.ThreadUtil; +import com.android.dialer.simulator.Simulator.Event; + +/** Listen to call backs from Connections not made by simulator. */ +final class NonSimulatorConnectionListener implements SimulatorConnection.Listener { + + @Override + public void onEvent(@NonNull SimulatorConnection connection, @NonNull Event event) { + switch (event.type) { + case Event.REJECT: + connection.setDisconnected(new DisconnectCause(DisconnectCause.REJECTED)); + break; + case Event.HOLD: + connection.setOnHold(); + break; + case Event.ANSWER: + case Event.UNHOLD: + connection.setActive(); + break; + case Event.DISCONNECT: + connection.setDisconnected(new DisconnectCause(DisconnectCause.LOCAL)); + break; + case Event.SESSION_MODIFY_REQUEST: + ThreadUtil.postDelayedOnUiThread(() -> connection.handleSessionModifyRequest(event), 2000); + break; + case Event.START_RTT: + boolean accept = true; + if (accept) { + connection.sendRttInitiationSuccess(); + } else { + connection.sendRttInitiationFailure(RttModifyStatus.SESSION_MODIFY_REQUEST_FAIL); + } + break; + case Event.NONE: + default: + LogUtil.i("SimulatorVoiceCall.onEvent", "unexpected event: " + event.type); + throw Assert.createIllegalStateFailException(); + } + } +} diff --git a/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java b/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java index a5fb20b7b..19104be24 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java +++ b/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java @@ -17,6 +17,7 @@ package com.android.dialer.simulator.impl; import android.net.Uri; +import android.os.Bundle; import android.support.annotation.NonNull; import android.telecom.Connection; import android.telecom.ConnectionRequest; @@ -72,7 +73,8 @@ public class SimulatorConnectionService extends ConnectionService { public Connection onCreateOutgoingConnection( PhoneAccountHandle phoneAccount, ConnectionRequest request) { LogUtil.enterBlock("SimulatorConnectionService.onCreateOutgoingConnection"); - if (!SimulatorSimCallManager.isSimulatorConnectionRequest(request)) { + if (!SimulatorComponent.get(this).getSimulator().isSimulatorMode() + && !SimulatorSimCallManager.isSimulatorConnectionRequest(request)) { LogUtil.i( "SimulatorConnectionService.onCreateOutgoingConnection", "outgoing call not from simulator, unregistering"); @@ -82,20 +84,29 @@ public class SimulatorConnectionService extends ConnectionService { return null; } SimulatorConnection connection = new SimulatorConnection(this, request); - connection.setAddress( - request.getAddress(), - request - .getExtras() - .getInt(Simulator.PRESENTATION_CHOICE, TelecomManager.PRESENTATION_ALLOWED)); connection.setDialing(); - simulatorConnectionsBank.add(connection); - ThreadUtil.postOnUiThread( - () -> - SimulatorComponent.get(instance) - .getSimulatorConnectionsBank() - .updateConferenceableConnections()); - for (Listener listener : listeners) { - listener.onNewOutgoingConnection(connection); + if (SimulatorSimCallManager.isSimulatorConnectionRequest(request)) { + simulatorConnectionsBank.add(connection); + connection.setAddress( + request.getAddress(), + request + .getExtras() + .getInt(Simulator.PRESENTATION_CHOICE, TelecomManager.PRESENTATION_ALLOWED)); + ThreadUtil.postOnUiThread( + () -> + SimulatorComponent.get(instance) + .getSimulatorConnectionsBank() + .updateConferenceableConnections()); + for (Listener listener : listeners) { + listener.onNewOutgoingConnection(connection); + } + } else { + connection.setAddress(request.getAddress(), 1); + Bundle extras = connection.getExtras(); + extras.putString("connection_tag", "SimulatorMode"); + connection.putExtras(extras); + simulatorConnectionsBank.add(connection); + connection.addListener(new NonSimulatorConnectionListener()); } return connection; } diff --git a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java index 1bf4b2a00..ba2b55802 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java +++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java @@ -65,16 +65,20 @@ final class SimulatorMainMenu { EnrichedCallSimulatorActivity.newIntent(activity.getApplicationContext()))) .addItem( "Enable simulator mode", - () -> - SimulatorComponent.get(activity.getApplicationContext()) - .getSimulator() - .enableSimulatorMode()) + () -> { + SimulatorComponent.get(activity.getApplicationContext()) + .getSimulator() + .enableSimulatorMode(); + SimulatorSimCallManager.register(activity.getApplicationContext()); + }) .addItem( "Disable simulator mode", - () -> - SimulatorComponent.get(activity.getApplicationContext()) - .getSimulator() - .disableSimulatorMode()); + () -> { + SimulatorComponent.get(activity.getApplicationContext()) + .getSimulator() + .disableSimulatorMode(); + SimulatorSimCallManager.unregister(activity.getApplicationContext()); + }); return simulatorSubMenu; } |