Merge "Add support for rejecting Telecom call with a specified reason."
This commit is contained in:
@@ -43569,6 +43569,7 @@ package android.telecom {
|
|||||||
method public void registerCallback(android.telecom.Call.Callback);
|
method public void registerCallback(android.telecom.Call.Callback);
|
||||||
method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
|
method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
|
||||||
method public void reject(boolean, String);
|
method public void reject(boolean, String);
|
||||||
|
method public void reject(int);
|
||||||
method public void removeExtras(java.util.List<java.lang.String>);
|
method public void removeExtras(java.util.List<java.lang.String>);
|
||||||
method public void removeExtras(java.lang.String...);
|
method public void removeExtras(java.lang.String...);
|
||||||
method public void respondToRttRequest(int, boolean);
|
method public void respondToRttRequest(int, boolean);
|
||||||
@@ -43584,6 +43585,8 @@ package android.telecom {
|
|||||||
field public static final String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS = "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
|
field public static final String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS = "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
|
||||||
field public static final String EXTRA_SILENT_RINGING_REQUESTED = "android.telecom.extra.SILENT_RINGING_REQUESTED";
|
field public static final String EXTRA_SILENT_RINGING_REQUESTED = "android.telecom.extra.SILENT_RINGING_REQUESTED";
|
||||||
field public static final String EXTRA_SUGGESTED_PHONE_ACCOUNTS = "android.telecom.extra.SUGGESTED_PHONE_ACCOUNTS";
|
field public static final String EXTRA_SUGGESTED_PHONE_ACCOUNTS = "android.telecom.extra.SUGGESTED_PHONE_ACCOUNTS";
|
||||||
|
field public static final int REJECT_REASON_DECLINED = 1; // 0x1
|
||||||
|
field public static final int REJECT_REASON_UNWANTED = 2; // 0x2
|
||||||
field public static final int STATE_ACTIVE = 4; // 0x4
|
field public static final int STATE_ACTIVE = 4; // 0x4
|
||||||
field public static final int STATE_AUDIO_PROCESSING = 12; // 0xc
|
field public static final int STATE_AUDIO_PROCESSING = 12; // 0xc
|
||||||
field public static final int STATE_CONNECTING = 9; // 0x9
|
field public static final int STATE_CONNECTING = 9; // 0x9
|
||||||
@@ -43851,6 +43854,7 @@ package android.telecom {
|
|||||||
method public void onPostDialContinue(boolean);
|
method public void onPostDialContinue(boolean);
|
||||||
method public void onPullExternalCall();
|
method public void onPullExternalCall();
|
||||||
method public void onReject();
|
method public void onReject();
|
||||||
|
method public void onReject(int);
|
||||||
method public void onReject(String);
|
method public void onReject(String);
|
||||||
method public void onSeparate();
|
method public void onSeparate();
|
||||||
method public void onShowIncomingCallUi();
|
method public void onShowIncomingCallUi();
|
||||||
|
|||||||
@@ -265,6 +265,29 @@ public final class Call {
|
|||||||
public static final String EVENT_HANDOVER_FAILED =
|
public static final String EVENT_HANDOVER_FAILED =
|
||||||
"android.telecom.event.HANDOVER_FAILED";
|
"android.telecom.event.HANDOVER_FAILED";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reject reason used with {@link #reject(int)} to indicate that the user is rejecting this
|
||||||
|
* call because they have declined to answer it. This typically means that they are unable
|
||||||
|
* to answer the call at this time and would prefer it be sent to voicemail.
|
||||||
|
*/
|
||||||
|
public static final int REJECT_REASON_DECLINED = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reject reason used with {@link #reject(int)} to indicate that the user is rejecting this
|
||||||
|
* call because it is an unwanted call. This allows the user to indicate that they are
|
||||||
|
* rejecting a call because it is likely a nuisance call.
|
||||||
|
*/
|
||||||
|
public static final int REJECT_REASON_UNWANTED = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@IntDef(prefix = { "REJECT_REASON_" },
|
||||||
|
value = {REJECT_REASON_DECLINED, REJECT_REASON_UNWANTED})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface RejectReason {};
|
||||||
|
|
||||||
public static class Details {
|
public static class Details {
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@@ -1519,6 +1542,16 @@ public final class Call {
|
|||||||
mInCallAdapter.rejectCall(mTelecomCallId, rejectWithMessage, textMessage);
|
mInCallAdapter.rejectCall(mTelecomCallId, rejectWithMessage, textMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs the {@link ConnectionService} providing this {@link #STATE_RINGING} call that the
|
||||||
|
* user has chosen to reject the call and has indicated a reason why the call is being rejected.
|
||||||
|
*
|
||||||
|
* @param rejectReason the reason the call is being rejected.
|
||||||
|
*/
|
||||||
|
public void reject(@RejectReason int rejectReason) {
|
||||||
|
mInCallAdapter.rejectCall(mTelecomCallId, rejectReason);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instructs this {@code Call} to disconnect.
|
* Instructs this {@code Call} to disconnect.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3036,6 +3036,17 @@ public abstract class Connection extends Conferenceable {
|
|||||||
*/
|
*/
|
||||||
public void onReject() {}
|
public void onReject() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notifies this Connection, which is in {@link #STATE_RINGING}, of a request to reject.
|
||||||
|
* <p>
|
||||||
|
* For managed {@link ConnectionService}s, this will be called when the user rejects a call via
|
||||||
|
* the default dialer's {@link InCallService} using {@link Call#reject(int)}.
|
||||||
|
* @param rejectReason the reason the user provided for rejecting the call.
|
||||||
|
*/
|
||||||
|
public void onReject(@android.telecom.Call.RejectReason int rejectReason) {
|
||||||
|
// to be implemented by ConnectionService.
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notifies this Connection, which is in {@link #STATE_RINGING}, of
|
* Notifies this Connection, which is in {@link #STATE_RINGING}, of
|
||||||
* a request to reject with a message.
|
* a request to reject with a message.
|
||||||
|
|||||||
@@ -194,6 +194,7 @@ public abstract class ConnectionService extends Service {
|
|||||||
private static final int MSG_CREATE_CONFERENCE = 35;
|
private static final int MSG_CREATE_CONFERENCE = 35;
|
||||||
private static final int MSG_CREATE_CONFERENCE_COMPLETE = 36;
|
private static final int MSG_CREATE_CONFERENCE_COMPLETE = 36;
|
||||||
private static final int MSG_CREATE_CONFERENCE_FAILED = 37;
|
private static final int MSG_CREATE_CONFERENCE_FAILED = 37;
|
||||||
|
private static final int MSG_REJECT_WITH_REASON = 38;
|
||||||
|
|
||||||
private static Connection sNullConnection;
|
private static Connection sNullConnection;
|
||||||
|
|
||||||
@@ -449,6 +450,21 @@ public abstract class ConnectionService extends Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rejectWithReason(String callId,
|
||||||
|
@android.telecom.Call.RejectReason int rejectReason, Session.Info sessionInfo) {
|
||||||
|
Log.startSession(sessionInfo, SESSION_REJECT);
|
||||||
|
try {
|
||||||
|
SomeArgs args = SomeArgs.obtain();
|
||||||
|
args.arg1 = callId;
|
||||||
|
args.argi1 = rejectReason;
|
||||||
|
args.arg2 = Log.createSubsession();
|
||||||
|
mHandler.obtainMessage(MSG_REJECT_WITH_REASON, args).sendToTarget();
|
||||||
|
} finally {
|
||||||
|
Log.endSession();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rejectWithMessage(String callId, String message, Session.Info sessionInfo) {
|
public void rejectWithMessage(String callId, String message, Session.Info sessionInfo) {
|
||||||
Log.startSession(sessionInfo, SESSION_REJECT_MESSAGE);
|
Log.startSession(sessionInfo, SESSION_REJECT_MESSAGE);
|
||||||
@@ -1053,6 +1069,17 @@ public abstract class ConnectionService extends Service {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MSG_REJECT_WITH_REASON: {
|
||||||
|
SomeArgs args = (SomeArgs) msg.obj;
|
||||||
|
Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_REJECT);
|
||||||
|
try {
|
||||||
|
reject((String) args.arg1, args.argi1);
|
||||||
|
} finally {
|
||||||
|
args.recycle();
|
||||||
|
Log.endSession();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case MSG_REJECT_WITH_MESSAGE: {
|
case MSG_REJECT_WITH_MESSAGE: {
|
||||||
SomeArgs args = (SomeArgs) msg.obj;
|
SomeArgs args = (SomeArgs) msg.obj;
|
||||||
Log.continueSession((Session) args.arg3,
|
Log.continueSession((Session) args.arg3,
|
||||||
@@ -1981,6 +2008,11 @@ public abstract class ConnectionService extends Service {
|
|||||||
findConnectionForAction(callId, "reject").onReject(rejectWithMessage);
|
findConnectionForAction(callId, "reject").onReject(rejectWithMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void reject(String callId, @android.telecom.Call.RejectReason int rejectReason) {
|
||||||
|
Log.d(this, "reject %s with reason %d", callId, rejectReason);
|
||||||
|
findConnectionForAction(callId, "reject").onReject(rejectReason);
|
||||||
|
}
|
||||||
|
|
||||||
private void silence(String callId) {
|
private void silence(String callId) {
|
||||||
Log.d(this, "silence %s", callId);
|
Log.d(this, "silence %s", callId);
|
||||||
findConnectionForAction(callId, "silence").onSilence();
|
findConnectionForAction(callId, "silence").onSilence();
|
||||||
|
|||||||
@@ -88,6 +88,19 @@ public final class InCallAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs Telecom to reject the specified call.
|
||||||
|
*
|
||||||
|
* @param callId The identifier of the call to reject.
|
||||||
|
* @param rejectReason The reason the call was rejected.
|
||||||
|
*/
|
||||||
|
public void rejectCall(String callId, @Call.RejectReason int rejectReason) {
|
||||||
|
try {
|
||||||
|
mAdapter.rejectCallWithReason(callId, rejectReason);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instructs Telecom to disconnect the specified call.
|
* Instructs Telecom to disconnect the specified call.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -77,6 +77,8 @@ oneway interface IConnectionService {
|
|||||||
|
|
||||||
void reject(String callId, in Session.Info sessionInfo);
|
void reject(String callId, in Session.Info sessionInfo);
|
||||||
|
|
||||||
|
void rejectWithReason(String callId, int rejectReason, in Session.Info sessionInfo);
|
||||||
|
|
||||||
void rejectWithMessage(String callId, String message, in Session.Info sessionInfo);
|
void rejectWithMessage(String callId, String message, in Session.Info sessionInfo);
|
||||||
|
|
||||||
void disconnect(String callId, in Session.Info sessionInfo);
|
void disconnect(String callId, in Session.Info sessionInfo);
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ oneway interface IInCallAdapter {
|
|||||||
|
|
||||||
void rejectCall(String callId, boolean rejectWithMessage, String textMessage);
|
void rejectCall(String callId, boolean rejectWithMessage, String textMessage);
|
||||||
|
|
||||||
|
void rejectCallWithReason(String callId, int rejectReason);
|
||||||
|
|
||||||
void disconnectCall(String callId);
|
void disconnectCall(String callId);
|
||||||
|
|
||||||
void holdCall(String callId);
|
void holdCall(String callId);
|
||||||
|
|||||||
@@ -410,6 +410,13 @@ public class ImsCallSessionImplBase implements AutoCloseable {
|
|||||||
* Rejects an incoming call or session update.
|
* Rejects an incoming call or session update.
|
||||||
*
|
*
|
||||||
* @param reason reason code to reject an incoming call, defined in {@link ImsReasonInfo}.
|
* @param reason reason code to reject an incoming call, defined in {@link ImsReasonInfo}.
|
||||||
|
* The {@link android.telecom.InCallService} (dialer app) can use the
|
||||||
|
* {@link android.telecom.Call#reject(int)} API to reject a call while specifying
|
||||||
|
* a user-indicated reason for rejecting the call.
|
||||||
|
* Normal call declines ({@link android.telecom.Call#REJECT_REASON_DECLINED}) will
|
||||||
|
* map to {@link ImsReasonInfo#CODE_USER_DECLINE}.
|
||||||
|
* Unwanted calls ({@link android.telecom.Call#REJECT_REASON_UNWANTED}) will map
|
||||||
|
* to {@link ImsReasonInfo#CODE_SIP_USER_MARKED_UNWANTED}.
|
||||||
* {@link ImsCallSession.Listener#callSessionStartFailed}
|
* {@link ImsCallSession.Listener#callSessionStartFailed}
|
||||||
*/
|
*/
|
||||||
public void reject(int reason) {
|
public void reject(int reason) {
|
||||||
|
|||||||
Reference in New Issue
Block a user