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

Commit aa709348 authored by Brad Ebinger's avatar Brad Ebinger Committed by Android (Google) Code Review
Browse files

Merge "Add new @hide API to pass call direction changes through Telecom" into rvc-dev

parents e9ed63aa 31774ae7
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ public abstract class Conference extends Conferenceable {
        public void onConnectionEvent(Conference c, String event, Bundle extras) {}
        public void onCallerDisplayNameChanged(
                Conference c, String callerDisplayName, int presentation) {}
        public void onCallDirectionChanged(Conference c, int callDirection) {}
        public void onRingbackRequested(Conference c, boolean ringback) {}
    }

@@ -103,6 +104,7 @@ public abstract class Conference extends Conferenceable {
    private int mAddressPresentation;
    private String mCallerDisplayName;
    private int mCallerDisplayNamePresentation;
    private int mCallDirection;
    private boolean mRingbackRequested = false;

    private final Connection.Listener mConnectionDeathListener = new Connection.Listener() {
@@ -1023,6 +1025,25 @@ public abstract class Conference extends Conferenceable {
        }
    }

    /**
     * Sets the call direction of this {@link Conference}. By default, all {@link Conference}s have
     * a direction of {@link android.telecom.Call.Details.CallDirection#DIRECTION_UNKNOWN}. The
     * direction of a {@link Conference} is only applicable to the case where
     * {@link #setConferenceState(boolean)} has been set to {@code false}, otherwise the direction
     * will be ignored.
     * @param callDirection The direction of the conference.
     * @hide
     */
    @RequiresPermission(MODIFY_PHONE_STATE)
    public final void setCallDirection(@Call.Details.CallDirection int callDirection) {
        Log.d(this, "setDirection %d", callDirection);
        mCallDirection = callDirection;
        for (Listener l : mListeners) {
            l.onCallDirectionChanged(this, callDirection);
        }
    }


    /**
     * Sets the address of this {@link Conference}.  Used when {@link #setConferenceState(boolean)}
     * is called to mark a conference temporarily as NOT a conference.
@@ -1101,6 +1122,15 @@ public abstract class Conference extends Conferenceable {
        return mCallerDisplayNamePresentation;
    }

    /**
     * @return The call direction of this conference. Only applicable when
     * {@link #setConferenceState(boolean)} is set to false.
     * @hide
     */
    public final @Call.Details.CallDirection int getCallDirection() {
        return mCallDirection;
    }

    /**
     * Sets the caller display name (CNAP) of this {@link Conference}.  Used when
     * {@link #setConferenceState(boolean)} is called to mark a conference temporarily as NOT a
+8 −0
Original line number Diff line number Diff line
@@ -1553,6 +1553,14 @@ public abstract class ConnectionService extends Service {
            }
        }

        @Override
        public void onCallDirectionChanged(Conference c, int direction) {
            String id = mIdByConference.get(c);
            if (id != null) {
                mAdapter.setCallDirection(id, direction);
            }
        }

        @Override
        public void onAddressChanged(Conference c, Uri newAddress, int presentation) {
            String id = mIdByConference.get(c);
+16 −0
Original line number Diff line number Diff line
@@ -693,4 +693,20 @@ final class ConnectionServiceAdapter implements DeathRecipient {
            }
        }
    }

    /**
     * Sets the direction of a call. Setting a new direction of an existing call is usually only
     * applicable during single caller emulation during conferencing, see
     * {@link Conference#setConferenceState(boolean)} for more information.
     * @param callId The identifier of the call.
     * @param direction The new direction of the call.
     */
    void setCallDirection(String callId, @Call.Details.CallDirection int direction) {
        for (IConnectionServiceAdapter a : mAdapters) {
            try {
                a.setCallDirection(callId, direction, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
    }
}
+23 −1
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ final class ConnectionServiceAdapterServant {
    private static final int MSG_CONNECTION_SERVICE_FOCUS_RELEASED = 35;
    private static final int MSG_SET_CONFERENCE_STATE = 36;
    private static final int MSG_HANDLE_CREATE_CONFERENCE_COMPLETE = 37;
    private static final int MSG_SET_CALL_DIRECTION = 38;

    private final IConnectionServiceAdapter mDelegate;

@@ -353,7 +354,7 @@ final class ConnectionServiceAdapterServant {
                case MSG_CONNECTION_SERVICE_FOCUS_RELEASED:
                    mDelegate.onConnectionServiceFocusReleased(null /*Session.Info*/);
                    break;
                case MSG_SET_CONFERENCE_STATE:
                case MSG_SET_CONFERENCE_STATE: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
                        mDelegate.setConferenceState((String) args.arg1, (Boolean) args.arg2,
@@ -361,6 +362,17 @@ final class ConnectionServiceAdapterServant {
                    } finally {
                        args.recycle();
                    }
                    break;
                }
                case MSG_SET_CALL_DIRECTION: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
                        mDelegate.setCallDirection((String) args.arg1, args.argi1,
                                (Session.Info) args.arg2);
                    } finally {
                        args.recycle();
                    }
                }
            }
        }
    };
@@ -670,6 +682,16 @@ final class ConnectionServiceAdapterServant {
            args.arg3 = sessionInfo;
            mHandler.obtainMessage(MSG_SET_CONFERENCE_STATE, args).sendToTarget();
        }

        @Override
        public void setCallDirection(String callId, int direction,
                Session.Info sessionInfo) {
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = callId;
            args.argi1 = direction;
            args.arg2 = sessionInfo;
            mHandler.obtainMessage(MSG_SET_CALL_DIRECTION, args).sendToTarget();
        }
    };

    public ConnectionServiceAdapterServant(IConnectionServiceAdapter delegate) {
+5 −0
Original line number Diff line number Diff line
@@ -485,6 +485,11 @@ final class RemoteConnectionService {
                Session.Info sessionInfo) {
            // Do nothing
        }

        @Override
        public void setCallDirection(String callId, int direction, Session.Info sessionInfo) {
            // Do nothing
        }
    };

    private final ConnectionServiceAdapterServant mServant =
Loading