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

Commit f835897f authored by Ihab Awad's avatar Ihab Awad
Browse files

DO NOT MERGE. Allow ConnectionService to ask Telecomm for ringback

Provides a pass-through from the ConnectionService API to Telecomm allowing
a ConnectionService to either play the ringbacks on its own, or ask Telecomm
to play the ringbacks on its behalf.

Bug: 15190301
Change-Id: Ib0f2ce9bf798ec0df0e6d33559174c82de059a94
parent 8d1de048
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -156,5 +156,17 @@ public final class CallServiceAdapter {
        }
    }

    /**
     * Asks Telecomm to start or stop a ringback tone for a call.
     *
     * @param callId The unique ID of the call whose ringback is being changed.
     * @param ringback Whether Telecomm should start playing a ringback tone.
     */
    public void setRequestingRingback(String callId, boolean ringback) {
        try {
            mAdapter.setRequestingRingback(callId, ringback);
        } catch (RemoteException e) {
        }
    }

}
+47 −5
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ public abstract class Connection {
        void onHandleChanged(Connection c, Uri newHandle);
        void onSignalChanged(Connection c, Bundle details);
        void onDisconnected(Connection c, int cause, String message);
        void onRequestingRingback(Connection c, boolean ringback);
        void onDestroyed(Connection c);
    }

@@ -60,6 +61,10 @@ public abstract class Connection {
        /** {@inheritDoc} */
        @Override
        public void onDestroyed(Connection c) {}

        /** {@inheritDoc} */
        @Override
        public void onRequestingRingback(Connection c, boolean ringback) {}
    }

    public final class State {
@@ -77,6 +82,7 @@ public abstract class Connection {
    private int mState = State.NEW;
    private CallAudioState mCallAudioState;
    private Uri mHandle;
    private boolean mRequestingRingback = false;

    /**
     * Create a new Connection.
@@ -267,6 +273,14 @@ public abstract class Connection {
        }
    }

    /**
     * @return Whether this connection is requesting that the system play a ringback tone
     * on its behalf.
     */
    public boolean isRequestingRingback() {
        return mRequestingRingback;
    }

    /**
     * Sets the value of the {@link #getHandle()} property and notifies listeners.
     *
@@ -286,6 +300,7 @@ public abstract class Connection {
     * communicate).
     */
    protected void setActive() {
        setRequestingRingback(false);
        setState(State.ACTIVE);
    }

@@ -328,6 +343,21 @@ public abstract class Connection {
        }
    }

    /**
     * Requests that the framework play a ringback tone. This is to be invoked by implementations
     * that do not play a ringback tone themselves in the call's audio stream.
     *
     * @param ringback Whether the ringback tone is to be played.
     */
    protected void setRequestingRingback(boolean ringback) {
        if (mRequestingRingback != ringback) {
            mRequestingRingback = ringback;
            for (Listener l : mListeners) {
                l.onRequestingRingback(this, ringback);
            }
        }
    }

    /**
     * Notifies this Connection and listeners that the {@link #getCallAudioState()} property
     * has a new value.
@@ -336,7 +366,7 @@ public abstract class Connection {
     */
    protected void onSetAudioState(CallAudioState state) {
        // TODO: Enforce super called
        this.mCallAudioState = state;
        mCallAudioState = state;
        for (Listener l : mListeners) {
            l.onAudioStateChanged(this, state);
        }
@@ -355,6 +385,21 @@ public abstract class Connection {
        }
    }

    /**
     * Notifies this Connection of an internal state change. This method is called before the
     * state is actually changed. Overriding implementations must call
     * {@code super.onSetState(state)}.
     *
     * @param state The new state, a {@link Connection.State} member.
     */
    protected void onSetState(int state) {
        // TODO: Enforce super called
        this.mState = state;
        for (Listener l : mListeners) {
            l.onStateChanged(this, state);
        }
    }

    /**
     * Notifies this Connection of a request to play a DTMF tone.
     *
@@ -401,9 +446,6 @@ public abstract class Connection {

    private void setState(int state) {
        Log.d(this, "setState: %s", stateToString(state));
        this.mState = state;
        for (Listener l : mListeners) {
            l.onStateChanged(this, state);
        }
        onSetState(state);
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -89,6 +89,13 @@ public abstract class ConnectionService extends CallService {
        public void onDestroyed(Connection c) {
            removeConnection(c);
        }

        @Override
        public void onRequestingRingback(Connection c, boolean ringback) {
            String id = mIdByConnection.get(c);
            Log.d(this, "Adapter onRingback %b", ringback);
            getAdapter().setRequestingRingback(id, ringback);
        }
    };

    @Override
+2 −0
Original line number Diff line number Diff line
@@ -43,4 +43,6 @@ oneway interface ICallServiceAdapter {
    void setDisconnected(String callId, int disconnectCause, String disconnectMessage);

    void setOnHold(String callId);

    void setRequestingRingback(String callId, boolean ringing);
}