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

Commit 091768c3 authored by Sailesh Nepal's avatar Sailesh Nepal
Browse files

More fixes for Connection and RemoteConnection

Various clean ups and fixes:
  - allow remote connection to have audio set
  - allow remote connection to have abort
  - move onPostDialWait from ConnectionService to Connection
  - hide APIs we don't need

Change-Id: Ib2d0b40f2e9e7a6b5fbf5d6db48b509b7db3c906
parent 280d1398
Loading
Loading
Loading
Loading
+12 −46
Original line number Diff line number Diff line
@@ -27485,7 +27485,6 @@ package android.telecomm {
    method public abstract void onAudioStateChanged(java.lang.String, android.telecomm.CallAudioState);
    method public final android.os.IBinder onBind(android.content.Intent);
    method public void onPostDialContinue(java.lang.String, boolean);
    method public void onPostDialWait(android.telecomm.Connection, java.lang.String);
    method public abstract void playDtmfTone(java.lang.String, char);
    method public abstract void reject(java.lang.String);
    method public abstract void setIncomingCallId(java.lang.String, android.os.Bundle);
@@ -27617,39 +27616,13 @@ package android.telecomm {
    method public final void setIsConferenceCapable(boolean);
    method public final void setOnHold();
    method public final void setParentConnection(android.telecomm.Connection);
    method public final void setPostDialWait(java.lang.String);
    method public final void setRequestingRingback(boolean);
    method public final void setRinging();
    method public final void setSignal(android.os.Bundle);
    method public static java.lang.String stateToString(int);
  }
  public static abstract interface Connection.Listener {
    method public abstract void onAudioStateChanged(android.telecomm.Connection, android.telecomm.CallAudioState);
    method public abstract void onConferenceCapableChanged(android.telecomm.Connection, boolean);
    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 onParentConnectionChanged(android.telecomm.Connection, android.telecomm.Connection);
    method public abstract void onRequestingRingback(android.telecomm.Connection, boolean);
    method public abstract void onSetCallVideoProvider(android.telecomm.Connection, android.telecomm.CallVideoProvider);
    method public abstract void onSignalChanged(android.telecomm.Connection, android.os.Bundle);
    method public abstract void onStateChanged(android.telecomm.Connection, int);
  }
  public static class Connection.ListenerBase implements android.telecomm.Connection.Listener {
    ctor public Connection.ListenerBase();
    method public void onAudioStateChanged(android.telecomm.Connection, android.telecomm.CallAudioState);
    method public void onConferenceCapableChanged(android.telecomm.Connection, boolean);
    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 onParentConnectionChanged(android.telecomm.Connection, android.telecomm.Connection);
    method public void onRequestingRingback(android.telecomm.Connection, boolean);
    method public void onSetCallVideoProvider(android.telecomm.Connection, android.telecomm.CallVideoProvider);
    method public void onSignalChanged(android.telecomm.Connection, android.os.Bundle);
    method public void onStateChanged(android.telecomm.Connection, int);
  }
  public final class Connection.State {
    field public static final int ACTIVE = 3; // 0x3
    field public static final int DIALING = 2; // 0x2
@@ -27677,20 +27650,18 @@ package android.telecomm {
    method public final void abort(java.lang.String);
    method public final void answer(java.lang.String);
    method public final void call(android.telecomm.CallInfo);
    method public void createRemoteOutgoingConnection(android.telecomm.ConnectionRequest, android.telecomm.ConnectionService.OutgoingCallResponse<android.telecomm.RemoteConnection>);
    method public final void createRemoteOutgoingConnection(android.telecomm.ConnectionRequest, android.telecomm.ConnectionService.OutgoingCallResponse<android.telecomm.RemoteConnection>);
    method public final void disconnect(java.lang.String);
    method public java.util.Collection<android.telecomm.Connection> getAllConnections();
    method public final java.util.Collection<android.telecomm.Connection> getAllConnections();
    method public final void hold(java.lang.String);
    method public void lookupRemoteSubscriptions(android.net.Uri, android.telecomm.SimpleResponse<android.net.Uri, java.util.List<android.telecomm.Subscription>>);
    method public void maybeRespondToSubscriptionLookup();
    method public final void lookupRemoteSubscriptions(android.net.Uri, android.telecomm.SimpleResponse<android.net.Uri, java.util.List<android.telecomm.Subscription>>);
    method public final void maybeRespondToSubscriptionLookup();
    method public final void onAudioStateChanged(java.lang.String, android.telecomm.CallAudioState);
    method public void onConnectionAdded(android.telecomm.Connection);
    method public void onConnectionRemoved(android.telecomm.Connection);
    method public void onCreateConferenceConnection(java.lang.String, android.telecomm.Connection, android.telecomm.Response<java.lang.String, android.telecomm.Connection>);
    method public void onCreateConnections(android.telecomm.ConnectionRequest, android.telecomm.ConnectionService.OutgoingCallResponse<android.telecomm.Connection>);
    method public void onCreateIncomingConnection(android.telecomm.ConnectionRequest, android.telecomm.Response<android.telecomm.ConnectionRequest, android.telecomm.Connection>);
    method public final void onPostDialContinue(java.lang.String, boolean);
    method public final void onPostDialWait(android.telecomm.Connection, java.lang.String);
    method protected void onConnectionAdded(android.telecomm.Connection);
    method protected void onConnectionRemoved(android.telecomm.Connection);
    method protected void onCreateConferenceConnection(java.lang.String, android.telecomm.Connection, android.telecomm.Response<java.lang.String, android.telecomm.Connection>);
    method protected void onCreateConnections(android.telecomm.ConnectionRequest, android.telecomm.ConnectionService.OutgoingCallResponse<android.telecomm.Connection>);
    method protected void onCreateIncomingConnection(android.telecomm.ConnectionRequest, android.telecomm.Response<android.telecomm.ConnectionRequest, android.telecomm.Connection>);
    method public final void playDtmfTone(java.lang.String, char);
    method public final void reject(java.lang.String);
    method public final void setIncomingCallId(java.lang.String, android.os.Bundle);
@@ -27766,6 +27737,7 @@ package android.telecomm {
  }
  public final class RemoteConnection {
    method public void abort();
    method public void addListener(android.telecomm.RemoteConnection.Listener);
    method public void answer();
    method public void disconnect();
@@ -27776,12 +27748,12 @@ package android.telecomm {
    method public void postDialContinue(boolean);
    method public void reject();
    method public void removeListener(android.telecomm.RemoteConnection.Listener);
    method public void setAudioState(android.telecomm.CallAudioState);
    method public void stopDtmf();
    method public void unhold();
  }
  public static abstract interface RemoteConnection.Listener {
    method public abstract void onAudioStateChanged(android.telecomm.RemoteConnection, android.telecomm.CallAudioState);
    method public abstract void onDestroyed(android.telecomm.RemoteConnection);
    method public abstract void onDisconnected(android.telecomm.RemoteConnection, int, java.lang.String);
    method public abstract void onPostDialWait(android.telecomm.RemoteConnection, java.lang.String);
@@ -27789,12 +27761,6 @@ package android.telecomm {
    method public abstract void onStateChanged(android.telecomm.RemoteConnection, int);
  }
  public class RemoteConnectionService implements android.os.IBinder.DeathRecipient {
    method public void binderDied();
    method public void createOutgoingConnection(android.telecomm.ConnectionRequest, android.telecomm.ConnectionService.OutgoingCallResponse<android.telecomm.RemoteConnection>);
    method public java.util.List<android.telecomm.Subscription> lookupSubscriptions(android.net.Uri);
  }
  public abstract interface Response {
    method public abstract void onError(IN, int, java.lang.String);
    method public abstract void onResult(IN, OUT...);
+0 −1
Original line number Diff line number Diff line
@@ -408,5 +408,4 @@ public abstract class CallService extends Service {
    public abstract void splitFromConference(String callId);

    public void onPostDialContinue(String callId, boolean proceed) {}
    public void onPostDialWait(Connection conn, String remaining) {}
}
+16 −15
Original line number Diff line number Diff line
@@ -31,12 +31,14 @@ import java.util.Set;
 */
public abstract class Connection {

    /** @hide */
    public interface Listener {
        void onStateChanged(Connection c, int state);
        void onAudioStateChanged(Connection c, CallAudioState state);
        void onHandleChanged(Connection c, Uri newHandle);
        void onSignalChanged(Connection c, Bundle details);
        void onDisconnected(Connection c, int cause, String message);
        void onPostDialWait(Connection c, String remaining);
        void onRequestingRingback(Connection c, boolean ringback);
        void onDestroyed(Connection c);
        void onConferenceCapableChanged(Connection c, boolean isConferenceCapable);
@@ -44,44 +46,38 @@ public abstract class Connection {
        void onSetCallVideoProvider(Connection c, CallVideoProvider callVideoProvider);
    }

    /** @hide */
    public static class ListenerBase implements Listener {
        /** {@inheritDoc} */
        @Override
        public void onStateChanged(Connection c, int state) {}

        /** {@inheritDoc} */
         @Override
        public void onAudioStateChanged(Connection c, CallAudioState state) {}

        /** {@inheritDoc} */
        @Override
        public void onHandleChanged(Connection c, Uri newHandle) {}

        /** {@inheritDoc} */
        @Override
        public void onSignalChanged(Connection c, Bundle details) {}

        /** {@inheritDoc} */
        @Override
        public void onDisconnected(Connection c, int cause, String message) {}

        /** {@inheritDoc} */
        @Override
        public void onDestroyed(Connection c) {}

        /** {@inheritDoc} */
        @Override
        public void onPostDialWait(Connection c, String remaining) {}

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

        /** ${inheritDoc} */
        @Override
        public void onConferenceCapableChanged(Connection c, boolean isConferenceCapable) {}

        /** ${inheritDoc} */
        @Override
        public void onParentConnectionChanged(Connection c, Connection parent) {}

        /** {@inheritDoc} */
        @Override
        public void onSetCallVideoProvider(Connection c, CallVideoProvider callVideoProvider) {}
    }
@@ -383,7 +379,6 @@ public abstract class Connection {
     */
    public final void setHandle(Uri handle) {
        Log.d(this, "setHandle %s", handle);
        // TODO: Enforce super called
        mHandle = handle;
        for (Listener l : mListeners) {
            l.onHandleChanged(this, handle);
@@ -431,10 +426,7 @@ public abstract class Connection {
    }

    /**
     * Sets state to disconnected. This will first notify listeners with an
     * {@link Listener#onStateChanged(Connection, int)} event, then will fire an
     * {@link Listener#onDisconnected(Connection, int, String)} event with additional
     * details.
     * Sets state to disconnected.
     *
     * @param cause The reason for the disconnection, any of
     *         {@link android.telephony.DisconnectCause}.
@@ -448,6 +440,15 @@ public abstract class Connection {
        }
    }

    /**
     * TODO(santoscordon): Needs documentation.
     */
    public final void setPostDialWait(String remaining) {
        for (Listener l : mListeners) {
            l.onPostDialWait(this, remaining);
        }
    }

    /**
     * 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.
+29 −17
Original line number Diff line number Diff line
@@ -135,6 +135,13 @@ public abstract class ConnectionService extends CallService {
            removeConnection(c);
        }

        @Override
        public final void onPostDialWait(Connection c, String remaining) {
            String id = mIdByConnection.get(c);
            Log.d(this, "Adapter onPostDialWait %s, %s", c, remaining);
            getAdapter().onPostDialWait(id, remaining);
        }

        @Override
        public void onRequestingRingback(Connection c, boolean ringback) {
            String id = mIdByConnection.get(c);
@@ -163,6 +170,7 @@ public abstract class ConnectionService extends CallService {
        }
    };

    /** @hide */
    @Override
    public final void call(final CallInfo callInfo) {
        Log.d(this, "call %s", callInfo);
@@ -193,12 +201,14 @@ public abstract class ConnectionService extends CallService {
        );
    }

    /** @hide */
    @Override
    public final void abort(String callId) {
        Log.d(this, "abort %s", callId);
        findConnectionForAction(callId, "abort").abort();
    }

    /** @hide */
    @Override
    public final void setIncomingCallId(final String callId, Bundle extras) {
        Log.d(this, "setIncomingCallId %s %s", callId, extras);
@@ -241,48 +251,56 @@ public abstract class ConnectionService extends CallService {
        );
    }

    /** @hide */
    @Override
    public final void answer(String callId) {
        Log.d(this, "answer %s", callId);
        findConnectionForAction(callId, "answer").answer();
    }

    /** @hide */
    @Override
    public final void reject(String callId) {
        Log.d(this, "reject %s", callId);
        findConnectionForAction(callId, "reject").reject();
    }

    /** @hide */
    @Override
    public final void disconnect(String callId) {
        Log.d(this, "disconnect %s", callId);
        findConnectionForAction(callId, "disconnect").disconnect();
    }

    /** @hide */
    @Override
    public final void hold(String callId) {
        Log.d(this, "hold %s", callId);
        findConnectionForAction(callId, "hold").hold();
    }

    /** @hide */
    @Override
    public final void unhold(String callId) {
        Log.d(this, "unhold %s", callId);
        findConnectionForAction(callId, "unhold").unhold();
    }

    /** @hide */
    @Override
    public final void playDtmfTone(String callId, char digit) {
        Log.d(this, "playDtmfTone %s %c", callId, digit);
        findConnectionForAction(callId, "playDtmfTone").playDtmfTone(digit);
    }

    /** @hide */
    @Override
    public final void stopDtmfTone(String callId) {
        Log.d(this, "stopDtmfTone %s", callId);
        findConnectionForAction(callId, "stopDtmfTone").stopDtmfTone();
    }

    /** @hide */
    @Override
    public final void onAudioStateChanged(String callId, CallAudioState audioState) {
        Log.d(this, "onAudioStateChanged %s %s", callId, audioState);
@@ -338,6 +356,7 @@ public abstract class ConnectionService extends CallService {
        // TODO(santoscordon): Find existing conference call and invoke split(connection).
    }

    /** @hide */
    @Override
    public final void onPostDialContinue(String callId, boolean proceed) {
        Log.d(this, "onPostDialContinue(%s)", callId);
@@ -350,18 +369,11 @@ public abstract class ConnectionService extends CallService {
        connection.onPostDialContinue(proceed);
    }

    @Override
    public final void onPostDialWait(Connection conn, String remaining) {
        Log.d(this, "onPostDialWait(%s, %s)", conn, remaining);

        getAdapter().onPostDialWait(mIdByConnection.get(conn), remaining);
    }

    /**
     * @hide
     */
    @Override
    protected void onAdapterAttached(CallServiceAdapter adapter) {
    protected final void onAdapterAttached(CallServiceAdapter adapter) {
        if (mAreSubscriptionsInitialized) {
            // No need to query again if we already did it.
            return;
@@ -398,14 +410,14 @@ public abstract class ConnectionService extends CallService {
        });
    }

    public void lookupRemoteSubscriptions(
    public final void lookupRemoteSubscriptions(
            Uri handle, SimpleResponse<Uri, List<Subscription>> response) {
        mSubscriptionLookupResponse = response;
        mSubscriptionLookupHandle = handle;
        maybeRespondToSubscriptionLookup();
    }

    public void maybeRespondToSubscriptionLookup() {
    public final void maybeRespondToSubscriptionLookup() {
        if (mAreSubscriptionsInitialized && mSubscriptionLookupResponse != null) {
            mSubscriptionLookupResponse.onResult(
                    mSubscriptionLookupHandle,
@@ -416,7 +428,7 @@ public abstract class ConnectionService extends CallService {
        }
    }

    public void createRemoteOutgoingConnection(
    public final void createRemoteOutgoingConnection(
            ConnectionRequest request,
            OutgoingCallResponse<RemoteConnection> response) {
        mRemoteConnectionManager.createOutgoingConnection(request, response);
@@ -425,7 +437,7 @@ public abstract class ConnectionService extends CallService {
    /**
     * Returns all connections currently associated with this connection service.
     */
    public Collection<Connection> getAllConnections() {
    public final Collection<Connection> getAllConnections() {
        return mConnectionById.values();
    }

@@ -435,7 +447,7 @@ public abstract class ConnectionService extends CallService {
     * @param request Data encapsulating details of the desired Connection.
     * @param callback A callback for providing the result.
     */
    public void onCreateConnections(
    protected void onCreateConnections(
            ConnectionRequest request,
            OutgoingCallResponse<Connection> callback) {}

@@ -449,7 +461,7 @@ public abstract class ConnectionService extends CallService {
     * @param token The token to be passed into the response callback.
     * @param callback The callback for providing the potentially-new conference connection.
     */
    public void onCreateConferenceConnection(
    protected void onCreateConferenceConnection(
            String token,
            Connection connection,
            Response<String, Connection> callback) {}
@@ -465,7 +477,7 @@ public abstract class ConnectionService extends CallService {
     * @param request Data encapsulating details of the desired Connection.
     * @param callback A callback for providing the result.
     */
    public void onCreateIncomingConnection(
    protected void onCreateIncomingConnection(
            ConnectionRequest request,
            Response<ConnectionRequest, Connection> callback) {}

@@ -474,14 +486,14 @@ public abstract class ConnectionService extends CallService {
     *
     * @param connection The connection which was added.
     */
    public void onConnectionAdded(Connection connection) {}
    protected void onConnectionAdded(Connection connection) {}

    /**
     * Notified that a connection has been removed from this connection service.
     *
     * @param connection The connection which was removed.
     */
    public void onConnectionRemoved(Connection connection) {}
    protected void onConnectionRemoved(Connection connection) {}

    static String toLogSafePhoneNumber(String number) {
        // For unknown number, log empty string.
+18 −10
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import java.util.Set;
public final class RemoteConnection {
    public interface Listener {
        void onStateChanged(RemoteConnection connection, int state);
        void onAudioStateChanged(RemoteConnection connection, CallAudioState state);
        void onDisconnected(RemoteConnection connection, int cause, String message);
        void onRequestingRingback(RemoteConnection connection, boolean ringback);
        void onPostDialWait(RemoteConnection connection, String remainingDigits);
@@ -76,6 +75,15 @@ public final class RemoteConnection {
        return mDisconnectMessage;
    }

    public void abort() {
        try {
            if (mConnected) {
                mCallService.abort(mConnectionId);
            }
        } catch (RemoteException ignored) {
        }
    }

    public void answer() {
        try {
            if (mConnected) {
@@ -148,6 +156,15 @@ public final class RemoteConnection {
        }
    }

    public void setAudioState(CallAudioState state) {
        try {
            if (mConnected) {
                mCallService.onAudioStateChanged(mConnectionId, state);
            }
        } catch (RemoteException ignored) {
        }
    }

    /**
     * @hide
     */
@@ -160,15 +177,6 @@ public final class RemoteConnection {
        }
    }

    /**
     * @hide
     */
    void setAudioState(CallAudioState state) {
        for (Listener l: mListeners) {
            l.onAudioStateChanged(this, state);
        }
    }

    /**
     * @hide
     */
Loading