From 5c2d992ba8bb325eec435bef97684317fb800cc6 Mon Sep 17 00:00:00 2001 From: weijiaxu Date: Tue, 31 Oct 2017 11:11:29 -0700 Subject: Add VoLTE conference call to simulator and fix a minor issue for GSM conference. Bug: 67785540 Test: On a walleye. PiperOrigin-RevId: 174062497 Change-Id: I757b423f1c9ffe286fab15d3d8b5be8fe7c549dc --- java/com/android/dialer/simulator/Simulator.java | 2 ++ .../dialer/simulator/impl/SimulatorConference.java | 16 ++++++++++++++++ .../simulator/impl/SimulatorConferenceCreator.java | 13 ++++++++----- .../dialer/simulator/impl/SimulatorConnection.java | 6 ++++-- .../dialer/simulator/impl/SimulatorVoiceCall.java | 6 +++++- 5 files changed, 35 insertions(+), 8 deletions(-) (limited to 'java/com/android/dialer/simulator') diff --git a/java/com/android/dialer/simulator/Simulator.java b/java/com/android/dialer/simulator/Simulator.java index bfa202c5c..2094b420e 100644 --- a/java/com/android/dialer/simulator/Simulator.java +++ b/java/com/android/dialer/simulator/Simulator.java @@ -35,10 +35,12 @@ public interface Simulator { @Retention(RetentionPolicy.SOURCE) @IntDef({ CONFERENCE_TYPE_GSM, + CONFERENCE_TYPE_VOLTE, }) @interface ConferenceType {} static final int CONFERENCE_TYPE_GSM = 1; + static final int CONFERENCE_TYPE_VOLTE = 2; /** Information about a connection event. */ public static class Event { diff --git a/java/com/android/dialer/simulator/impl/SimulatorConference.java b/java/com/android/dialer/simulator/impl/SimulatorConference.java index 7468b56b5..1a12d2a9f 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorConference.java +++ b/java/com/android/dialer/simulator/impl/SimulatorConference.java @@ -58,6 +58,17 @@ public final class SimulatorConference extends Conference implements SimulatorCo return simulatorConference; } + static SimulatorConference newVoLteConference(PhoneAccountHandle handle) { + SimulatorConference simulatorConference = + new SimulatorConference(handle, Simulator.CONFERENCE_TYPE_VOLTE); + simulatorConference.setConnectionCapabilities( + Connection.CAPABILITY_MUTE + | Connection.CAPABILITY_SUPPORT_HOLD + | Connection.CAPABILITY_HOLD + | Connection.CAPABILITY_MANAGE_CONFERENCE); + return simulatorConference; + } + public void addListener(@NonNull Listener listener) { listeners.add(Assert.isNotNull(listener)); } @@ -120,6 +131,11 @@ public final class SimulatorConference extends Conference implements SimulatorCo public void onSeparate(Connection connection) { LogUtil.i("SimulatorConference.onSeparate", "connection: " + connection); onEvent(new Event(Event.SEPARATE, SimulatorSimCallManager.getConnectionTag(connection), null)); + // if there is only 1 connection in a gsm conference, destroy the conference. + if (conferenceType == Simulator.CONFERENCE_TYPE_GSM && getConnections().size() == 1) { + removeConnection(getConnections().get(0)); + destroy(); + } } @Override diff --git a/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java b/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java index 838b58dc2..d0249938a 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java +++ b/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java @@ -64,6 +64,13 @@ final class SimulatorConferenceCreator String callerId = String.format(Locale.US, "+1-650-234%04d", callCount); Bundle extras = new Bundle(); extras.putInt(EXTRA_CALL_COUNT, callCount - 1); + switch (conferenceType) { + case Simulator.CONFERENCE_TYPE_VOLTE: + extras.putBoolean("ISVOLTE", true); + break; + default: + break; + } connectionTags.add( SimulatorSimCallManager.addNewIncomingCall(context, callerId, false /* isVideo */, extras)); } @@ -78,16 +85,11 @@ final class SimulatorConferenceCreator LogUtil.i("SimulatorConferenceCreator.onNewOutgoingConnection", "connection created"); connection.addListener(this); - // Telecom will force the connection to switch to DIALING when we return it. Wait until after - // we're returned it before changing call state. - ThreadUtil.postOnUiThread(() -> connection.setActive()); - // Once the connection is active, go ahead and conference it and add the next call. ThreadUtil.postDelayedOnUiThread( () -> { SimulatorConference conference = findCurrentConference(); if (conference == null) { - Assert.checkArgument(conferenceType == Simulator.CONFERENCE_TYPE_GSM); conference = SimulatorConference.newGsmConference( SimulatorSimCallManager.getSystemPhoneAccountHandle(context)); @@ -95,6 +97,7 @@ final class SimulatorConferenceCreator SimulatorConnectionService.getInstance().addConference(conference); } updateConferenceableConnections(); + connection.setActive(); conference.addConnection(connection); addNextCall(getCallCount(connection)); }, diff --git a/java/com/android/dialer/simulator/impl/SimulatorConnection.java b/java/com/android/dialer/simulator/impl/SimulatorConnection.java index e4a34b51b..168f5db98 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorConnection.java +++ b/java/com/android/dialer/simulator/impl/SimulatorConnection.java @@ -42,8 +42,10 @@ public final class SimulatorConnection extends Connection { | CAPABILITY_SUPPORT_HOLD | CAPABILITY_HOLD | CAPABILITY_CAN_UPGRADE_TO_VIDEO - | CAPABILITY_DISCONNECT_FROM_CONFERENCE - | CAPABILITY_SEPARATE_FROM_CONFERENCE); + | CAPABILITY_DISCONNECT_FROM_CONFERENCE); + if (request.getExtras() != null && !request.getExtras().getBoolean("ISVOLTE")) { + setConnectionCapabilities(getConnectionCapabilities() | CAPABILITY_SEPARATE_FROM_CONFERENCE); + } setVideoProvider(new SimulatorVideoProvider(context, this)); } diff --git a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java index f2a1d0901..d2eba6b03 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java +++ b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java @@ -42,7 +42,11 @@ final class SimulatorVoiceCall .addItem("Emergency call", () -> new SimulatorVoiceCall(context).addNewEmergencyCall()) .addItem( "GSM conference", - () -> new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM).start(5)); + () -> new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM).start(5)) + .addItem( + "VoLTE conference", + () -> + new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_VOLTE).start(5)); } private SimulatorVoiceCall(@NonNull Context context) { -- cgit v1.2.3