am 7cb0925e: Merge "Add extras to Connections/Calls. (1/3)" into mnc-dev

* commit '7cb0925e7e89a415a101f83e32d4f5e51f768ffd':
  Add extras to Connections/Calls. (1/3)
This commit is contained in:
Santos Cordon
2015-05-28 23:18:34 +00:00
committed by Android Git Automerger
15 changed files with 269 additions and 18 deletions

View File

@@ -30002,6 +30002,7 @@ package android.telecom {
method public android.telecom.GatewayInfo getGatewayInfo(); method public android.telecom.GatewayInfo getGatewayInfo();
method public android.net.Uri getHandle(); method public android.net.Uri getHandle();
method public int getHandlePresentation(); method public int getHandlePresentation();
method public android.os.Bundle getIntentExtras();
method public android.telecom.StatusHints getStatusHints(); method public android.telecom.StatusHints getStatusHints();
method public int getVideoState(); method public int getVideoState();
method public static boolean hasProperty(int, int); method public static boolean hasProperty(int, int);
@@ -30056,6 +30057,7 @@ package android.telecom {
method public final long getConnectionTime(); method public final long getConnectionTime();
method public final java.util.List<android.telecom.Connection> getConnections(); method public final java.util.List<android.telecom.Connection> getConnections();
method public final android.telecom.DisconnectCause getDisconnectCause(); method public final android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras();
method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle(); method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle();
method public final int getState(); method public final int getState();
method public final android.telecom.StatusHints getStatusHints(); method public final android.telecom.StatusHints getStatusHints();
@@ -30078,6 +30080,7 @@ package android.telecom {
method public final void setConnectionCapabilities(int); method public final void setConnectionCapabilities(int);
method public final void setConnectionTime(long); method public final void setConnectionTime(long);
method public final void setDisconnected(android.telecom.DisconnectCause); method public final void setDisconnected(android.telecom.DisconnectCause);
method public final void setExtras(android.os.Bundle);
method public final void setOnHold(); method public final void setOnHold();
method public final void setStatusHints(android.telecom.StatusHints); method public final void setStatusHints(android.telecom.StatusHints);
method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider); method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider);
@@ -30104,6 +30107,7 @@ package android.telecom {
method public final java.util.List<android.telecom.Conferenceable> getConferenceables(); method public final java.util.List<android.telecom.Conferenceable> getConferenceables();
method public final int getConnectionCapabilities(); method public final int getConnectionCapabilities();
method public final android.telecom.DisconnectCause getDisconnectCause(); method public final android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras();
method public final int getState(); method public final int getState();
method public final android.telecom.StatusHints getStatusHints(); method public final android.telecom.StatusHints getStatusHints();
method public final android.telecom.Connection.VideoProvider getVideoProvider(); method public final android.telecom.Connection.VideoProvider getVideoProvider();
@@ -30131,6 +30135,7 @@ package android.telecom {
method public final void setConnectionService(android.telecom.ConnectionService); method public final void setConnectionService(android.telecom.ConnectionService);
method public final void setDialing(); method public final void setDialing();
method public final void setDisconnected(android.telecom.DisconnectCause); method public final void setDisconnected(android.telecom.DisconnectCause);
method public final void setExtras(android.os.Bundle);
method public final void setInitialized(); method public final void setInitialized();
method public final void setInitializing(); method public final void setInitializing();
method public final void setNextPostDialChar(char); method public final void setNextPostDialChar(char);
@@ -30371,6 +30376,7 @@ package android.telecom {
method public final int getConnectionCapabilities(); method public final int getConnectionCapabilities();
method public final java.util.List<android.telecom.RemoteConnection> getConnections(); method public final java.util.List<android.telecom.RemoteConnection> getConnections();
method public android.telecom.DisconnectCause getDisconnectCause(); method public android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras();
method public final int getState(); method public final int getState();
method public void hold(); method public void hold();
method public void merge(); method public void merge();
@@ -30393,6 +30399,7 @@ package android.telecom {
method public void onConnectionRemoved(android.telecom.RemoteConference, android.telecom.RemoteConnection); method public void onConnectionRemoved(android.telecom.RemoteConference, android.telecom.RemoteConnection);
method public void onDestroyed(android.telecom.RemoteConference); method public void onDestroyed(android.telecom.RemoteConference);
method public void onDisconnected(android.telecom.RemoteConference, android.telecom.DisconnectCause); method public void onDisconnected(android.telecom.RemoteConference, android.telecom.DisconnectCause);
method public void onExtrasChanged(android.telecom.RemoteConference, android.os.Bundle);
method public void onStateChanged(android.telecom.RemoteConference, int, int); method public void onStateChanged(android.telecom.RemoteConference, int, int);
} }
@@ -30408,6 +30415,7 @@ package android.telecom {
method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections(); method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections();
method public int getConnectionCapabilities(); method public int getConnectionCapabilities();
method public android.telecom.DisconnectCause getDisconnectCause(); method public android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras();
method public int getState(); method public int getState();
method public android.telecom.StatusHints getStatusHints(); method public android.telecom.StatusHints getStatusHints();
method public void hold(); method public void hold();
@@ -30433,6 +30441,7 @@ package android.telecom {
method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConnection, int); method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConnection, int);
method public void onDestroyed(android.telecom.RemoteConnection); method public void onDestroyed(android.telecom.RemoteConnection);
method public void onDisconnected(android.telecom.RemoteConnection, android.telecom.DisconnectCause); method public void onDisconnected(android.telecom.RemoteConnection, android.telecom.DisconnectCause);
method public void onExtrasChanged(android.telecom.RemoteConnection, android.os.Bundle);
method public void onPostDialChar(android.telecom.RemoteConnection, char); method public void onPostDialChar(android.telecom.RemoteConnection, char);
method public void onPostDialWait(android.telecom.RemoteConnection, java.lang.String); method public void onPostDialWait(android.telecom.RemoteConnection, java.lang.String);
method public void onRingbackRequested(android.telecom.RemoteConnection, boolean); method public void onRingbackRequested(android.telecom.RemoteConnection, boolean);

View File

@@ -32149,6 +32149,7 @@ package android.telecom {
method public android.telecom.GatewayInfo getGatewayInfo(); method public android.telecom.GatewayInfo getGatewayInfo();
method public android.net.Uri getHandle(); method public android.net.Uri getHandle();
method public int getHandlePresentation(); method public int getHandlePresentation();
method public android.os.Bundle getIntentExtras();
method public android.telecom.StatusHints getStatusHints(); method public android.telecom.StatusHints getStatusHints();
method public int getVideoState(); method public int getVideoState();
method public static boolean hasProperty(int, int); method public static boolean hasProperty(int, int);
@@ -32209,6 +32210,7 @@ package android.telecom {
method public final long getConnectionTime(); method public final long getConnectionTime();
method public final java.util.List<android.telecom.Connection> getConnections(); method public final java.util.List<android.telecom.Connection> getConnections();
method public final android.telecom.DisconnectCause getDisconnectCause(); method public final android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras();
method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle(); method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle();
method public android.telecom.Connection getPrimaryConnection(); method public android.telecom.Connection getPrimaryConnection();
method public final int getState(); method public final int getState();
@@ -32234,6 +32236,7 @@ package android.telecom {
method public final void setConnectionCapabilities(int); method public final void setConnectionCapabilities(int);
method public final void setConnectionTime(long); method public final void setConnectionTime(long);
method public final void setDisconnected(android.telecom.DisconnectCause); method public final void setDisconnected(android.telecom.DisconnectCause);
method public final void setExtras(android.os.Bundle);
method public final void setOnHold(); method public final void setOnHold();
method public final void setStatusHints(android.telecom.StatusHints); method public final void setStatusHints(android.telecom.StatusHints);
method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider); method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider);
@@ -32261,6 +32264,7 @@ package android.telecom {
method public final java.util.List<android.telecom.Conferenceable> getConferenceables(); method public final java.util.List<android.telecom.Conferenceable> getConferenceables();
method public final int getConnectionCapabilities(); method public final int getConnectionCapabilities();
method public final android.telecom.DisconnectCause getDisconnectCause(); method public final android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras();
method public final int getState(); method public final int getState();
method public final android.telecom.StatusHints getStatusHints(); method public final android.telecom.StatusHints getStatusHints();
method public final android.telecom.Connection.VideoProvider getVideoProvider(); method public final android.telecom.Connection.VideoProvider getVideoProvider();
@@ -32289,6 +32293,7 @@ package android.telecom {
method public final void setConnectionService(android.telecom.ConnectionService); method public final void setConnectionService(android.telecom.ConnectionService);
method public final void setDialing(); method public final void setDialing();
method public final void setDisconnected(android.telecom.DisconnectCause); method public final void setDisconnected(android.telecom.DisconnectCause);
method public final void setExtras(android.os.Bundle);
method public final void setInitialized(); method public final void setInitialized();
method public final void setInitializing(); method public final void setInitializing();
method public final void setNextPostDialChar(char); method public final void setNextPostDialChar(char);
@@ -32554,6 +32559,7 @@ package android.telecom {
method public final int getConnectionCapabilities(); method public final int getConnectionCapabilities();
method public final java.util.List<android.telecom.RemoteConnection> getConnections(); method public final java.util.List<android.telecom.RemoteConnection> getConnections();
method public android.telecom.DisconnectCause getDisconnectCause(); method public android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras();
method public final int getState(); method public final int getState();
method public void hold(); method public void hold();
method public void merge(); method public void merge();
@@ -32577,6 +32583,7 @@ package android.telecom {
method public void onConnectionRemoved(android.telecom.RemoteConference, android.telecom.RemoteConnection); method public void onConnectionRemoved(android.telecom.RemoteConference, android.telecom.RemoteConnection);
method public void onDestroyed(android.telecom.RemoteConference); method public void onDestroyed(android.telecom.RemoteConference);
method public void onDisconnected(android.telecom.RemoteConference, android.telecom.DisconnectCause); method public void onDisconnected(android.telecom.RemoteConference, android.telecom.DisconnectCause);
method public void onExtrasChanged(android.telecom.RemoteConference, android.os.Bundle);
method public void onStateChanged(android.telecom.RemoteConference, int, int); method public void onStateChanged(android.telecom.RemoteConference, int, int);
} }
@@ -32592,6 +32599,7 @@ package android.telecom {
method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections(); method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections();
method public int getConnectionCapabilities(); method public int getConnectionCapabilities();
method public android.telecom.DisconnectCause getDisconnectCause(); method public android.telecom.DisconnectCause getDisconnectCause();
method public final android.os.Bundle getExtras();
method public int getState(); method public int getState();
method public android.telecom.StatusHints getStatusHints(); method public android.telecom.StatusHints getStatusHints();
method public void hold(); method public void hold();
@@ -32618,6 +32626,7 @@ package android.telecom {
method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConnection, int); method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConnection, int);
method public void onDestroyed(android.telecom.RemoteConnection); method public void onDestroyed(android.telecom.RemoteConnection);
method public void onDisconnected(android.telecom.RemoteConnection, android.telecom.DisconnectCause); method public void onDisconnected(android.telecom.RemoteConnection, android.telecom.DisconnectCause);
method public void onExtrasChanged(android.telecom.RemoteConnection, android.os.Bundle);
method public void onPostDialChar(android.telecom.RemoteConnection, char); method public void onPostDialChar(android.telecom.RemoteConnection, char);
method public void onPostDialWait(android.telecom.RemoteConnection, java.lang.String); method public void onPostDialWait(android.telecom.RemoteConnection, java.lang.String);
method public void onRingbackRequested(android.telecom.RemoteConnection, boolean); method public void onRingbackRequested(android.telecom.RemoteConnection, boolean);

View File

@@ -253,6 +253,7 @@ public final class Call {
private final int mVideoState; private final int mVideoState;
private final StatusHints mStatusHints; private final StatusHints mStatusHints;
private final Bundle mExtras; private final Bundle mExtras;
private final Bundle mIntentExtras;
/** /**
* Whether the supplied capabilities supports the specified capability. * Whether the supplied capabilities supports the specified capability.
@@ -480,12 +481,19 @@ public final class Call {
} }
/** /**
* @return A bundle extras to pass with the call * @return The extras associated with this call.
*/ */
public Bundle getExtras() { public Bundle getExtras() {
return mExtras; return mExtras;
} }
/**
* @return The extras used with the original intent to place this call.
*/
public Bundle getIntentExtras() {
return mIntentExtras;
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (o instanceof Details) { if (o instanceof Details) {
@@ -504,7 +512,8 @@ public final class Call {
Objects.equals(mGatewayInfo, d.mGatewayInfo) && Objects.equals(mGatewayInfo, d.mGatewayInfo) &&
Objects.equals(mVideoState, d.mVideoState) && Objects.equals(mVideoState, d.mVideoState) &&
Objects.equals(mStatusHints, d.mStatusHints) && Objects.equals(mStatusHints, d.mStatusHints) &&
Objects.equals(mExtras, d.mExtras); Objects.equals(mExtras, d.mExtras) &&
Objects.equals(mIntentExtras, d.mIntentExtras);
} }
return false; return false;
} }
@@ -524,7 +533,8 @@ public final class Call {
Objects.hashCode(mGatewayInfo) + Objects.hashCode(mGatewayInfo) +
Objects.hashCode(mVideoState) + Objects.hashCode(mVideoState) +
Objects.hashCode(mStatusHints) + Objects.hashCode(mStatusHints) +
Objects.hashCode(mExtras); Objects.hashCode(mExtras) +
Objects.hashCode(mIntentExtras);
} }
/** {@hide} */ /** {@hide} */
@@ -541,7 +551,8 @@ public final class Call {
GatewayInfo gatewayInfo, GatewayInfo gatewayInfo,
int videoState, int videoState,
StatusHints statusHints, StatusHints statusHints,
Bundle extras) { Bundle extras,
Bundle intentExtras) {
mHandle = handle; mHandle = handle;
mHandlePresentation = handlePresentation; mHandlePresentation = handlePresentation;
mCallerDisplayName = callerDisplayName; mCallerDisplayName = callerDisplayName;
@@ -555,6 +566,7 @@ public final class Call {
mVideoState = videoState; mVideoState = videoState;
mStatusHints = statusHints; mStatusHints = statusHints;
mExtras = extras; mExtras = extras;
mIntentExtras = intentExtras;
} }
} }
@@ -986,7 +998,8 @@ public final class Call {
parcelableCall.getGatewayInfo(), parcelableCall.getGatewayInfo(),
parcelableCall.getVideoState(), parcelableCall.getVideoState(),
parcelableCall.getStatusHints(), parcelableCall.getStatusHints(),
parcelableCall.getExtras()); parcelableCall.getExtras(),
parcelableCall.getIntentExtras());
boolean detailsChanged = !Objects.equals(mDetails, details); boolean detailsChanged = !Objects.equals(mDetails, details);
if (detailsChanged) { if (detailsChanged) {
mDetails = details; mDetails = details;

View File

@@ -16,7 +16,9 @@
package android.telecom; package android.telecom;
import android.annotation.Nullable;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.os.Bundle;
import android.telecom.Connection.VideoProvider; import android.telecom.Connection.VideoProvider;
import java.util.ArrayList; import java.util.ArrayList;
@@ -52,6 +54,7 @@ public abstract class Conference extends Conferenceable {
public void onVideoStateChanged(Conference c, int videoState) { } public void onVideoStateChanged(Conference c, int videoState) { }
public void onVideoProviderChanged(Conference c, Connection.VideoProvider videoProvider) {} public void onVideoProviderChanged(Conference c, Connection.VideoProvider videoProvider) {}
public void onStatusHintsChanged(Conference conference, StatusHints statusHints) {} public void onStatusHintsChanged(Conference conference, StatusHints statusHints) {}
public void onExtrasChanged(Conference conference, Bundle extras) {}
} }
private final Set<Listener> mListeners = new CopyOnWriteArraySet<>(); private final Set<Listener> mListeners = new CopyOnWriteArraySet<>();
@@ -70,6 +73,7 @@ public abstract class Conference extends Conferenceable {
private String mDisconnectMessage; private String mDisconnectMessage;
private long mConnectTimeMillis = CONNECT_TIME_NOT_SPECIFIED; private long mConnectTimeMillis = CONNECT_TIME_NOT_SPECIFIED;
private StatusHints mStatusHints; private StatusHints mStatusHints;
private Bundle mExtras;
private final Connection.Listener mConnectionDeathListener = new Connection.Listener() { private final Connection.Listener mConnectionDeathListener = new Connection.Listener() {
@Override @Override
@@ -600,4 +604,25 @@ public abstract class Conference extends Conferenceable {
public final StatusHints getStatusHints() { public final StatusHints getStatusHints() {
return mStatusHints; return mStatusHints;
} }
/**
* Set some extras that can be associated with this {@code Conference}. No assumptions should
* be made as to how an In-Call UI or service will handle these extras.
* Keys should be fully qualified (e.g., com.example.MY_EXTRA) to avoid conflicts.
*
* @param extras The extras associated with this {@code Connection}.
*/
public final void setExtras(@Nullable Bundle extras) {
mExtras = extras;
for (Listener l : mListeners) {
l.onExtrasChanged(this, extras);
}
}
/**
* @return The extras associated with this conference.
*/
public final Bundle getExtras() {
return mExtras;
}
} }

View File

@@ -20,8 +20,10 @@ import com.android.internal.os.SomeArgs;
import com.android.internal.telecom.IVideoCallback; import com.android.internal.telecom.IVideoCallback;
import com.android.internal.telecom.IVideoProvider; import com.android.internal.telecom.IVideoProvider;
import android.annotation.Nullable;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.Message; import android.os.Message;
@@ -334,6 +336,7 @@ public abstract class Connection extends Conferenceable {
List<ConferenceParticipant> participants) {} List<ConferenceParticipant> participants) {}
public void onConferenceStarted() {} public void onConferenceStarted() {}
public void onConferenceMergeFailed(Connection c) {} public void onConferenceMergeFailed(Connection c) {}
public void onExtrasChanged(Connection c, Bundle extras) {}
} }
public static abstract class VideoProvider { public static abstract class VideoProvider {
@@ -832,6 +835,7 @@ public abstract class Connection extends Conferenceable {
private DisconnectCause mDisconnectCause; private DisconnectCause mDisconnectCause;
private Conference mConference; private Conference mConference;
private ConnectionService mConnectionService; private ConnectionService mConnectionService;
private Bundle mExtras;
/** /**
* Create a new Connection. * Create a new Connection.
@@ -941,6 +945,13 @@ public abstract class Connection extends Conferenceable {
return mStatusHints; return mStatusHints;
} }
/**
* @return The extras associated with this connection.
*/
public final Bundle getExtras() {
return mExtras;
}
/** /**
* Assign a listener to be notified of state changes. * Assign a listener to be notified of state changes.
* *
@@ -1370,6 +1381,21 @@ public abstract class Connection extends Conferenceable {
} }
} }
/**
* Set some extras that can be associated with this {@code Connection}. No assumptions should
* be made as to how an In-Call UI or service will handle these extras.
* Keys should be fully qualified (e.g., com.example.MY_EXTRA) to avoid conflicts.
*
* @param extras The extras associated with this {@code Connection}.
*/
public final void setExtras(@Nullable Bundle extras) {
checkImmutable();
mExtras = extras;
for (Listener l : mListeners) {
l.onExtrasChanged(this, extras);
}
}
/** /**
* Notifies this Connection that the {@link #getAudioState()} property has a new value. * Notifies this Connection that the {@link #getAudioState()} property has a new value.
* *

View File

@@ -21,6 +21,7 @@ import android.app.Service;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.Looper; import android.os.Looper;
@@ -432,6 +433,12 @@ public abstract class ConnectionService extends Service {
String id = mIdByConference.get(conference); String id = mIdByConference.get(conference);
mAdapter.setStatusHints(id, statusHints); mAdapter.setStatusHints(id, statusHints);
} }
@Override
public void onExtrasChanged(Conference conference, Bundle extras) {
String id = mIdByConference.get(conference);
mAdapter.setExtras(id, extras);
}
}; };
private final Connection.Listener mConnectionListener = new Connection.Listener() { private final Connection.Listener mConnectionListener = new Connection.Listener() {
@@ -569,6 +576,14 @@ public abstract class ConnectionService extends Service {
mAdapter.onConferenceMergeFailed(id); mAdapter.onConferenceMergeFailed(id);
} }
} }
@Override
public void onExtrasChanged(Connection connection, Bundle extras) {
String id = mIdByConnection.get(connection);
if (id != null) {
mAdapter.setExtras(id, extras);
}
}
}; };
/** {@inheritDoc} */ /** {@inheritDoc} */
@@ -638,7 +653,8 @@ public abstract class ConnectionService extends Service {
connection.getAudioModeIsVoip(), connection.getAudioModeIsVoip(),
connection.getStatusHints(), connection.getStatusHints(),
connection.getDisconnectCause(), connection.getDisconnectCause(),
createIdList(connection.getConferenceables()))); createIdList(connection.getConferenceables()),
connection.getExtras()));
} }
private void abort(String callId) { private void abort(String callId) {
@@ -919,7 +935,8 @@ public abstract class ConnectionService extends Service {
null : conference.getVideoProvider().getInterface(), null : conference.getVideoProvider().getInterface(),
conference.getVideoState(), conference.getVideoState(),
conference.getConnectTimeMillis(), conference.getConnectTimeMillis(),
conference.getStatusHints()); conference.getStatusHints(),
conference.getExtras());
mAdapter.addConferenceCall(id, parcelableConference); mAdapter.addConferenceCall(id, parcelableConference);
mAdapter.setVideoProvider(id, conference.getVideoProvider()); mAdapter.setVideoProvider(id, conference.getVideoProvider());
@@ -964,7 +981,8 @@ public abstract class ConnectionService extends Service {
connection.getAudioModeIsVoip(), connection.getAudioModeIsVoip(),
connection.getStatusHints(), connection.getStatusHints(),
connection.getDisconnectCause(), connection.getDisconnectCause(),
emptyList); emptyList,
connection.getExtras());
mAdapter.addExistingConnection(id, parcelableConnection); mAdapter.addExistingConnection(id, parcelableConnection);
} }
} }

