Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0d3ca97 authored by Yorke Lee's avatar Yorke Lee
Browse files

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
parent bd9d6647
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -28072,14 +28072,18 @@ package android.telecom {
    ctor public Conference(android.telecom.PhoneAccountHandle);
    ctor public Conference(android.telecom.PhoneAccountHandle);
    method public final boolean addConnection(android.telecom.Connection);
    method public final boolean addConnection(android.telecom.Connection);
    method public final void destroy();
    method public final void destroy();
    method public final android.telecom.AudioState getAudioState();
    method public final int getCapabilities();
    method public final int getCapabilities();
    method public final java.util.List<android.telecom.Connection> getConnections();
    method public final java.util.List<android.telecom.Connection> getConnections();
    method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle();
    method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle();
    method public final int getState();
    method public final int getState();
    method public void onAudioStateChanged(android.telecom.AudioState);
    method public void onDisconnect();
    method public void onDisconnect();
    method public void onHold();
    method public void onHold();
    method public void onMerge();
    method public void onMerge();
    method public void onPlayDtmfTone(char);
    method public void onSeparate(android.telecom.Connection);
    method public void onSeparate(android.telecom.Connection);
    method public void onStopDtmfTone();
    method public void onSwap();
    method public void onSwap();
    method public void onUnhold();
    method public void onUnhold();
    method public final void removeConnection(android.telecom.Connection);
    method public final void removeConnection(android.telecom.Connection);
+41 −0
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ public abstract class Conference {
            Collections.unmodifiableList(mChildConnections);
            Collections.unmodifiableList(mChildConnections);


    private PhoneAccountHandle mPhoneAccount;
    private PhoneAccountHandle mPhoneAccount;
    private AudioState mAudioState;
    private int mState = Connection.STATE_NEW;
    private int mState = Connection.STATE_NEW;
    private int mDisconnectCause = DisconnectCause.NOT_VALID;
    private int mDisconnectCause = DisconnectCause.NOT_VALID;
    private int mCapabilities;
    private int mCapabilities;
@@ -95,6 +96,15 @@ public abstract class Conference {
        return mCapabilities;
        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.
     * 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() {}
    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.
     * Sets state to be on hold.
     */
     */
@@ -255,6 +284,18 @@ public abstract class Conference {
        return this;
        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) {
    private void setState(int newState) {
        if (newState != Connection.STATE_ACTIVE &&
        if (newState != Connection.STATE_ACTIVE &&
                newState != Connection.STATE_HOLDING &&
                newState != Connection.STATE_HOLDING &&
+15 −3
Original line number Original line Diff line number Diff line
@@ -608,17 +608,29 @@ public abstract class ConnectionService extends Service {


    private void onAudioStateChanged(String callId, AudioState audioState) {
    private void onAudioStateChanged(String callId, AudioState audioState) {
        Log.d(this, "onAudioStateChanged %s %s", callId, audioState);
        Log.d(this, "onAudioStateChanged %s %s", callId, audioState);
        if (mConnectionById.containsKey(callId)) {
            findConnectionForAction(callId, "onAudioStateChanged").setAudioState(audioState);
            findConnectionForAction(callId, "onAudioStateChanged").setAudioState(audioState);
        } else {
            findConferenceForAction(callId, "onAudioStateChanged").setAudioState(audioState);
        }
    }
    }


    private void playDtmfTone(String callId, char digit) {
    private void playDtmfTone(String callId, char digit) {
        Log.d(this, "playDtmfTone %s %c", callId, digit);
        Log.d(this, "playDtmfTone %s %c", callId, digit);
        if (mConnectionById.containsKey(callId)) {
            findConnectionForAction(callId, "playDtmfTone").onPlayDtmfTone(digit);
            findConnectionForAction(callId, "playDtmfTone").onPlayDtmfTone(digit);
        } else {
            findConferenceForAction(callId, "playDtmfTone").onPlayDtmfTone(digit);
        }
    }
    }


    private void stopDtmfTone(String callId) {
    private void stopDtmfTone(String callId) {
        Log.d(this, "stopDtmfTone %s", callId);
        Log.d(this, "stopDtmfTone %s", callId);
        if (mConnectionById.containsKey(callId)) {
            findConnectionForAction(callId, "stopDtmfTone").onStopDtmfTone();
            findConnectionForAction(callId, "stopDtmfTone").onStopDtmfTone();
        } else {
            findConferenceForAction(callId, "stopDtmfTone").onStopDtmfTone();
        }
    }
    }


    private void conference(String callId1, String callId2) {
    private void conference(String callId1, String callId2) {