Merge "Enhancements to conference for non-conference host scenarios." into qt-dev

This commit is contained in:
TreeHugger Robot
2019-05-31 22:42:43 +00:00
committed by Android (Google) Code Review
4 changed files with 111 additions and 4 deletions

View File

@@ -95,6 +95,10 @@ public abstract class Conference extends Conferenceable {
private Bundle mExtras; private Bundle mExtras;
private Set<String> mPreviousExtraKeys; private Set<String> mPreviousExtraKeys;
private final Object mExtrasLock = new Object(); 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() { private final Connection.Listener mConnectionDeathListener = new Connection.Listener() {
@Override @Override
@@ -987,11 +991,66 @@ public abstract class Conference extends Conferenceable {
*/ */
public final void setAddress(Uri address, int presentation) { public final void setAddress(Uri address, int presentation) {
Log.d(this, "setAddress %s", address); Log.d(this, "setAddress %s", address);
mAddress = address;
mAddressPresentation = presentation;
for (Listener l : mListeners) { for (Listener l : mListeners) {
l.onAddressChanged(this, address, presentation); 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 * 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 * {@link #setConferenceState(boolean)} is called to mark a conference temporarily as NOT a
@@ -1004,6 +1063,8 @@ public abstract class Conference extends Conferenceable {
*/ */
public final void setCallerDisplayName(String callerDisplayName, int presentation) { public final void setCallerDisplayName(String callerDisplayName, int presentation) {
Log.d(this, "setCallerDisplayName %s", callerDisplayName); Log.d(this, "setCallerDisplayName %s", callerDisplayName);
mCallerDisplayName = callerDisplayName;
mCallerDisplayNamePresentation = presentation;
for (Listener l : mListeners) { for (Listener l : mListeners) {
l.onCallerDisplayNameChanged(this, callerDisplayName, presentation); l.onCallerDisplayNameChanged(this, callerDisplayName, presentation);
} }

View File

@@ -424,8 +424,16 @@ public abstract class Connection extends Conferenceable {
*/ */
public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 1 << 10; 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"); 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("]"); builder.append("]");
return builder.toString(); return builder.toString();
} }

View File

@@ -2056,7 +2056,11 @@ public abstract class ConnectionService extends Service {
conference.getConnectTimeMillis(), conference.getConnectTimeMillis(),
conference.getConnectionStartElapsedRealTime(), conference.getConnectionStartElapsedRealTime(),
conference.getStatusHints(), conference.getStatusHints(),
conference.getExtras()); conference.getExtras(),
conference.getAddress(),
conference.getAddressPresentation(),
conference.getCallerDisplayName(),
conference.getCallerDisplayNamePresentation());
mAdapter.addConferenceCall(id, parcelableConference); mAdapter.addConferenceCall(id, parcelableConference);
mAdapter.setVideoProvider(id, conference.getVideoProvider()); mAdapter.setVideoProvider(id, conference.getVideoProvider());

View File

@@ -16,6 +16,7 @@
package android.telecom; package android.telecom;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -42,6 +43,10 @@ public final class ParcelableConference implements Parcelable {
private StatusHints mStatusHints; private StatusHints mStatusHints;
private Bundle mExtras; private Bundle mExtras;
private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; 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( public ParcelableConference(
PhoneAccountHandle phoneAccount, PhoneAccountHandle phoneAccount,
@@ -54,7 +59,11 @@ public final class ParcelableConference implements Parcelable {
long connectTimeMillis, long connectTimeMillis,
long connectElapsedTimeMillis, long connectElapsedTimeMillis,
StatusHints statusHints, StatusHints statusHints,
Bundle extras) { Bundle extras,
Uri address,
int addressPresentation,
String callerDisplayName,
int callerDisplayNamePresentation) {
mPhoneAccount = phoneAccount; mPhoneAccount = phoneAccount;
mState = state; mState = state;
mConnectionCapabilities = connectionCapabilities; mConnectionCapabilities = connectionCapabilities;
@@ -66,6 +75,10 @@ public final class ParcelableConference implements Parcelable {
mStatusHints = statusHints; mStatusHints = statusHints;
mExtras = extras; mExtras = extras;
mConnectElapsedTimeMillis = connectElapsedTimeMillis; mConnectElapsedTimeMillis = connectElapsedTimeMillis;
mAddress = address;
mAddressPresentation = addressPresentation;
mCallerDisplayName = callerDisplayName;
mCallerDisplayNamePresentation = callerDisplayNamePresentation;
} }
@Override @Override
@@ -134,6 +147,14 @@ public final class ParcelableConference implements Parcelable {
return mExtras; return mExtras;
} }
public Uri getHandle() {
return mAddress;
}
public int getHandlePresentation() {
return mAddressPresentation;
}
public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR = public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR =
new Parcelable.Creator<ParcelableConference> () { new Parcelable.Creator<ParcelableConference> () {
@Override @Override
@@ -152,10 +173,15 @@ public final class ParcelableConference implements Parcelable {
Bundle extras = source.readBundle(classLoader); Bundle extras = source.readBundle(classLoader);
int properties = source.readInt(); int properties = source.readInt();
long connectElapsedTimeMillis = source.readLong(); 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, return new ParcelableConference(phoneAccount, state, capabilities, properties,
connectionIds, videoCallProvider, videoState, connectTimeMillis, connectionIds, videoCallProvider, videoState, connectTimeMillis,
connectElapsedTimeMillis, statusHints, extras); connectElapsedTimeMillis, statusHints, extras, address, addressPresentation,
callerDisplayName, callerDisplayNamePresentation);
} }
@Override @Override
@@ -185,5 +211,9 @@ public final class ParcelableConference implements Parcelable {
destination.writeBundle(mExtras); destination.writeBundle(mExtras);
destination.writeInt(mConnectionProperties); destination.writeInt(mConnectionProperties);
destination.writeLong(mConnectElapsedTimeMillis); destination.writeLong(mConnectElapsedTimeMillis);
destination.writeParcelable(mAddress, 0);
destination.writeInt(mAddressPresentation);
destination.writeString(mCallerDisplayName);
destination.writeInt(mCallerDisplayNamePresentation);
} }
} }