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
This commit is contained in:
Ravi Paluri
2020-01-23 19:02:44 +05:30
committed by Tyler Gunn
parent 5ff37df1ab
commit 404babbb98
9 changed files with 113 additions and 3 deletions

View File

@@ -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";

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.
*/

View File

@@ -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.
*

View File

@@ -282,6 +282,20 @@ public final class InCallAdapter {
}
}
/**
* Instructs Telecom to pull participants to existing call
*
* @param callId The unique ID of the call.
* @param participants participants to be pulled to existing call.
*/
public void addConferenceParticipants(String callId, List<Uri> participants) {
try {
mAdapter.addConferenceParticipants(callId, participants);
} catch (RemoteException ignored) {
}
}
/**
* Instructs Telecom to split the specified call from any conference call with which it may be
* connected.

View File

@@ -104,6 +104,9 @@ oneway interface IConnectionService {
void swapConference(String conferenceCallId, in Session.Info sessionInfo);
void addConferenceParticipants(String CallId, in List<Uri> participants,
in Session.Info sessionInfo);
void onPostDialContinue(String callId, boolean proceed, in Session.Info sessionInfo);
void pullExternalCall(String callId, in Session.Info sessionInfo);

View File

@@ -67,6 +67,8 @@ oneway interface IInCallAdapter {
void swapConference(String callId);
void addConferenceParticipants(String callId, in List<Uri> participants);
void turnOnProximitySensor();
void turnOffProximitySensor(boolean screenOnImmediately);

View File

@@ -1088,6 +1088,13 @@ public class CarrierConfigManager {
public static final String KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL =
"support_adhoc_conference_calls_bool";
/**
* Determines whether conference participants can be added to existing call. When {@code true},
* adding conference participants to existing call is supported, {@code false otherwise}.
*/
public static final String KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL =
"support_add_conference_participants_bool";
/**
* Determines whether conference calls are supported by a carrier. When {@code true},
* conference calling is supported, {@code false otherwise}.
@@ -3571,6 +3578,7 @@ public class CarrierConfigManager {
sDefaults.putBoolean(KEY_IGNORE_RTT_MODE_SETTING_BOOL, false);
sDefaults.putInt(KEY_CDMA_3WAYCALL_FLASH_DELAY_INT , 0);
sDefaults.putBoolean(KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL, false);
sDefaults.putBoolean(KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL, false);
sDefaults.putBoolean(KEY_SUPPORT_CONFERENCE_CALL_BOOL, true);
sDefaults.putBoolean(KEY_SUPPORT_IMS_CONFERENCE_CALL_BOOL, true);
sDefaults.putBoolean(KEY_SUPPORT_MANAGE_IMS_CONFERENCE_CALL_BOOL, true);