summaryrefslogtreecommitdiffstats
path: root/telecomm
diff options
context:
space:
mode:
authorSailesh Nepal <sail@google.com>2014-06-26 01:05:35 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-06-25 03:38:12 +0000
commitb32d9e53c2fa938498268649f4539f345680dd7d (patch)
tree70203b725475ca133ff566814e45133479cdf8ca /telecomm
parentaa7e529b47f6e5fb53905a92f99adfa63662ed2c (diff)
parent506e38690fe5e3b627e243fdc20948c514b87680 (diff)
downloadframeworks_base-b32d9e53c2fa938498268649f4539f345680dd7d.zip
frameworks_base-b32d9e53c2fa938498268649f4539f345680dd7d.tar.gz
frameworks_base-b32d9e53c2fa938498268649f4539f345680dd7d.tar.bz2
Merge "Add API to cancel outgoing calls"
Diffstat (limited to 'telecomm')
-rw-r--r--telecomm/java/android/telecomm/CallServiceAdapter.java14
-rw-r--r--telecomm/java/android/telecomm/ConnectionService.java63
-rw-r--r--telecomm/java/android/telecomm/RemoteConnectionManager.java2
-rw-r--r--telecomm/java/android/telecomm/RemoteConnectionService.java28
-rw-r--r--telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl2
5 files changed, 79 insertions, 30 deletions
diff --git a/telecomm/java/android/telecomm/CallServiceAdapter.java b/telecomm/java/android/telecomm/CallServiceAdapter.java
index 30084d0..31e37c4 100644
--- a/telecomm/java/android/telecomm/CallServiceAdapter.java
+++ b/telecomm/java/android/telecomm/CallServiceAdapter.java
@@ -135,6 +135,20 @@ public final class CallServiceAdapter implements DeathRecipient {
}
/**
+ * Tells Telecomm to cancel the call.
+ *
+ * @param callId The ID of the outgoing call.
+ */
+ public void cancelOutgoingCall(String callId) {
+ for (ICallServiceAdapter adapter : mAdapters) {
+ try {
+ adapter.cancelOutgoingCall(callId);
+ } catch (RemoteException e) {
+ }
+ }
+ }
+
+ /**
* Sets a call's state to active (e.g., an ongoing call where two parties can actively
* communicate).
*
diff --git a/telecomm/java/android/telecomm/ConnectionService.java b/telecomm/java/android/telecomm/ConnectionService.java
index 4b69a3c..23b99fa 100644
--- a/telecomm/java/android/telecomm/ConnectionService.java
+++ b/telecomm/java/android/telecomm/ConnectionService.java
@@ -52,6 +52,35 @@ public abstract class ConnectionService extends CallService {
private Uri mSubscriptionLookupHandle;
private boolean mAreSubscriptionsInitialized = false;
+ /**
+ * A callback for providing the resuilt of creating a connection.
+ */
+ public interface OutgoingCallResponse<CONNECTION> {
+ /**
+ * Tells Telecomm that an attempt to place the specified outgoing call succeeded.
+ *
+ * @param request The original request.
+ * @param connection The connection.
+ */
+ void onSuccess(ConnectionRequest request, CONNECTION connection);
+
+ /**
+ * Tells Telecomm that an attempt to place the specified outgoing call failed.
+ *
+ * @param request The original request.
+ * @param code An integer code indicating the reason for failure.
+ * @param msg A message explaining the reason for failure.
+ */
+ void onFailure(ConnectionRequest request, int code, String msg);
+
+ /**
+ * Tells Telecomm to cancel the call.
+ *
+ * @param request The original request.
+ */
+ void onCancel(ConnectionRequest request);
+ }
+
private final Connection.Listener mConnectionListener = new Connection.Listener() {
@Override
public void onStateChanged(Connection c, int state) {
@@ -136,30 +165,24 @@ public abstract class ConnectionService extends CallService {
callInfo.getId(),
callInfo.getHandle(),
callInfo.getExtras()),
- new Response<ConnectionRequest, Connection>() {
+ new OutgoingCallResponse<Connection>() {
@Override
- public void onResult(ConnectionRequest request, Connection... result) {
- if (result != null && result.length != 1) {
- Log.d(this, "adapter handleFailedOutgoingCall %s", callInfo);
- getAdapter().handleFailedOutgoingCall(
- request,
- DisconnectCause.ERROR_UNSPECIFIED,
- "Created " + result.length + " Connections, expected 1");
- for (Connection c : result) {
- c.abort();
- }
- } else {
- Log.d(this, "adapter handleSuccessfulOutgoingCall %s",
- callInfo.getId());
- getAdapter().handleSuccessfulOutgoingCall(callInfo.getId());
- addConnection(callInfo.getId(), result[0]);
- }
+ public void onSuccess(ConnectionRequest request, Connection connection) {
+ Log.d(this, "adapter handleSuccessfulOutgoingCall %s",
+ callInfo.getId());
+ getAdapter().handleSuccessfulOutgoingCall(callInfo.getId());
+ addConnection(callInfo.getId(), connection);
}
@Override
- public void onError(ConnectionRequest request, int code, String msg) {
+ public void onFailure(ConnectionRequest request, int code, String msg) {
getAdapter().handleFailedOutgoingCall(request, code, msg);
}
+
+ @Override
+ public void onCancel(ConnectionRequest request) {
+ getAdapter().cancelOutgoingCall(callInfo.getId());
+ }
}
);
}
@@ -389,7 +412,7 @@ public abstract class ConnectionService extends CallService {
public void createRemoteOutgoingConnection(
ConnectionRequest request,
- SimpleResponse<ConnectionRequest, RemoteConnection> response) {
+ OutgoingCallResponse<RemoteConnection> response) {
mRemoteConnectionManager.createOutgoingConnection(request, response);
}
@@ -408,7 +431,7 @@ public abstract class ConnectionService extends CallService {
*/
public void onCreateConnections(
ConnectionRequest request,
- Response<ConnectionRequest, Connection> callback) {}
+ OutgoingCallResponse<Connection> callback) {}
/**
* Returns a new or existing conference connection when the the user elects to convert the
diff --git a/telecomm/java/android/telecomm/RemoteConnectionManager.java b/telecomm/java/android/telecomm/RemoteConnectionManager.java
index 4201f23..465fae0 100644
--- a/telecomm/java/android/telecomm/RemoteConnectionManager.java
+++ b/telecomm/java/android/telecomm/RemoteConnectionManager.java
@@ -57,7 +57,7 @@ public class RemoteConnectionManager {
public void createOutgoingConnection(
ConnectionRequest request,
- final SimpleResponse<ConnectionRequest, RemoteConnection> response) {
+ final ConnectionService.OutgoingCallResponse response) {
Subscription subscription = request.getSubscription();
if (subscription == null) {
throw new IllegalArgumentException("subscription must be specified.");
diff --git a/telecomm/java/android/telecomm/RemoteConnectionService.java b/telecomm/java/android/telecomm/RemoteConnectionService.java
index 86a43cb..7658a76 100644
--- a/telecomm/java/android/telecomm/RemoteConnectionService.java
+++ b/telecomm/java/android/telecomm/RemoteConnectionService.java
@@ -43,7 +43,7 @@ public class RemoteConnectionService implements DeathRecipient {
private String mConnectionId;
private ConnectionRequest mPendingRequest;
- private SimpleResponse<ConnectionRequest, RemoteConnection> mPendingResponse;
+ private ConnectionService.OutgoingCallResponse<RemoteConnection> mPendingOutgoingCallResponse;
// Remote connection services only support a single connection.
private RemoteConnection mConnection;
@@ -60,7 +60,7 @@ public class RemoteConnectionService implements DeathRecipient {
public void handleSuccessfulOutgoingCall(String connectionId) {
if (isPendingConnection(connectionId)) {
mConnection = new RemoteConnection(mCallService, connectionId);
- mPendingResponse.onResult(mPendingRequest, mConnection);
+ mPendingOutgoingCallResponse.onSuccess(mPendingRequest, mConnection);
clearPendingInformation();
}
}
@@ -72,7 +72,17 @@ public class RemoteConnectionService implements DeathRecipient {
if (isPendingConnection(request.getCallId())) {
// Use mPendingRequest instead of request so that we use the same object that was
// passed in to us.
- mPendingResponse.onError(request);
+ mPendingOutgoingCallResponse.onFailure(mPendingRequest, errorCode, errorMessage);
+ mConnectionId = null;
+ clearPendingInformation();
+ }
+ }
+
+ /** ${inheritDoc} */
+ @Override
+ public void cancelOutgoingCall(String connectionId) {
+ if (isPendingConnection(connectionId)) {
+ mPendingOutgoingCallResponse.onCancel(mPendingRequest);
mConnectionId = null;
clearPendingInformation();
}
@@ -208,7 +218,7 @@ public class RemoteConnectionService implements DeathRecipient {
*/
public void createOutgoingConnection(
ConnectionRequest request,
- SimpleResponse<ConnectionRequest, RemoteConnection> response) {
+ ConnectionService.OutgoingCallResponse<RemoteConnection> response) {
if (mConnectionId == null) {
String id = UUID.randomUUID().toString();
@@ -216,13 +226,13 @@ public class RemoteConnectionService implements DeathRecipient {
try {
mCallService.call(callInfo);
mConnectionId = id;
- mPendingResponse = response;
+ mPendingOutgoingCallResponse = response;
mPendingRequest = request;
} catch (RemoteException e) {
- response.onError(request);
+ response.onFailure(request, DisconnectCause.ERROR_UNSPECIFIED, e.toString());
}
} else {
- response.onError(request);
+ response.onFailure(request, DisconnectCause.ERROR_UNSPECIFIED, null);
}
}
@@ -254,7 +264,7 @@ public class RemoteConnectionService implements DeathRecipient {
}
private boolean isPendingConnection(String id) {
- return TextUtils.equals(mConnectionId, id) && mPendingResponse != null;
+ return TextUtils.equals(mConnectionId, id) && mPendingOutgoingCallResponse != null;
}
private boolean isCurrentConnection(String id) {
@@ -263,7 +273,7 @@ public class RemoteConnectionService implements DeathRecipient {
private void clearPendingInformation() {
mPendingRequest = null;
- mPendingResponse = null;
+ mPendingOutgoingCallResponse = null;
}
private void destroyConnection() {
diff --git a/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl b/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl
index 87c8859..373fb16 100644
--- a/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl
+++ b/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl
@@ -35,6 +35,8 @@ oneway interface ICallServiceAdapter {
void handleFailedOutgoingCall(in ConnectionRequest request, int errorCode, String errorMessage);
+ void cancelOutgoingCall(String callId);
+
void setActive(String callId);
void setRinging(String callId);