View File

@@ -17,6 +17,7 @@
package android.telecom; package android.telecom;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder.DeathRecipient; import android.os.IBinder.DeathRecipient;
import android.os.RemoteException; import android.os.RemoteException;
@@ -384,4 +385,20 @@ final class ConnectionServiceAdapter implements DeathRecipient {
} }
} }
} }
/**
* Sets extras associated with a connection.
*
* @param callId The unique ID of the call.
* @param extras The extras to associate with this call.
*/
void setExtras(String callId, Bundle extras) {
Log.v(this, "setExtras: %s", extras);
for (IConnectionServiceAdapter adapter : mAdapters) {
try {
adapter.setExtras(callId, extras);
} catch (RemoteException ignored) {
}
}
}
} }

View File

@@ -17,6 +17,7 @@
package android.telecom; package android.telecom;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.os.RemoteException; import android.os.RemoteException;
@@ -60,6 +61,7 @@ final class ConnectionServiceAdapterServant {
private static final int MSG_ADD_EXISTING_CONNECTION = 21; private static final int MSG_ADD_EXISTING_CONNECTION = 21;
private static final int MSG_ON_POST_DIAL_CHAR = 22; 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_CONFERENCE_MERGE_FAILED = 23;
private static final int MSG_SET_EXTRAS = 24;
private final IConnectionServiceAdapter mDelegate; private final IConnectionServiceAdapter mDelegate;
@@ -230,6 +232,14 @@ final class ConnectionServiceAdapterServant {
} }
break; break;
} }
case MSG_SET_EXTRAS: {
SomeArgs args = (SomeArgs) msg.obj;
try {
mDelegate.setExtras((String) args.arg1, (Bundle) args.arg2);
} finally {
args.recycle();
}
}
} }
} }
}; };
@@ -401,6 +411,14 @@ final class ConnectionServiceAdapterServant {
args.arg2 = connection; args.arg2 = connection;
mHandler.obtainMessage(MSG_ADD_EXISTING_CONNECTION, args).sendToTarget(); mHandler.obtainMessage(MSG_ADD_EXISTING_CONNECTION, args).sendToTarget();
} }
@Override
public final void setExtras(String connectionId, Bundle extras) {
SomeArgs args = SomeArgs.obtain();
args.arg1 = connectionId;
args.arg2 = extras;
mHandler.obtainMessage(MSG_SET_EXTRAS, args).sendToTarget();
}
}; };
public ConnectionServiceAdapterServant(IConnectionServiceAdapter delegate) { public ConnectionServiceAdapterServant(IConnectionServiceAdapter delegate) {

View File

@@ -54,6 +54,7 @@ public final class ParcelableCall implements Parcelable {
private final StatusHints mStatusHints; private final StatusHints mStatusHints;
private final int mVideoState; private final int mVideoState;
private final List<String> mConferenceableCallIds; private final List<String> mConferenceableCallIds;
private final Bundle mIntentExtras;
private final Bundle mExtras; private final Bundle mExtras;
public ParcelableCall( public ParcelableCall(
@@ -77,6 +78,7 @@ public final class ParcelableCall implements Parcelable {
StatusHints statusHints, StatusHints statusHints,
int videoState, int videoState,
List<String> conferenceableCallIds, List<String> conferenceableCallIds,
Bundle intentExtras,
Bundle extras) { Bundle extras) {
mId = id; mId = id;
mState = state; mState = state;
@@ -98,6 +100,7 @@ public final class ParcelableCall implements Parcelable {
mStatusHints = statusHints; mStatusHints = statusHints;
mVideoState = videoState; mVideoState = videoState;
mConferenceableCallIds = Collections.unmodifiableList(conferenceableCallIds); mConferenceableCallIds = Collections.unmodifiableList(conferenceableCallIds);
mIntentExtras = intentExtras;
mExtras = extras; mExtras = extras;
} }
@@ -227,7 +230,7 @@ public final class ParcelableCall implements Parcelable {
} }
/** /**
* Any extras to pass with the call * Any extras associated with this call.
* *
* @return a bundle of extras * @return a bundle of extras
*/ */
@@ -235,6 +238,15 @@ public final class ParcelableCall implements Parcelable {
return mExtras; return mExtras;
} }
/**
* Extras passed in as part of the original call intent.
*
* @return The intent extras.
*/
public Bundle getIntentExtras() {
return mIntentExtras;
}
/** /**
* Indicates to the receiver of the {@link ParcelableCall} whether a change has occurred in the * Indicates to the receiver of the {@link ParcelableCall} whether a change has occurred in the
* {@link android.telecom.InCallService.VideoCall} associated with this call. Since * {@link android.telecom.InCallService.VideoCall} associated with this call. Since
@@ -277,7 +289,8 @@ public final class ParcelableCall implements Parcelable {
int videoState = source.readInt(); int videoState = source.readInt();
List<String> conferenceableCallIds = new ArrayList<>(); List<String> conferenceableCallIds = new ArrayList<>();
source.readList(conferenceableCallIds, classLoader); source.readList(conferenceableCallIds, classLoader);
Bundle extras = source.readParcelable(classLoader); Bundle intentExtras = source.readBundle(classLoader);
Bundle extras = source.readBundle(classLoader);
return new ParcelableCall( return new ParcelableCall(
id, id,
state, state,
@@ -299,6 +312,7 @@ public final class ParcelableCall implements Parcelable {
statusHints, statusHints,
videoState, videoState,
conferenceableCallIds, conferenceableCallIds,
intentExtras,
extras); extras);
} }
@@ -338,7 +352,8 @@ public final class ParcelableCall implements Parcelable {
destination.writeParcelable(mStatusHints, 0); destination.writeParcelable(mStatusHints, 0);
destination.writeInt(mVideoState); destination.writeInt(mVideoState);
destination.writeList(mConferenceableCallIds); destination.writeList(mConferenceableCallIds);
destination.writeParcelable(mExtras, 0); destination.writeBundle(mIntentExtras);
destination.writeBundle(mExtras);
} }
@Override @Override

View File

@@ -16,6 +16,7 @@
package android.telecom; package android.telecom;
import android.os.Bundle;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -38,6 +39,7 @@ public final class ParcelableConference implements Parcelable {
private final IVideoProvider mVideoProvider; private final IVideoProvider mVideoProvider;
private final int mVideoState; private final int mVideoState;
private StatusHints mStatusHints; private StatusHints mStatusHints;
private Bundle mExtras;
public ParcelableConference( public ParcelableConference(
PhoneAccountHandle phoneAccount, PhoneAccountHandle phoneAccount,
@@ -47,7 +49,8 @@ public final class ParcelableConference implements Parcelable {
IVideoProvider videoProvider, IVideoProvider videoProvider,
int videoState, int videoState,
long connectTimeMillis, long connectTimeMillis,
StatusHints statusHints) { StatusHints statusHints,
Bundle extras) {
mPhoneAccount = phoneAccount; mPhoneAccount = phoneAccount;
mState = state; mState = state;
mConnectionCapabilities = connectionCapabilities; mConnectionCapabilities = connectionCapabilities;
@@ -57,6 +60,7 @@ public final class ParcelableConference implements Parcelable {
mVideoState = videoState; mVideoState = videoState;
mConnectTimeMillis = connectTimeMillis; mConnectTimeMillis = connectTimeMillis;
mStatusHints = statusHints; mStatusHints = statusHints;
mExtras = extras;
} }
@Override @Override
@@ -110,6 +114,10 @@ public final class ParcelableConference implements Parcelable {
return mStatusHints; return mStatusHints;
} }
public Bundle getExtras() {
return mExtras;
}
public static final Parcelable.Creator<ParcelableConference> CREATOR = public static final Parcelable.Creator<ParcelableConference> CREATOR =
new Parcelable.Creator<ParcelableConference> () { new Parcelable.Creator<ParcelableConference> () {
@Override @Override
@@ -125,9 +133,10 @@ public final class ParcelableConference implements Parcelable {
IVideoProvider.Stub.asInterface(source.readStrongBinder()); IVideoProvider.Stub.asInterface(source.readStrongBinder());
int videoState = source.readInt(); int videoState = source.readInt();
StatusHints statusHints = source.readParcelable(classLoader); StatusHints statusHints = source.readParcelable(classLoader);
Bundle extras = source.readBundle(classLoader);
return new ParcelableConference(phoneAccount, state, capabilities, connectionIds, return new ParcelableConference(phoneAccount, state, capabilities, connectionIds,
videoCallProvider, videoState, connectTimeMillis, statusHints); videoCallProvider, videoState, connectTimeMillis, statusHints, extras);
} }
@Override @Override
@@ -154,5 +163,6 @@ public final class ParcelableConference implements Parcelable {
mVideoProvider != null ? mVideoProvider.asBinder() : null); mVideoProvider != null ? mVideoProvider.asBinder() : null);
destination.writeInt(mVideoState); destination.writeInt(mVideoState);
destination.writeParcelable(mStatusHints, 0); destination.writeParcelable(mStatusHints, 0);
destination.writeBundle(mExtras);
} }
} }

View File

@@ -17,6 +17,7 @@
package android.telecom; package android.telecom;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -46,6 +47,7 @@ public final class ParcelableConnection implements Parcelable {
private final StatusHints mStatusHints; private final StatusHints mStatusHints;
private final DisconnectCause mDisconnectCause; private final DisconnectCause mDisconnectCause;
private final List<String> mConferenceableConnectionIds; private final List<String> mConferenceableConnectionIds;
private final Bundle mExtras;
/** @hide */ /** @hide */
public ParcelableConnection( public ParcelableConnection(
@@ -62,7 +64,8 @@ public final class ParcelableConnection implements Parcelable {
boolean isVoipAudioMode, boolean isVoipAudioMode,
StatusHints statusHints, StatusHints statusHints,
DisconnectCause disconnectCause, DisconnectCause disconnectCause,
List<String> conferenceableConnectionIds) { List<String> conferenceableConnectionIds,
Bundle extras) {
mPhoneAccount = phoneAccount; mPhoneAccount = phoneAccount;
mState = state; mState = state;
mConnectionCapabilities = capabilities; mConnectionCapabilities = capabilities;
@@ -76,7 +79,8 @@ public final class ParcelableConnection implements Parcelable {
mIsVoipAudioMode = isVoipAudioMode; mIsVoipAudioMode = isVoipAudioMode;
mStatusHints = statusHints; mStatusHints = statusHints;
mDisconnectCause = disconnectCause; mDisconnectCause = disconnectCause;
this.mConferenceableConnectionIds = conferenceableConnectionIds; mConferenceableConnectionIds = conferenceableConnectionIds;
mExtras = extras;
} }
public PhoneAccountHandle getPhoneAccount() { public PhoneAccountHandle getPhoneAccount() {
@@ -136,15 +140,21 @@ public final class ParcelableConnection implements Parcelable {
return mConferenceableConnectionIds; return mConferenceableConnectionIds;
} }
public final Bundle getExtras() {
return mExtras;
}
@Override @Override
public String toString() { public String toString() {
return new StringBuilder() return new StringBuilder()
.append("ParcelableConnection [act:") .append("ParcelableConnection [act:")
.append(mPhoneAccount) .append(mPhoneAccount)
.append(", state:") .append("], state:")
.append(mState) .append(mState)
.append(", capabilities:") .append(", capabilities:")
.append(Connection.capabilitiesToString(mConnectionCapabilities)) .append(Connection.capabilitiesToString(mConnectionCapabilities))
.append(", extras:")
.append(mExtras)
.toString(); .toString();
} }
@@ -170,6 +180,7 @@ public final class ParcelableConnection implements Parcelable {
DisconnectCause disconnectCause = source.readParcelable(classLoader); DisconnectCause disconnectCause = source.readParcelable(classLoader);
List<String> conferenceableConnectionIds = new ArrayList<>(); List<String> conferenceableConnectionIds = new ArrayList<>();
source.readStringList(conferenceableConnectionIds); source.readStringList(conferenceableConnectionIds);
Bundle extras = source.readBundle(classLoader);
return new ParcelableConnection( return new ParcelableConnection(
phoneAccount, phoneAccount,
@@ -185,7 +196,8 @@ public final class ParcelableConnection implements Parcelable {
audioModeIsVoip, audioModeIsVoip,
statusHints, statusHints,
disconnectCause, disconnectCause,
conferenceableConnectionIds); conferenceableConnectionIds,
extras);
} }
@Override @Override
@@ -218,5 +230,6 @@ public final class ParcelableConnection implements Parcelable {
destination.writeParcelable(mStatusHints, 0); destination.writeParcelable(mStatusHints, 0);
destination.writeParcelable(mDisconnectCause, 0); destination.writeParcelable(mDisconnectCause, 0);
destination.writeStringList(mConferenceableConnectionIds); destination.writeStringList(mConferenceableConnectionIds);
destination.writeBundle(mExtras);
} }
} }

View File

@@ -18,7 +18,9 @@ package android.telecom;
import com.android.internal.telecom.IConnectionService; import com.android.internal.telecom.IConnectionService;
import android.annotation.Nullable;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.RemoteException; import android.os.RemoteException;
@@ -49,6 +51,7 @@ public final class RemoteConference {
RemoteConference conference, RemoteConference conference,
List<RemoteConnection> conferenceableConnections) {} List<RemoteConnection> conferenceableConnections) {}
public void onDestroyed(RemoteConference conference) {} public void onDestroyed(RemoteConference conference) {}
public void onExtrasChanged(RemoteConference conference, @Nullable Bundle extras) {}
} }
private final String mId; private final String mId;
@@ -65,6 +68,7 @@ public final class RemoteConference {
private int mState = Connection.STATE_NEW; private int mState = Connection.STATE_NEW;
private DisconnectCause mDisconnectCause; private DisconnectCause mDisconnectCause;
private int mConnectionCapabilities; private int mConnectionCapabilities;
private Bundle mExtras;
/** @hide */ /** @hide */
RemoteConference(String id, IConnectionService connectionService) { RemoteConference(String id, IConnectionService connectionService) {
@@ -209,6 +213,21 @@ public final class RemoteConference {
} }
} }
/** @hide */
void setExtras(final Bundle extras) {
mExtras = extras;
for (CallbackRecord<Callback> record : mCallbackRecords) {
final RemoteConference conference = this;
final Callback callback = record.getCallback();
record.getHandler().post(new Runnable() {
@Override
public void run() {
callback.onExtrasChanged(conference, extras);
}
});
}
}
/** /**
* Returns the list of {@link RemoteConnection}s contained in this conference. * Returns the list of {@link RemoteConnection}s contained in this conference.
* *
@@ -237,6 +256,15 @@ public final class RemoteConference {
return mConnectionCapabilities; return mConnectionCapabilities;
} }
/**
* Obtain the extras associated with this {@code RemoteConnection}.
*
* @return The extras for this connection.
*/
public final Bundle getExtras() {
return mExtras;
}
/** /**
* Disconnects the conference call as well as the child {@link RemoteConnection}s. * Disconnects the conference call as well as the child {@link RemoteConnection}s.
*/ */

