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

Commit 404babbb authored by Ravi Paluri's avatar Ravi Paluri Committed by Tyler Gunn
Browse files

Ims: Add support to add participants to existing call

Supports initiation of a conference call
by directly adding participants to existing call

Test: Manual
Bug: 62151032
Change-Id: I4e60efafab4761ae65a460fdc6c4cacc3e233220
parent 5ff37df1
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -43553,6 +43553,7 @@ package android.system {
package android.telecom {
  public final class Call {
    method public void addConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
    method public void answer(int);
    method public void conference(android.telecom.Call);
    method public void deflect(android.net.Uri);
@@ -43661,6 +43662,7 @@ package android.telecom {
    method public static boolean hasProperty(int, int);
    method public boolean hasProperty(int);
    method public static String propertiesToString(int);
    field public static final int CAPABILITY_ADD_PARTICIPANT = 33554432; // 0x2000000
    field public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO = 4194304; // 0x400000
    field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
    field public static final int CAPABILITY_CAN_PULL_CALL = 8388608; // 0x800000
@@ -43781,6 +43783,7 @@ package android.telecom {
    method public final android.telecom.StatusHints getStatusHints();
    method public android.telecom.Connection.VideoProvider getVideoProvider();
    method public int getVideoState();
    method public void onAddConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
    method public void onConnectionAdded(android.telecom.Connection);
    method public void onDisconnect();
@@ -43844,6 +43847,7 @@ package android.telecom {
    method public final boolean isRingbackRequested();
    method public final void notifyConferenceMergeFailed();
    method public void onAbort();
    method public void onAddConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
    method public void onAnswer(int);
    method public void onAnswer();
    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
@@ -43923,6 +43927,7 @@ package android.telecom {
    field public static final int AUDIO_CODEC_GSM_HR = 10; // 0xa
    field public static final int AUDIO_CODEC_NONE = 0; // 0x0
    field public static final int AUDIO_CODEC_QCELP13K = 3; // 0x3
    field public static final int CAPABILITY_ADD_PARTICIPANT = 67108864; // 0x4000000
    field public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO = 8388608; // 0x800000
    field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
    field public static final int CAPABILITY_CAN_PULL_CALL = 16777216; // 0x1000000
@@ -44896,6 +44901,7 @@ package android.telephony {
    field public static final String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool";
    field public static final String KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL = "sms_requires_destination_number_conversion_bool";
    field public static final String KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL = "support_3gpp_call_forwarding_while_roaming_bool";
    field public static final String KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL = "support_add_conference_participants_bool";
    field public static final String KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL = "support_clir_network_default_bool";
    field public static final String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
    field public static final String KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL = "support_emergency_sms_over_ims_bool";
+17 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.telecom;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
@@ -458,8 +459,10 @@ public final class Call {
        /** Call supports the deflect feature. */
        public static final int CAPABILITY_SUPPORT_DEFLECT = 0x01000000;

        /** call supports adding participants to existing call */
        public static final int CAPABILITY_ADD_PARTICIPANT = 0x02000000;
        //******************************************************************************************
        // Next CAPABILITY value: 0x02000000
        // Next CAPABILITY value: 0x04000000
        //******************************************************************************************

        /**
@@ -689,6 +692,9 @@ public final class Call {
            if (can(capabilities, CAPABILITY_SUPPORT_DEFLECT)) {
                builder.append(" CAPABILITY_SUPPORT_DEFLECT");
            }
            if (can(capabilities, CAPABILITY_ADD_PARTICIPANT)) {
                builder.append(" CAPABILITY_ADD_PARTICIPANT");
            }
            builder.append("]");
            return builder.toString();
        }
@@ -1702,6 +1708,16 @@ public final class Call {
        mInCallAdapter.swapConference(mTelecomCallId);
    }

    /**
     * Pulls participants to existing call by forming a conference call.
     * See {@link Details#CAPABILITY_ADD_PARTICIPANT}.
     *
     * @param participants participants to be pulled to existing call.
     */
    public void addConferenceParticipants(@NonNull List<Uri> participants) {
        mInCallAdapter.addConferenceParticipants(mTelecomCallId, participants);
    }

    /**
     * Initiates a request to the {@link ConnectionService} to pull an external call to the local
     * device.
+6 −0
Original line number Diff line number Diff line
@@ -318,6 +318,12 @@ public abstract class Conference extends Conferenceable {
     */
    public void onConnectionAdded(Connection connection) {}

    /**
     * Notifies the {@link Conference} of a request to add a new participant to the conference call
     * @param participants that will be added to existing conference call
     */
    public void onAddConferenceParticipants(@NonNull List<Uri> participants) {}

    /**
     * Notifies this Conference, which is in {@code STATE_RINGING}, of
     * a request to accept.
+16 −2
Original line number Diff line number Diff line
@@ -376,8 +376,13 @@ public abstract class Connection extends Conferenceable {
    /** Call supports the deflect feature. */
    public static final int CAPABILITY_SUPPORT_DEFLECT = 0x02000000;

    /**
     * When set, indicates that this {@link Connection} supports initiation of a conference call
     * by directly adding a participant using {@link #onAddConferenceParticipants()}.
     */
    public static final int CAPABILITY_ADD_PARTICIPANT = 0x04000000;
    //**********************************************************************************************
    // Next CAPABILITY value: 0x04000000
    // Next CAPABILITY value: 0x08000000
    //**********************************************************************************************

    /**
@@ -953,7 +958,9 @@ public abstract class Connection extends Conferenceable {
        if ((capabilities & CAPABILITY_SUPPORT_DEFLECT) == CAPABILITY_SUPPORT_DEFLECT) {
            builder.append(isLong ? " CAPABILITY_SUPPORT_DEFLECT" : " sup_def");
        }

        if ((capabilities & CAPABILITY_ADD_PARTICIPANT) == CAPABILITY_ADD_PARTICIPANT) {
            builder.append(isLong ? " CAPABILITY_ADD_PARTICIPANT" : " add_participant");
        }
        builder.append("]");
        return builder.toString();
    }
@@ -2952,6 +2959,13 @@ public abstract class Connection extends Conferenceable {
     */
    public void onSeparate() {}

    /**
     * Supports initiation of a conference call by directly adding participants.
     *
     * @param participants with which conference call will be formed.
     */
    public void onAddConferenceParticipants(@NonNull List<Uri> participants) {}

    /**
     * Notifies this Connection of a request to abort.
     */
+41 −0
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ public abstract class ConnectionService extends Service {
    private static final String SESSION_SPLIT_CONFERENCE = "CS.sFC";
    private static final String SESSION_MERGE_CONFERENCE = "CS.mC";
    private static final String SESSION_SWAP_CONFERENCE = "CS.sC";
    private static final String SESSION_ADD_PARTICIPANT = "CS.aP";
    private static final String SESSION_POST_DIAL_CONT = "CS.oPDC";
    private static final String SESSION_PULL_EXTERNAL_CALL = "CS.pEC";
    private static final String SESSION_SEND_CALL_EVENT = "CS.sCE";
@@ -195,6 +196,7 @@ public abstract class ConnectionService extends Service {
    private static final int MSG_CREATE_CONFERENCE_COMPLETE = 36;
    private static final int MSG_CREATE_CONFERENCE_FAILED = 37;
    private static final int MSG_REJECT_WITH_REASON = 38;
    private static final int MSG_ADD_PARTICIPANT = 39;

    private static Connection sNullConnection;

@@ -626,6 +628,21 @@ public abstract class ConnectionService extends Service {
            }
        }

        @Override
        public void addConferenceParticipants(String callId, List<Uri> participants,
                Session.Info sessionInfo) {
            Log.startSession(sessionInfo, SESSION_ADD_PARTICIPANT);
            try {
                SomeArgs args = SomeArgs.obtain();
                args.arg1 = callId;
                args.arg2 = participants;
                args.arg3 = Log.createSubsession();
                mHandler.obtainMessage(MSG_ADD_PARTICIPANT, args).sendToTarget();
            } finally {
                Log.endSession();
            }
        }

        @Override
        public void onPostDialContinue(String callId, boolean proceed, Session.Info sessionInfo) {
            Log.startSession(sessionInfo, SESSION_POST_DIAL_CONT);
@@ -1224,6 +1241,19 @@ public abstract class ConnectionService extends Service {
                    }
                    break;
                }
                case MSG_ADD_PARTICIPANT: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
                        Log.continueSession((Session) args.arg3,
                                SESSION_HANDLER + SESSION_ADD_PARTICIPANT);
                        addConferenceParticipants((String) args.arg1, (List<Uri>)args.arg2);
                    } finally {
                        args.recycle();
                        Log.endSession();
                    }
                    break;
                }

                case MSG_ON_POST_DIAL_CONTINUE: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
@@ -2152,6 +2182,17 @@ public abstract class ConnectionService extends Service {
        }
    }

    private void addConferenceParticipants(String callId, List<Uri> participants) {
        Log.d(this, "addConferenceParticipants(%s)", callId);
        if (mConnectionById.containsKey(callId)) {
            findConnectionForAction(callId, "addConferenceParticipants")
                    .onAddConferenceParticipants(participants);
        } else {
            findConferenceForAction(callId, "addConferenceParticipants")
                    .onAddConferenceParticipants(participants);
        }
    }

    /**
     * Notifies a {@link Connection} of a request to pull an external call.
     *
Loading