Add relative APIs for InCallService that can support self-managed
connections that want to expose itself. Add PhoneAccount#EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE and Connection#onInCallServiceTrackingChanged. Bug: 161144815 Test: CtsTelecomTestCases Change-Id: I0a42ea79a1cd46aa9df3399c4fa2e9396321778a Merged-In: I0a42ea79a1cd46aa9df3399c4fa2e9396321778a
This commit is contained in:
@@ -38482,7 +38482,9 @@ package android.telecom {
|
||||
method public void onStateChanged(int);
|
||||
method public void onStopDtmfTone();
|
||||
method public void onStopRtt();
|
||||
method public void onTrackedByNonUiService(boolean);
|
||||
method public void onUnhold();
|
||||
method public void onUsingAlternativeUi(boolean);
|
||||
method public static String propertiesToString(int);
|
||||
method public final void putExtras(@NonNull android.os.Bundle);
|
||||
method public final void removeExtras(java.util.List<java.lang.String>);
|
||||
@@ -38820,6 +38822,7 @@ package android.telecom {
|
||||
field public static final int CAPABILITY_VIDEO_CALLING = 8; // 0x8
|
||||
field public static final int CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE = 256; // 0x100
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccount> CREATOR;
|
||||
field public static final String EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE = "android.telecom.extra.ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE";
|
||||
field public static final String EXTRA_ALWAYS_USE_VOIP_AUDIO_MODE = "android.telecom.extra.ALWAYS_USE_VOIP_AUDIO_MODE";
|
||||
field public static final String EXTRA_CALL_SUBJECT_CHARACTER_ENCODING = "android.telecom.extra.CALL_SUBJECT_CHARACTER_ENCODING";
|
||||
field public static final String EXTRA_CALL_SUBJECT_MAX_LENGTH = "android.telecom.extra.CALL_SUBJECT_MAX_LENGTH";
|
||||
|
||||
@@ -3004,6 +3004,26 @@ public abstract class Connection extends Conferenceable {
|
||||
*/
|
||||
public void onCallAudioStateChanged(CallAudioState state) {}
|
||||
|
||||
/**
|
||||
* Inform this Connection when it will or will not be tracked by an {@link InCallService} which
|
||||
* can provide an InCall UI.
|
||||
* This is primarily intended for use by Connections reported by self-managed
|
||||
* {@link ConnectionService} which typically maintain their own UI.
|
||||
*
|
||||
* @param isUsingAlternativeUi Indicates whether an InCallService that can provide InCall UI is
|
||||
* currently tracking the self-managed call.
|
||||
*/
|
||||
public void onUsingAlternativeUi(boolean isUsingAlternativeUi) {}
|
||||
|
||||
/**
|
||||
* Inform this Conenection when it will or will not be tracked by an non-UI
|
||||
* {@link InCallService}.
|
||||
*
|
||||
* @param isTracked Indicates whether an non-UI InCallService is currently tracking the
|
||||
* self-managed call.
|
||||
*/
|
||||
public void onTrackedByNonUiService(boolean isTracked) {}
|
||||
|
||||
/**
|
||||
* Notifies this Connection of an internal state change. This method is called after the
|
||||
* state is changed.
|
||||
|
||||
@@ -137,6 +137,8 @@ public abstract class ConnectionService extends Service {
|
||||
private static final String SESSION_HOLD = "CS.h";
|
||||
private static final String SESSION_UNHOLD = "CS.u";
|
||||
private static final String SESSION_CALL_AUDIO_SC = "CS.cASC";
|
||||
private static final String SESSION_USING_ALTERNATIVE_UI = "CS.uAU";
|
||||
private static final String SESSION_TRACKED_BY_NON_UI_SERVICE = "CS.tBNUS";
|
||||
private static final String SESSION_PLAY_DTMF = "CS.pDT";
|
||||
private static final String SESSION_STOP_DTMF = "CS.sDT";
|
||||
private static final String SESSION_CONFERENCE = "CS.c";
|
||||
@@ -200,6 +202,9 @@ public abstract class ConnectionService extends Service {
|
||||
private static final int MSG_ADD_PARTICIPANT = 39;
|
||||
private static final int MSG_EXPLICIT_CALL_TRANSFER = 40;
|
||||
private static final int MSG_EXPLICIT_CALL_TRANSFER_CONSULTATIVE = 41;
|
||||
private static final int MSG_ON_CALL_FILTERING_COMPLETED = 42;
|
||||
private static final int MSG_ON_USING_ALTERNATIVE_UI = 43;
|
||||
private static final int MSG_ON_TRACKED_BY_NON_UI_SERVICE = 44;
|
||||
|
||||
private static Connection sNullConnection;
|
||||
|
||||
@@ -583,6 +588,36 @@ public abstract class ConnectionService extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUsingAlternativeUi(String callId, boolean usingAlternativeUiShowing,
|
||||
Session.Info sessionInfo) {
|
||||
Log.startSession(sessionInfo, SESSION_USING_ALTERNATIVE_UI);
|
||||
try {
|
||||
SomeArgs args = SomeArgs.obtain();
|
||||
args.arg1 = callId;
|
||||
args.arg2 = usingAlternativeUiShowing;
|
||||
args.arg3 = Log.createSubsession();
|
||||
mHandler.obtainMessage(MSG_ON_USING_ALTERNATIVE_UI, args).sendToTarget();
|
||||
} finally {
|
||||
Log.endSession();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTrackedByNonUiService(String callId, boolean isTracked,
|
||||
Session.Info sessionInfo) {
|
||||
Log.startSession(sessionInfo, SESSION_TRACKED_BY_NON_UI_SERVICE);
|
||||
try {
|
||||
SomeArgs args = SomeArgs.obtain();
|
||||
args.arg1 = callId;
|
||||
args.arg2 = isTracked;
|
||||
args.arg3 = Log.createSubsession();
|
||||
mHandler.obtainMessage(MSG_ON_TRACKED_BY_NON_UI_SERVICE, args).sendToTarget();
|
||||
} finally {
|
||||
Log.endSession();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playDtmfTone(String callId, char digit, Session.Info sessionInfo) {
|
||||
Log.startSession(sessionInfo, SESSION_PLAY_DTMF);
|
||||
@@ -1226,6 +1261,34 @@ public abstract class ConnectionService extends Service {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MSG_ON_USING_ALTERNATIVE_UI: {
|
||||
SomeArgs args = (SomeArgs) msg.obj;
|
||||
Log.continueSession((Session) args.arg3,
|
||||
SESSION_HANDLER + SESSION_USING_ALTERNATIVE_UI);
|
||||
try {
|
||||
String callId = (String) args.arg1;
|
||||
boolean isUsingAlternativeUi = (boolean) args.arg2;
|
||||
onUsingAlternativeUi(callId, isUsingAlternativeUi);
|
||||
} finally {
|
||||
args.recycle();
|
||||
Log.endSession();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MSG_ON_TRACKED_BY_NON_UI_SERVICE: {
|
||||
SomeArgs args = (SomeArgs) msg.obj;
|
||||
Log.continueSession((Session) args.arg3,
|
||||
SESSION_HANDLER + SESSION_TRACKED_BY_NON_UI_SERVICE);
|
||||
try {
|
||||
String callId = (String) args.arg1;
|
||||
boolean isTracked = (boolean) args.arg2;
|
||||
onTrackedByNonUiService(callId, isTracked);
|
||||
} finally {
|
||||
args.recycle();
|
||||
Log.endSession();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MSG_PLAY_DTMF_TONE: {
|
||||
SomeArgs args = (SomeArgs) msg.obj;
|
||||
try {
|
||||
@@ -1928,10 +1991,12 @@ public abstract class ConnectionService extends Service {
|
||||
request.getExtras().getBoolean(TelecomManager.EXTRA_IS_HANDOVER, false);
|
||||
boolean isHandover = request.getExtras() != null && request.getExtras().getBoolean(
|
||||
TelecomManager.EXTRA_IS_HANDOVER_CONNECTION, false);
|
||||
Log.d(this, "createConnection, callManagerAccount: %s, callId: %s, request: %s, " +
|
||||
"isIncoming: %b, isUnknown: %b, isLegacyHandover: %b, isHandover: %b",
|
||||
callManagerAccount, callId, request, isIncoming, isUnknown, isLegacyHandover,
|
||||
isHandover);
|
||||
boolean addSelfManaged = request.getExtras() != null && request.getExtras().getBoolean(
|
||||
PhoneAccount.EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE, false);
|
||||
Log.i(this, "createConnection, callManagerAccount: %s, callId: %s, request: %s, "
|
||||
+ "isIncoming: %b, isUnknown: %b, isLegacyHandover: %b, isHandover: %b, "
|
||||
+ " addSelfManaged: %b", callManagerAccount, callId, request, isIncoming,
|
||||
isUnknown, isLegacyHandover, isHandover, addSelfManaged);
|
||||
|
||||
Connection connection = null;
|
||||
if (isHandover) {
|
||||
@@ -2206,6 +2271,22 @@ public abstract class ConnectionService extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
private void onUsingAlternativeUi(String callId, boolean isUsingAlternativeUi) {
|
||||
Log.i(this, "onUsingAlternativeUi %s %s", callId, isUsingAlternativeUi);
|
||||
if (mConnectionById.containsKey(callId)) {
|
||||
findConnectionForAction(callId, "onUsingAlternativeUi")
|
||||
.onUsingAlternativeUi(isUsingAlternativeUi);
|
||||
}
|
||||
}
|
||||
|
||||
private void onTrackedByNonUiService(String callId, boolean isTracked) {
|
||||
Log.i(this, "onTrackedByNonUiService %s %s", callId, isTracked);
|
||||
if (mConnectionById.containsKey(callId)) {
|
||||
findConnectionForAction(callId, "onTrackedByNonUiService")
|
||||
.onTrackedByNonUiService(isTracked);
|
||||
}
|
||||
}
|
||||
|
||||
private void playDtmfTone(String callId, char digit) {
|
||||
Log.i(this, "playDtmfTone %s %c", callId, digit);
|
||||
if (mConnectionById.containsKey(callId)) {
|
||||
|
||||
@@ -187,6 +187,15 @@ public final class PhoneAccount implements Parcelable {
|
||||
public static final String EXTRA_SKIP_CALL_FILTERING =
|
||||
"android.telecom.extra.SKIP_CALL_FILTERING";
|
||||
|
||||
/**
|
||||
* Boolean {@link PhoneAccount} extras key (see {@link PhoneAccount#getExtras()}) which
|
||||
* indicates whether a Self-managed {@link PhoneAccount} want to expose its calls to all
|
||||
* {@link InCallService} which declares the metadata
|
||||
* {@link TelecomManager#METADATA_INCLUDE_SELF_MANAGED_CALLS}.
|
||||
*/
|
||||
public static final String EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE =
|
||||
"android.telecom.extra.ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE";
|
||||
|
||||
/**
|
||||
* Flag indicating that this {@code PhoneAccount} can act as a connection manager for
|
||||
* other connections. The {@link ConnectionService} associated with this {@code PhoneAccount}
|
||||
|
||||
@@ -136,4 +136,9 @@ oneway interface IConnectionService {
|
||||
int error, in Session.Info sessionInfo);
|
||||
|
||||
void handoverComplete(String callId, in Session.Info sessionInfo);
|
||||
|
||||
void onUsingAlternativeUi(String callId, boolean isUsingAlternativeUi,
|
||||
in Session.Info sessionInfo);
|
||||
|
||||
void onTrackedByNonUiService(String callId, boolean isTracked, in Session.Info sessionInfo);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user