View File

@@ -20,8 +20,10 @@ import com.android.internal.telecom.IConnectionService;
import com.android.internal.telecom.IVideoCallback; import com.android.internal.telecom.IVideoCallback;
import com.android.internal.telecom.IVideoProvider; import com.android.internal.telecom.IVideoProvider;
import android.annotation.Nullable;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
@@ -197,9 +199,17 @@ public final class RemoteConnection {
public void onConferenceChanged( public void onConferenceChanged(
RemoteConnection connection, RemoteConnection connection,
RemoteConference conference) {} RemoteConference conference) {}
/**
* Handles changes to the {@code RemoteConference} extras.
*
* @param connection The {@code RemoteConnection} invoking this method.
* @param extras The extras containing other information associated with the connection.
*/
public void onExtrasChanged(RemoteConnection connection, @Nullable Bundle extras) {}
} }
/** {@hide} */ /** @hide */
public static class VideoProvider { public static class VideoProvider {
public abstract static class Listener { public abstract static class Listener {
@@ -415,6 +425,7 @@ public final class RemoteConnection {
private String mCallerDisplayName; private String mCallerDisplayName;
private int mCallerDisplayNamePresentation; private int mCallerDisplayNamePresentation;
private RemoteConference mConference; private RemoteConference mConference;
private Bundle mExtras;
/** /**
* @hide * @hide
@@ -613,6 +624,15 @@ public final class RemoteConnection {
return mVideoProvider; return mVideoProvider;
} }
/**
* Obtain the extras associated with this {@code RemoteConnection}.
*
* @return The extras for this connection.
*/
public final Bundle getExtras() {
return mExtras;
}
/** /**
* Determines whether this {@code RemoteConnection} is requesting ringback. * Determines whether this {@code RemoteConnection} is requesting ringback.
* *
@@ -1097,6 +1117,21 @@ public final class RemoteConnection {
} }
} }
/** @hide */
void setExtras(final Bundle extras) {
mExtras = extras;
for (CallbackRecord record : mCallbackRecords) {
final RemoteConnection connection = this;
final Callback callback = record.getCallback();
record.getHandler().post(new Runnable() {
@Override
public void run() {
callback.onExtrasChanged(connection, extras);
}
});
}
}
/** /**
* Create a RemoteConnection represents a failure, and which will be in * Create a RemoteConnection represents a failure, and which will be in
* {@link Connection#STATE_DISCONNECTED}. Attempting to use it for anything will almost * {@link Connection#STATE_DISCONNECTED}. Attempting to use it for anything will almost

View File

@@ -17,6 +17,7 @@
package android.telecom; package android.telecom;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.os.IBinder.DeathRecipient; import android.os.IBinder.DeathRecipient;
import android.os.RemoteException; import android.os.RemoteException;
@@ -318,6 +319,17 @@ final class RemoteConnectionService {
mOurConnectionServiceImpl.addRemoteExistingConnection(remoteConnction); mOurConnectionServiceImpl.addRemoteExistingConnection(remoteConnction);
} }
@Override
public void setExtras(String callId, Bundle extras) {
if (mConnectionById.containsKey(callId)) {
findConnectionForAction(callId, "setExtras")
.setExtras(extras);
} else {
findConferenceForAction(callId, "setExtras")
.setExtras(extras);
}
}
}; };
private final ConnectionServiceAdapterServant mServant = private final ConnectionServiceAdapterServant mServant =

View File

@@ -18,6 +18,7 @@ package com.android.internal.telecom;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.telecom.ConnectionRequest; import android.telecom.ConnectionRequest;
import android.telecom.DisconnectCause; import android.telecom.DisconnectCause;
import android.telecom.ParcelableConnection; import android.telecom.ParcelableConnection;
@@ -83,4 +84,6 @@ oneway interface IConnectionServiceAdapter {
void setConferenceableConnections(String callId, in List<String> conferenceableCallIds); void setConferenceableConnections(String callId, in List<String> conferenceableCallIds);
void addExistingConnection(String callId, in ParcelableConnection connection); void addExistingConnection(String callId, in ParcelableConnection connection);
void setExtras(String callId, in Bundle extras);
} }