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
This commit is contained in:
Yorke Lee
2014-09-15 19:18:13 -07:00
parent bd9d664743
commit a0d3ca9746
3 changed files with 60 additions and 3 deletions

View File

@@ -28072,14 +28072,18 @@ package android.telecom {
ctor public Conference(android.telecom.PhoneAccountHandle);
method public final boolean addConnection(android.telecom.Connection);
method public final void destroy();
method public final android.telecom.AudioState getAudioState();
method public final int getCapabilities();
method public final java.util.List<android.telecom.Connection> getConnections();
method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle();
method public final int getState();
method public void onAudioStateChanged(android.telecom.AudioState);
method public void onDisconnect();
method public void onHold();
method public void onMerge();
method public void onPlayDtmfTone(char);
method public void onSeparate(android.telecom.Connection);
method public void onStopDtmfTone();
method public void onSwap();
method public void onUnhold();
method public final void removeConnection(android.telecom.Connection);

View File

@@ -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;
@@ -95,6 +96,15 @@ public abstract class Conference {
return mCapabilities;
}
/**
* @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.
*/
@@ -129,6 +139,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.
*/
@@ -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 &&

View File

@@ -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) {