DO NOT MERGE Add new ConnectionEvent API (hide) to send a notification to Telecom

Connection event used to inform Telecom that it should play or stop
the on hold tone. This is used to play or stop a tone when the peer
puts the current call on hold.

BUG=25357778
Change-Id: I2669f8f5062449784a712b9dd28e576326fcc679
This commit is contained in:
Tyler Gunn
2016-03-17 18:34:27 -07:00
parent 0048acfc16
commit 7904a972e1
7 changed files with 108 additions and 0 deletions

View File

@@ -282,6 +282,24 @@ public abstract class Connection extends Conferenceable {
*/
public static final String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
/**
* Connection event used to inform Telecom that it should play the on hold tone. This is used
* to play a tone when the peer puts the current call on hold. Sent to Telecom via
* {@link #sendConnectionEvent(String)}.
* @hide
*/
public static final String EVENT_ON_HOLD_TONE_START =
"android.telecom.event.ON_HOLD_TONE_START";
/**
* Connection event used to inform Telecom that it should stop the on hold tone. This is used
* to stop a tone when the peer puts the current call on hold. Sent to Telecom via
* {@link #sendConnectionEvent(String)}.
* @hide
*/
public static final String EVENT_ON_HOLD_TONE_END =
"android.telecom.event.ON_HOLD_TONE_END";
// Flag controlling whether PII is emitted into the logs
private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG);
@@ -429,6 +447,8 @@ public abstract class Connection extends Conferenceable {
public void onConferenceStarted() {}
public void onConferenceMergeFailed(Connection c) {}
public void onExtrasChanged(Connection c, Bundle extras) {}
/** @hide */
public void onConnectionEvent(Connection c, String event) {}
}
/**
@@ -1944,4 +1964,16 @@ public abstract class Connection extends Conferenceable {
l.onConferenceStarted();
}
}
/**
* Sends a connection event to Telecom.
*
* @param event The connection event.
* @hide
*/
protected void sendConnectionEvent(String event) {
for (Listener l : mListeners) {
l.onConnectionEvent(this, event);
}
}
}

View File

@@ -611,6 +611,14 @@ public abstract class ConnectionService extends Service {
mAdapter.setExtras(id, extras);
}
}
@Override
public void onConnectionEvent(Connection connection, String event) {
String id = mIdByConnection.get(connection);
if (id != null) {
mAdapter.onConnectionEvent(id, event);
}
}
};
/** {@inheritDoc} */

View File

@@ -412,4 +412,20 @@ final class ConnectionServiceAdapter implements DeathRecipient {
}
}
}
/**
* Informs Telecom of a connection level event.
*
* @param callId The unique ID of the call.
* @param event The event.
*/
void onConnectionEvent(String callId, String event) {
Log.v(this, "onConnectionEvent: %s", event);
for (IConnectionServiceAdapter adapter : mAdapters) {
try {
adapter.onConnectionEvent(callId, event);
} catch (RemoteException ignored) {
}
}
}
}

View File

@@ -62,6 +62,7 @@ final class ConnectionServiceAdapterServant {
private static final int MSG_ON_POST_DIAL_CHAR = 22;
private static final int MSG_SET_CONFERENCE_MERGE_FAILED = 23;
private static final int MSG_SET_EXTRAS = 24;
private static final int MSG_ON_CONNECTION_EVENT = 25;
private final IConnectionServiceAdapter mDelegate;
@@ -239,6 +240,17 @@ final class ConnectionServiceAdapterServant {
} finally {
args.recycle();
}
break;
}
case MSG_ON_CONNECTION_EVENT: {
SomeArgs args = (SomeArgs) msg.obj;
try {
mDelegate.onConnectionEvent((String) args.arg1, (String) args.arg2);
} finally {
args.recycle();
}
break;
}
}
}
@@ -419,6 +431,14 @@ final class ConnectionServiceAdapterServant {
args.arg2 = extras;
mHandler.obtainMessage(MSG_SET_EXTRAS, args).sendToTarget();
}
@Override
public final void onConnectionEvent(String connectionId, String event) {
SomeArgs args = SomeArgs.obtain();
args.arg1 = connectionId;
args.arg2 = event;
mHandler.obtainMessage(MSG_ON_CONNECTION_EVENT, args).sendToTarget();
}
};
public ConnectionServiceAdapterServant(IConnectionServiceAdapter delegate) {

View File

@@ -209,6 +209,15 @@ public final class RemoteConnection {
* @param extras The extras containing other information associated with the connection.
*/
public void onExtrasChanged(RemoteConnection connection, @Nullable Bundle extras) {}
/**
* Handles a connection event propagated to this {@link RemoteConnection}.
*
* @param connection The {@code RemoteConnection} invoking this method.
* @param event The connection event.
* @hide
*/
public void onConnectionEvent(RemoteConnection connection, String event) {}
}
/**
@@ -1291,6 +1300,20 @@ public final class RemoteConnection {
}
}
/** @hide */
void onConnectionEvent(final String event) {
for (CallbackRecord record : mCallbackRecords) {
final RemoteConnection connection = this;
final Callback callback = record.getCallback();
record.getHandler().post(new Runnable() {
@Override
public void run() {
callback.onConnectionEvent(connection, event);
}
});
}
}
/**
* Create a RemoteConnection represents a failure, and which will be in
* {@link Connection#STATE_DISCONNECTED}. Attempting to use it for anything will almost

View File

@@ -330,6 +330,13 @@ final class RemoteConnectionService {
.setExtras(extras);
}
}
@Override
public void onConnectionEvent(String callId, String event) {
if (mConnectionById.containsKey(callId)) {
findConnectionForAction(callId, "onConnectionEvent").onConnectionEvent(event);
}
}
};
private final ConnectionServiceAdapterServant mServant =

View File

@@ -86,4 +86,6 @@ oneway interface IConnectionServiceAdapter {
void addExistingConnection(String callId, in ParcelableConnection connection);
void setExtras(String callId, in Bundle extras);
void onConnectionEvent(String callId, String event);
}