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

Commit 9efdcd8a authored by Ihab Awad's avatar Ihab Awad Committed by Jay Shrauner
Browse files

Allow ConnectionService to ask Telecomm for ringback

Cherry picked from branch lmp-preview-dev because checking the changes into master required an API update, whereas the relevant APIs are @hide-ed in the source branch.

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
(cherry picked from commit 20536bc3c4d40fa96306b0319d8313a7437fc702)
parent cd82352e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -27542,6 +27542,7 @@ package android.telecomm {
    method public void setDisconnected(java.lang.String, int, java.lang.String);
    method public void setIsCompatibleWith(java.lang.String, boolean);
    method public void setOnHold(java.lang.String);
    method public void setRequestingRingback(java.lang.String, boolean);
    method public void setRinging(java.lang.String);
  }
@@ -27607,6 +27608,7 @@ package android.telecomm {
    ctor protected Connection();
    method public final android.telecomm.CallAudioState getCallAudioState();
    method public final android.net.Uri getHandle();
    method public boolean isRequestingRingback();
    method protected void onAbort();
    method protected void onAnswer();
    method protected void onDisconnect();
@@ -27615,6 +27617,7 @@ package android.telecomm {
    method protected void onReject();
    method protected void onSetAudioState(android.telecomm.CallAudioState);
    method protected void onSetSignal(android.os.Bundle);
    method protected void onSetState(int);
    method protected void onStopDtmfTone();
    method protected void onUnhold();
    method protected void setActive();
@@ -27623,6 +27626,7 @@ package android.telecomm {
    method protected void setDisconnected(int, java.lang.String);
    method protected void setHandle(android.net.Uri);
    method protected void setOnHold();
    method protected void setRequestingRingback(boolean);
    method protected void setRinging();
    method public static java.lang.String stateToString(int);
  }
@@ -27632,6 +27636,7 @@ package android.telecomm {
    method public abstract void onDestroyed(android.telecomm.Connection);
    method public abstract void onDisconnected(android.telecomm.Connection, int, java.lang.String);
    method public abstract void onHandleChanged(android.telecomm.Connection, android.net.Uri);
    method public abstract void onRequestingRingback(android.telecomm.Connection, boolean);
    method public abstract void onSignalChanged(android.telecomm.Connection, android.os.Bundle);
    method public abstract void onStateChanged(android.telecomm.Connection, int);
  }
@@ -27642,6 +27647,7 @@ package android.telecomm {
    method public void onDestroyed(android.telecomm.Connection);
    method public void onDisconnected(android.telecomm.Connection, int, java.lang.String);
    method public void onHandleChanged(android.telecomm.Connection, android.net.Uri);
    method public void onRequestingRingback(android.telecomm.Connection, boolean);
    method public void onSignalChanged(android.telecomm.Connection, android.os.Bundle);
    method public void onStateChanged(android.telecomm.Connection, int);
  }
+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);
}