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

Commit 78da7816 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

Add ability to add existing connection AND set parent at the same time.

This is useful for IMS conferences where we want to add a connection and
set it as a child of a conference at the same time.

Test: Manual
Bug: 37581781
Change-Id: Id09c8296ffe18893c5642d403c6a69ad6c9765e2
parent e943a3cb
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -522,6 +522,26 @@ public abstract class Connection extends Conferenceable {
     */
    public static final String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED";

    /**
     * Connection event used to inform {@link InCallService}s when the process of merging a
     * Connection into a conference has begun.
     * <p>
     * Sent via {@link #sendConnectionEvent(String, Bundle)}.  The {@link Bundle} parameter is
     * expected to be null when this connection event is used.
     * @hide
     */
    public static final String EVENT_MERGE_START = "android.telecom.event.MERGE_START";

    /**
     * Connection event used to inform {@link InCallService}s when the process of merging a
     * Connection into a conference has completed.
     * <p>
     * Sent via {@link #sendConnectionEvent(String, Bundle)}.  The {@link Bundle} parameter is
     * expected to be null when this connection event is used.
     * @hide
     */
    public static final String EVENT_MERGE_COMPLETE = "android.telecom.event.MERGE_COMPLETE";

    /**
     * Connection event used to inform {@link InCallService}s when a call has been put on hold by
     * the remote party.
+20 −1
Original line number Diff line number Diff line
@@ -1770,10 +1770,28 @@ public abstract class ConnectionService extends Service {
     */
    public final void addExistingConnection(PhoneAccountHandle phoneAccountHandle,
            Connection connection) {
        addExistingConnection(phoneAccountHandle, connection, null /* conference */);
    }

    /**
     * Adds a connection created by the {@link ConnectionService} and informs telecom of the new
     * connection.
     *
     * @param phoneAccountHandle The phone account handle for the connection.
     * @param connection The connection to add.
     * @param conference The parent conference of the new connection.
     * @hide
     */
    public final void addExistingConnection(PhoneAccountHandle phoneAccountHandle,
            Connection connection, Conference conference) {

        String id = addExistingConnectionInternal(phoneAccountHandle, connection);
        if (id != null) {
            List<String> emptyList = new ArrayList<>(0);
            String conferenceId = null;
            if (conference != null) {
                conferenceId = mIdByConference.get(conference);
            }

            ParcelableConnection parcelableConnection = new ParcelableConnection(
                    phoneAccountHandle,
@@ -1794,7 +1812,8 @@ public abstract class ConnectionService extends Service {
                    connection.getStatusHints(),
                    connection.getDisconnectCause(),
                    emptyList,
                    connection.getExtras());
                    connection.getExtras(),
                    conferenceId);
            mAdapter.addExistingConnection(id, parcelableConnection);
        }
    }
+40 −1
Original line number Diff line number Diff line
@@ -51,6 +51,35 @@ public final class ParcelableConnection implements Parcelable {
    private final DisconnectCause mDisconnectCause;
    private final List<String> mConferenceableConnectionIds;
    private final Bundle mExtras;
    private String mParentCallId;

    /** @hide */
    public ParcelableConnection(
            PhoneAccountHandle phoneAccount,
            int state,
            int capabilities,
            int properties,
            int supportedAudioRoutes,
            Uri address,
            int addressPresentation,
            String callerDisplayName,
            int callerDisplayNamePresentation,
            IVideoProvider videoProvider,
            int videoState,
            boolean ringbackRequested,
            boolean isVoipAudioMode,
            long connectTimeMillis,
            StatusHints statusHints,
            DisconnectCause disconnectCause,
            List<String> conferenceableConnectionIds,
            Bundle extras,
            String parentCallId) {
        this(phoneAccount, state, capabilities, properties, supportedAudioRoutes, address,
                addressPresentation, callerDisplayName, callerDisplayNamePresentation,
                videoProvider, videoState, ringbackRequested, isVoipAudioMode, connectTimeMillis,
                statusHints, disconnectCause, conferenceableConnectionIds, extras);
        mParentCallId = parentCallId;
    }

    /** @hide */
    public ParcelableConnection(
@@ -90,6 +119,7 @@ public final class ParcelableConnection implements Parcelable {
        mDisconnectCause = disconnectCause;
        mConferenceableConnectionIds = conferenceableConnectionIds;
        mExtras = extras;
        mParentCallId = null;
    }

    public PhoneAccountHandle getPhoneAccount() {
@@ -176,6 +206,10 @@ public final class ParcelableConnection implements Parcelable {
        return mExtras;
    }

    public final String getParentCallId() {
        return mParentCallId;
    }

    @Override
    public String toString() {
        return new StringBuilder()
@@ -189,6 +223,8 @@ public final class ParcelableConnection implements Parcelable {
                .append(Connection.propertiesToString(mConnectionProperties))
                .append(", extras:")
                .append(mExtras)
                .append(", parent:")
                .append(mParentCallId)
                .toString();
    }

@@ -218,6 +254,7 @@ public final class ParcelableConnection implements Parcelable {
            Bundle extras = Bundle.setDefusable(source.readBundle(classLoader), true);
            int properties = source.readInt();
            int supportedAudioRoutes = source.readInt();
            String parentCallId = source.readString();

            return new ParcelableConnection(
                    phoneAccount,
@@ -237,7 +274,8 @@ public final class ParcelableConnection implements Parcelable {
                    statusHints,
                    disconnectCause,
                    conferenceableConnectionIds,
                    extras);
                    extras,
                    parentCallId);
        }

        @Override
@@ -274,5 +312,6 @@ public final class ParcelableConnection implements Parcelable {
        destination.writeBundle(mExtras);
        destination.writeInt(mConnectionProperties);
        destination.writeInt(mSupportedAudioRoutes);
        destination.writeString(mParentCallId);
    }
}