From a0d3ca9746143d669fe9384babb9e1b9fca33dcf Mon Sep 17 00:00:00 2001 From: Yorke Lee Date: Mon, 15 Sep 2014 19:18:13 -0700 Subject: Add missing methods to Conference object Add setAudioState, onPlayDtmf and onStopDtmf to the conference object. This fixes DTMF tones for conference calls. Bug: 17512380 Change-Id: Ice9403d3d750131f077a3ea129b7f67430c68348 --- telecomm/java/android/telecom/Conference.java | 41 ++++++++++++++++++++++ .../java/android/telecom/ConnectionService.java | 18 ++++++++-- 2 files changed, 56 insertions(+), 3 deletions(-) (limited to 'telecomm') diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java index ca85446..7c553e2 100644 --- a/telecomm/java/android/telecom/Conference.java +++ b/telecomm/java/android/telecom/Conference.java @@ -45,6 +45,7 @@ public abstract class Conference { Collections.unmodifiableList(mChildConnections); private PhoneAccountHandle mPhoneAccount; + private AudioState mAudioState; private int mState = Connection.STATE_NEW; private int mDisconnectCause = DisconnectCause.NOT_VALID; private int mCapabilities; @@ -96,6 +97,15 @@ public abstract class Conference { } /** + * @return The audio state of the conference, describing how its audio is currently + * being routed by the system. This is {@code null} if this Conference + * does not directly know about its audio state. + */ + public final AudioState getAudioState() { + return mAudioState; + } + + /** * Invoked when the Conference and all it's {@link Connection}s should be disconnected. */ public void onDisconnect() {} @@ -130,6 +140,25 @@ public abstract class Conference { public void onSwap() {} /** + * Notifies this conference of a request to play a DTMF tone. + * + * @param c A DTMF character. + */ + public void onPlayDtmfTone(char c) {} + + /** + * Notifies this conference of a request to stop any currently playing DTMF tones. + */ + public void onStopDtmfTone() {} + + /** + * Notifies this conference that the {@link #getAudioState()} property has a new value. + * + * @param state The new call audio state. + */ + public void onAudioStateChanged(AudioState state) {} + + /** * Sets state to be on hold. */ public final void setOnHold() { @@ -255,6 +284,18 @@ public abstract class Conference { return this; } + /** + * Inform this Conference that the state of its audio output has been changed externally. + * + * @param state The new audio state. + * @hide + */ + final void setAudioState(AudioState state) { + Log.d(this, "setAudioState %s", state); + mAudioState = state; + onAudioStateChanged(state); + } + private void setState(int newState) { if (newState != Connection.STATE_ACTIVE && newState != Connection.STATE_HOLDING && diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index cc80e22..9f26890 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -608,17 +608,29 @@ public abstract class ConnectionService extends Service { private void onAudioStateChanged(String callId, AudioState audioState) { Log.d(this, "onAudioStateChanged %s %s", callId, audioState); - findConnectionForAction(callId, "onAudioStateChanged").setAudioState(audioState); + if (mConnectionById.containsKey(callId)) { + findConnectionForAction(callId, "onAudioStateChanged").setAudioState(audioState); + } else { + findConferenceForAction(callId, "onAudioStateChanged").setAudioState(audioState); + } } private void playDtmfTone(String callId, char digit) { Log.d(this, "playDtmfTone %s %c", callId, digit); - findConnectionForAction(callId, "playDtmfTone").onPlayDtmfTone(digit); + if (mConnectionById.containsKey(callId)) { + findConnectionForAction(callId, "playDtmfTone").onPlayDtmfTone(digit); + } else { + findConferenceForAction(callId, "playDtmfTone").onPlayDtmfTone(digit); + } } private void stopDtmfTone(String callId) { Log.d(this, "stopDtmfTone %s", callId); - findConnectionForAction(callId, "stopDtmfTone").onStopDtmfTone(); + if (mConnectionById.containsKey(callId)) { + findConnectionForAction(callId, "stopDtmfTone").onStopDtmfTone(); + } else { + findConferenceForAction(callId, "stopDtmfTone").onStopDtmfTone(); + } } private void conference(String callId1, String callId2) { -- cgit v1.1