summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--telecomm/java/android/telecom/Conference.java61
-rw-r--r--telecomm/java/android/telecom/Connection.java14
-rw-r--r--telecomm/java/android/telecom/ConnectionService.java6
-rw-r--r--telecomm/java/android/telecom/ParcelableConference.java34
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);
}
}