diff options
| -rw-r--r-- | telecomm/java/android/telecom/Conference.java | 61 | ||||
| -rw-r--r-- | telecomm/java/android/telecom/Connection.java | 14 | ||||
| -rw-r--r-- | telecomm/java/android/telecom/ConnectionService.java | 6 | ||||
| -rw-r--r-- | telecomm/java/android/telecom/ParcelableConference.java | 34 |
4 files changed, 111 insertions, 4 deletions
diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java index 6000b56d191e..cd5fd971a065 100644 --- a/telecomm/java/android/telecom/Conference.java +++ b/telecomm/java/android/telecom/Conference.java @@ -95,6 +95,10 @@ public abstract class Conference extends Conferenceable { private Bundle mExtras; private Set<String> mPreviousExtraKeys; private final Object mExtrasLock = new Object(); + private Uri mAddress; + private int mAddressPresentation; + private String mCallerDisplayName; + private int mCallerDisplayNamePresentation; private final Connection.Listener mConnectionDeathListener = new Connection.Listener() { @Override @@ -987,12 +991,67 @@ public abstract class Conference extends Conferenceable { */ public final void setAddress(Uri address, int presentation) { Log.d(this, "setAddress %s", address); + mAddress = address; + mAddressPresentation = presentation; for (Listener l : mListeners) { l.onAddressChanged(this, address, presentation); } } /** + * Returns the "address" associated with the conference. This is applicable in two cases: + * <ol> + * <li>When {@link #setConferenceState(boolean)} is used to mark a conference as + * temporarily "not a conference"; we need to present the correct address in the in-call + * UI.</li> + * <li>When the conference is not hosted on the current device, we need to know the address + * information for the purpose of showing the original address to the user, as well as for + * logging to the call log.</li> + * </ol> + * @return The address of the conference, or {@code null} if not applicable. + * @hide + */ + public final Uri getAddress() { + return mAddress; + } + + /** + * Returns the address presentation associated with the conference. + * <p> + * This is applicable in two cases: + * <ol> + * <li>When {@link #setConferenceState(boolean)} is used to mark a conference as + * temporarily "not a conference"; we need to present the correct address in the in-call + * UI.</li> + * <li>When the conference is not hosted on the current device, we need to know the address + * information for the purpose of showing the original address to the user, as well as for + * logging to the call log.</li> + * </ol> + * @return The address of the conference, or {@code null} if not applicable. + * @hide + */ + public final int getAddressPresentation() { + return mAddressPresentation; + } + + /** + * @return The caller display name (CNAP). + * @hide + */ + public final String getCallerDisplayName() { + return mCallerDisplayName; + } + + /** + * @return The presentation requirements for the handle. + * See {@link TelecomManager} for valid values. + * @hide + */ + public final int getCallerDisplayNamePresentation() { + return mCallerDisplayNamePresentation; + } + + /** * Sets the caller display name (CNAP) of this {@link Conference}. Used when * {@link #setConferenceState(boolean)} is called to mark a conference temporarily as NOT a * conference. @@ -1004,6 +1063,8 @@ public abstract class Conference extends Conferenceable { */ public final void setCallerDisplayName(String callerDisplayName, int presentation) { Log.d(this, "setCallerDisplayName %s", callerDisplayName); + mCallerDisplayName = callerDisplayName; + mCallerDisplayNamePresentation = presentation; for (Listener l : mListeners) { l.onCallerDisplayNameChanged(this, callerDisplayName, presentation); } diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 28e6596ce5bb..47587c5787f4 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -424,8 +424,16 @@ public abstract class Connection extends Conferenceable { */ public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 1 << 10; + /** + * Set by the framework to indicate that a Conference or Connection is hosted by a device other + * than the current one. Used in scenarios where the conference originator is the remote device + * and the current device is a participant of that conference. + * @hide + */ + public static final int PROPERTY_REMOTELY_HOSTED = 1 << 11; + //********************************************************************************************** - // Next PROPERTY value: 1<<10 + // Next PROPERTY value: 1<<12 //********************************************************************************************** /** @@ -850,6 +858,10 @@ public abstract class Connection extends Conferenceable { builder.append(isLong ? " PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL" : " ecall"); } + if (can(properties, PROPERTY_REMOTELY_HOSTED)) { + builder.append(isLong ? " PROPERTY_REMOTELY_HOSTED" : " remote_hst"); + } + builder.append("]"); return builder.toString(); } diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index c66e92b5e099..626fcc4ddc1e 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -2056,7 +2056,11 @@ public abstract class ConnectionService extends Service { conference.getConnectTimeMillis(), conference.getConnectionStartElapsedRealTime(), conference.getStatusHints(), - conference.getExtras()); + conference.getExtras(), + conference.getAddress(), + conference.getAddressPresentation(), + conference.getCallerDisplayName(), + conference.getCallerDisplayNamePresentation()); mAdapter.addConferenceCall(id, parcelableConference); mAdapter.setVideoProvider(id, conference.getVideoProvider()); diff --git a/telecomm/java/android/telecom/ParcelableConference.java b/telecomm/java/android/telecom/ParcelableConference.java index 636e4b2ba96e..ede05943772e 100644 --- a/telecomm/java/android/telecom/ParcelableConference.java +++ b/telecomm/java/android/telecom/ParcelableConference.java @@ -16,6 +16,7 @@ package android.telecom; +import android.net.Uri; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -42,6 +43,10 @@ public final class ParcelableConference implements Parcelable { private StatusHints mStatusHints; private Bundle mExtras; private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; + private final Uri mAddress; + private final int mAddressPresentation; + private final String mCallerDisplayName; + private final int mCallerDisplayNamePresentation; public ParcelableConference( PhoneAccountHandle phoneAccount, @@ -54,7 +59,11 @@ public final class ParcelableConference implements Parcelable { long connectTimeMillis, long connectElapsedTimeMillis, StatusHints statusHints, - Bundle extras) { + Bundle extras, + Uri address, + int addressPresentation, + String callerDisplayName, + int callerDisplayNamePresentation) { mPhoneAccount = phoneAccount; mState = state; mConnectionCapabilities = connectionCapabilities; @@ -66,6 +75,10 @@ public final class ParcelableConference implements Parcelable { mStatusHints = statusHints; mExtras = extras; mConnectElapsedTimeMillis = connectElapsedTimeMillis; + mAddress = address; + mAddressPresentation = addressPresentation; + mCallerDisplayName = callerDisplayName; + mCallerDisplayNamePresentation = callerDisplayNamePresentation; } @Override @@ -134,6 +147,14 @@ public final class ParcelableConference implements Parcelable { return mExtras; } + public Uri getHandle() { + return mAddress; + } + + public int getHandlePresentation() { + return mAddressPresentation; + } + public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR = new Parcelable.Creator<ParcelableConference> () { @Override @@ -152,10 +173,15 @@ public final class ParcelableConference implements Parcelable { Bundle extras = source.readBundle(classLoader); int properties = source.readInt(); long connectElapsedTimeMillis = source.readLong(); + Uri address = source.readParcelable(classLoader); + int addressPresentation = source.readInt(); + String callerDisplayName = source.readString(); + int callerDisplayNamePresentation = source.readInt(); return new ParcelableConference(phoneAccount, state, capabilities, properties, connectionIds, videoCallProvider, videoState, connectTimeMillis, - connectElapsedTimeMillis, statusHints, extras); + connectElapsedTimeMillis, statusHints, extras, address, addressPresentation, + callerDisplayName, callerDisplayNamePresentation); } @Override @@ -185,5 +211,9 @@ public final class ParcelableConference implements Parcelable { destination.writeBundle(mExtras); destination.writeInt(mConnectionProperties); destination.writeLong(mConnectElapsedTimeMillis); + destination.writeParcelable(mAddress, 0); + destination.writeInt(mAddressPresentation); + destination.writeString(mCallerDisplayName); + destination.writeInt(mCallerDisplayNamePresentation); } } |