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

Commit 3da92d6d authored by Ihab Awad's avatar Ihab Awad Committed by Android (Google) Code Review
Browse files

Merge "DO NOT MERGE. Allow ConnectionService to ask Telecomm for ringback" into lmp-preview-dev

parents f41799e7 f835897f
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);
}