Merge "UCE OPTIONS APIs updated"
This commit is contained in:
commit
fe4b99ee22
@ -11745,6 +11745,7 @@ package android.telephony.ims {
|
|||||||
method @Nullable public android.telephony.ims.RcsContactPresenceTuple getCapabilityTuple(@NonNull String);
|
method @Nullable public android.telephony.ims.RcsContactPresenceTuple getCapabilityTuple(@NonNull String);
|
||||||
method @NonNull public java.util.List<android.telephony.ims.RcsContactPresenceTuple> getCapabilityTuples();
|
method @NonNull public java.util.List<android.telephony.ims.RcsContactPresenceTuple> getCapabilityTuples();
|
||||||
method @NonNull public android.net.Uri getContactUri();
|
method @NonNull public android.net.Uri getContactUri();
|
||||||
|
method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
|
||||||
method public int getRequestResult();
|
method public int getRequestResult();
|
||||||
method public int getSourceType();
|
method public int getSourceType();
|
||||||
method public void writeToParcel(@NonNull android.os.Parcel, int);
|
method public void writeToParcel(@NonNull android.os.Parcel, int);
|
||||||
@ -11759,6 +11760,14 @@ package android.telephony.ims {
|
|||||||
field public static final int SOURCE_TYPE_NETWORK = 0; // 0x0
|
field public static final int SOURCE_TYPE_NETWORK = 0; // 0x0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final class RcsContactUceCapability.OptionsBuilder {
|
||||||
|
ctor public RcsContactUceCapability.OptionsBuilder(@NonNull android.net.Uri);
|
||||||
|
method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder addFeatureTag(@NonNull String);
|
||||||
|
method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder addFeatureTags(@NonNull java.util.Set<java.lang.String>);
|
||||||
|
method @NonNull public android.telephony.ims.RcsContactUceCapability build();
|
||||||
|
method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder setRequestResult(int);
|
||||||
|
}
|
||||||
|
|
||||||
public static final class RcsContactUceCapability.PresenceBuilder {
|
public static final class RcsContactUceCapability.PresenceBuilder {
|
||||||
ctor public RcsContactUceCapability.PresenceBuilder(@NonNull android.net.Uri, int, int);
|
ctor public RcsContactUceCapability.PresenceBuilder(@NonNull android.net.Uri, int, int);
|
||||||
method @NonNull public android.telephony.ims.RcsContactUceCapability.PresenceBuilder addCapabilityTuple(@NonNull android.telephony.ims.RcsContactPresenceTuple);
|
method @NonNull public android.telephony.ims.RcsContactUceCapability.PresenceBuilder addCapabilityTuple(@NonNull android.telephony.ims.RcsContactPresenceTuple);
|
||||||
@ -12052,7 +12061,7 @@ package android.telephony.ims.feature {
|
|||||||
package android.telephony.ims.stub {
|
package android.telephony.ims.stub {
|
||||||
|
|
||||||
public interface CapabilityExchangeEventListener {
|
public interface CapabilityExchangeEventListener {
|
||||||
method public void onRemoteCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.List<java.lang.String>, @NonNull android.telephony.ims.stub.CapabilityExchangeEventListener.OptionsRequestCallback) throws android.telephony.ims.ImsException;
|
method public void onRemoteCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.Set<java.lang.String>, @NonNull android.telephony.ims.stub.CapabilityExchangeEventListener.OptionsRequestCallback) throws android.telephony.ims.ImsException;
|
||||||
method public void onRequestPublishCapabilities(int) throws android.telephony.ims.ImsException;
|
method public void onRequestPublishCapabilities(int) throws android.telephony.ims.ImsException;
|
||||||
method public void onUnpublish() throws android.telephony.ims.ImsException;
|
method public void onUnpublish() throws android.telephony.ims.ImsException;
|
||||||
}
|
}
|
||||||
@ -12248,7 +12257,7 @@ package android.telephony.ims.stub {
|
|||||||
public class RcsCapabilityExchangeImplBase {
|
public class RcsCapabilityExchangeImplBase {
|
||||||
ctor public RcsCapabilityExchangeImplBase(@NonNull java.util.concurrent.Executor);
|
ctor public RcsCapabilityExchangeImplBase(@NonNull java.util.concurrent.Executor);
|
||||||
method public void publishCapabilities(@NonNull String, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.PublishResponseCallback);
|
method public void publishCapabilities(@NonNull String, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.PublishResponseCallback);
|
||||||
method public void sendOptionsCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.List<java.lang.String>, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.OptionsResponseCallback);
|
method public void sendOptionsCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.Set<java.lang.String>, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.OptionsResponseCallback);
|
||||||
method public void subscribeForCapabilities(@NonNull java.util.Collection<android.net.Uri>, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.SubscribeResponseCallback);
|
method public void subscribeForCapabilities(@NonNull java.util.Collection<android.net.Uri>, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.SubscribeResponseCallback);
|
||||||
field public static final int COMMAND_CODE_FETCH_ERROR = 3; // 0x3
|
field public static final int COMMAND_CODE_FETCH_ERROR = 3; // 0x3
|
||||||
field public static final int COMMAND_CODE_GENERIC_FAILURE = 1; // 0x1
|
field public static final int COMMAND_CODE_GENERIC_FAILURE = 1; // 0x1
|
||||||
|
@ -29,7 +29,9 @@ import java.lang.annotation.Retention;
|
|||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains the User Capability Exchange capabilities corresponding to a contact's URI.
|
* Contains the User Capability Exchange capabilities corresponding to a contact's URI.
|
||||||
@ -110,7 +112,6 @@ public final class RcsContactUceCapability implements Parcelable {
|
|||||||
/**
|
/**
|
||||||
* Builder to help construct {@link RcsContactUceCapability} instances when capabilities were
|
* Builder to help construct {@link RcsContactUceCapability} instances when capabilities were
|
||||||
* queried through SIP OPTIONS.
|
* queried through SIP OPTIONS.
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
public static final class OptionsBuilder {
|
public static final class OptionsBuilder {
|
||||||
|
|
||||||
@ -151,7 +152,7 @@ public final class RcsContactUceCapability implements Parcelable {
|
|||||||
* @param tags the list of the supported feature tags
|
* @param tags the list of the supported feature tags
|
||||||
* @return this OptionBuilder
|
* @return this OptionBuilder
|
||||||
*/
|
*/
|
||||||
public @NonNull OptionsBuilder addFeatureTags(@NonNull List<String> tags) {
|
public @NonNull OptionsBuilder addFeatureTags(@NonNull Set<String> tags) {
|
||||||
mCapabilities.mFeatureTags.addAll(tags);
|
mCapabilities.mFeatureTags.addAll(tags);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -220,7 +221,7 @@ public final class RcsContactUceCapability implements Parcelable {
|
|||||||
private @CapabilityMechanism int mCapabilityMechanism;
|
private @CapabilityMechanism int mCapabilityMechanism;
|
||||||
private @RequestResult int mRequestResult;
|
private @RequestResult int mRequestResult;
|
||||||
|
|
||||||
private final List<String> mFeatureTags = new ArrayList<>();
|
private final Set<String> mFeatureTags = new HashSet<>();
|
||||||
private final List<RcsContactPresenceTuple> mPresenceTuples = new ArrayList<>();
|
private final List<RcsContactPresenceTuple> mPresenceTuples = new ArrayList<>();
|
||||||
|
|
||||||
private RcsContactUceCapability(@NonNull Uri contactUri, @CapabilityMechanism int mechanism,
|
private RcsContactUceCapability(@NonNull Uri contactUri, @CapabilityMechanism int mechanism,
|
||||||
@ -235,7 +236,9 @@ public final class RcsContactUceCapability implements Parcelable {
|
|||||||
mCapabilityMechanism = in.readInt();
|
mCapabilityMechanism = in.readInt();
|
||||||
mSourceType = in.readInt();
|
mSourceType = in.readInt();
|
||||||
mRequestResult = in.readInt();
|
mRequestResult = in.readInt();
|
||||||
in.readStringList(mFeatureTags);
|
List<String> featureTagList = new ArrayList<>();
|
||||||
|
in.readStringList(featureTagList);
|
||||||
|
mFeatureTags.addAll(featureTagList);
|
||||||
in.readParcelableList(mPresenceTuples, RcsContactPresenceTuple.class.getClassLoader());
|
in.readParcelableList(mPresenceTuples, RcsContactPresenceTuple.class.getClassLoader());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +248,7 @@ public final class RcsContactUceCapability implements Parcelable {
|
|||||||
out.writeInt(mCapabilityMechanism);
|
out.writeInt(mCapabilityMechanism);
|
||||||
out.writeInt(mSourceType);
|
out.writeInt(mSourceType);
|
||||||
out.writeInt(mRequestResult);
|
out.writeInt(mRequestResult);
|
||||||
out.writeStringList(mFeatureTags);
|
out.writeStringList(new ArrayList<>(mFeatureTags));
|
||||||
out.writeParcelableList(mPresenceTuples, flags);
|
out.writeParcelableList(mPresenceTuples, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,7 +288,20 @@ public final class RcsContactUceCapability implements Parcelable {
|
|||||||
if (mCapabilityMechanism != CAPABILITY_MECHANISM_OPTIONS) {
|
if (mCapabilityMechanism != CAPABILITY_MECHANISM_OPTIONS) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return Collections.unmodifiableList(mFeatureTags);
|
return Collections.unmodifiableList(new ArrayList<>(mFeatureTags));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The feature tags present in the OPTIONS response from the network.
|
||||||
|
* <p>
|
||||||
|
* Note: this is only populated if {@link #getCapabilityMechanism} is
|
||||||
|
* {@link RcsContactUceCapability#CAPABILITY_MECHANISM_OPTIONS}
|
||||||
|
*/
|
||||||
|
public @NonNull Set<String> getFeatureTags() {
|
||||||
|
if (mCapabilityMechanism != CAPABILITY_MECHANISM_OPTIONS) {
|
||||||
|
return Collections.emptySet();
|
||||||
|
}
|
||||||
|
return Collections.unmodifiableSet(mFeatureTags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,7 +26,8 @@ import android.telephony.ims.RcsContactUceCapability;
|
|||||||
import android.telephony.ims.stub.CapabilityExchangeEventListener;
|
import android.telephony.ims.stub.CapabilityExchangeEventListener;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ICapabilityExchangeEventListener wrapper class to store the listener which is registered by
|
* The ICapabilityExchangeEventListener wrapper class to store the listener which is registered by
|
||||||
@ -84,7 +85,7 @@ public class CapabilityExchangeAidlWrapper implements CapabilityExchangeEventLis
|
|||||||
* request to the framework.
|
* request to the framework.
|
||||||
*/
|
*/
|
||||||
public void onRemoteCapabilityRequest(@NonNull Uri contactUri,
|
public void onRemoteCapabilityRequest(@NonNull Uri contactUri,
|
||||||
@NonNull List<String> remoteCapabilities, @NonNull OptionsRequestCallback callback)
|
@NonNull Set<String> remoteCapabilities, @NonNull OptionsRequestCallback callback)
|
||||||
throws ImsException {
|
throws ImsException {
|
||||||
ICapabilityExchangeEventListener listener = mListenerBinder;
|
ICapabilityExchangeEventListener listener = mListenerBinder;
|
||||||
if (listener == null) {
|
if (listener == null) {
|
||||||
@ -114,7 +115,8 @@ public class CapabilityExchangeAidlWrapper implements CapabilityExchangeEventLis
|
|||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
listener.onRemoteCapabilityRequest(contactUri, remoteCapabilities, internalCallback);
|
listener.onRemoteCapabilityRequest(contactUri, new ArrayList<>(remoteCapabilities),
|
||||||
|
internalCallback);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.w(LOG_TAG, "Remote capability request exception: " + e);
|
Log.w(LOG_TAG, "Remote capability request exception: " + e);
|
||||||
throw new ImsException("Remote is not available",
|
throw new ImsException("Remote is not available",
|
||||||
|
@ -47,6 +47,7 @@ import com.android.internal.telephony.util.TelephonyUtils;
|
|||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CancellationException;
|
import java.util.concurrent.CancellationException;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -145,8 +146,8 @@ public class RcsFeature extends ImsFeature {
|
|||||||
throws RemoteException {
|
throws RemoteException {
|
||||||
OptionsResponseCallback callbackWrapper = new RcsOptionsResponseAidlWrapper(callback);
|
OptionsResponseCallback callbackWrapper = new RcsOptionsResponseAidlWrapper(callback);
|
||||||
executeMethodAsync(() -> mReference.getCapabilityExchangeImplBaseInternal()
|
executeMethodAsync(() -> mReference.getCapabilityExchangeImplBaseInternal()
|
||||||
.sendOptionsCapabilityRequest(contactUri, myCapabilities, callbackWrapper),
|
.sendOptionsCapabilityRequest(contactUri, new HashSet<>(myCapabilities),
|
||||||
"sendOptionsCapabilityRequest");
|
callbackWrapper), "sendOptionsCapabilityRequest");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call the methods with a clean calling identity on the executor and wait indefinitely for
|
// Call the methods with a clean calling identity on the executor and wait indefinitely for
|
||||||
|
@ -26,7 +26,7 @@ import android.telephony.ims.RcsUceAdapter;
|
|||||||
import android.telephony.ims.feature.ImsFeature;
|
import android.telephony.ims.feature.ImsFeature;
|
||||||
import android.telephony.ims.feature.RcsFeature;
|
import android.telephony.ims.feature.RcsFeature;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The interface that is used by the framework to listen to events from the vendor RCS stack
|
* The interface that is used by the framework to listen to events from the vendor RCS stack
|
||||||
@ -98,7 +98,8 @@ public interface CapabilityExchangeEventListener {
|
|||||||
* {@link OptionsRequestCallback#onRespondToCapabilityRequestWithError}.
|
* {@link OptionsRequestCallback#onRespondToCapabilityRequestWithError}.
|
||||||
* @param contactUri The URI associated with the remote contact that is
|
* @param contactUri The URI associated with the remote contact that is
|
||||||
* requesting capabilities.
|
* requesting capabilities.
|
||||||
* @param remoteCapabilities The remote contact's capability information.
|
* @param remoteCapabilities The remote contact's capability information. The capability
|
||||||
|
* information is in the format defined in RCC.07 section 2.6.1.3.
|
||||||
* @param callback The callback of this request which is sent from the remote user.
|
* @param callback The callback of this request which is sent from the remote user.
|
||||||
* @throws ImsException If this {@link RcsCapabilityExchangeImplBase} instance is not
|
* @throws ImsException If this {@link RcsCapabilityExchangeImplBase} instance is not
|
||||||
* currently connected to the framework. This can happen if the {@link RcsFeature} is not
|
* currently connected to the framework. This can happen if the {@link RcsFeature} is not
|
||||||
@ -107,6 +108,6 @@ public interface CapabilityExchangeEventListener {
|
|||||||
* cases when the Telephony stack has crashed.
|
* cases when the Telephony stack has crashed.
|
||||||
*/
|
*/
|
||||||
void onRemoteCapabilityRequest(@NonNull Uri contactUri,
|
void onRemoteCapabilityRequest(@NonNull Uri contactUri,
|
||||||
@NonNull List<String> remoteCapabilities,
|
@NonNull Set<String> remoteCapabilities,
|
||||||
@NonNull OptionsRequestCallback callback) throws ImsException;
|
@NonNull OptionsRequestCallback callback) throws ImsException;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ import java.lang.annotation.Retention;
|
|||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -433,6 +434,7 @@ public class RcsCapabilityExchangeImplBase {
|
|||||||
* @param contactUri The URI of the remote user that we wish to get the capabilities of.
|
* @param contactUri The URI of the remote user that we wish to get the capabilities of.
|
||||||
* @param myCapabilities The capabilities of this device to send to the remote user.
|
* @param myCapabilities The capabilities of this device to send to the remote user.
|
||||||
* @param callback The callback of this request which is sent from the remote user.
|
* @param callback The callback of this request which is sent from the remote user.
|
||||||
|
* @hide
|
||||||
*/
|
*/
|
||||||
// executor used is defined in the constructor.
|
// executor used is defined in the constructor.
|
||||||
@SuppressLint("ExecutorRegistration")
|
@SuppressLint("ExecutorRegistration")
|
||||||
@ -446,4 +448,27 @@ public class RcsCapabilityExchangeImplBase {
|
|||||||
// Do not do anything, this is a stub implementation.
|
// Do not do anything, this is a stub implementation.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Push one's own capabilities to a remote user via the SIP OPTIONS presence exchange mechanism
|
||||||
|
* in order to receive the capabilities of the remote user in response.
|
||||||
|
* <p>
|
||||||
|
* The implementer must use {@link OptionsResponseCallback} to send the response of
|
||||||
|
* this query from the network back to the framework.
|
||||||
|
* @param contactUri The URI of the remote user that we wish to get the capabilities of.
|
||||||
|
* @param myCapabilities The capabilities of this device to send to the remote user.
|
||||||
|
* @param callback The callback of this request which is sent from the remote user.
|
||||||
|
*/
|
||||||
|
// executor used is defined in the constructor.
|
||||||
|
@SuppressLint("ExecutorRegistration")
|
||||||
|
public void sendOptionsCapabilityRequest(@NonNull Uri contactUri,
|
||||||
|
@NonNull Set<String> myCapabilities, @NonNull OptionsResponseCallback callback) {
|
||||||
|
// Stub - to be implemented by service
|
||||||
|
Log.w(LOG_TAG, "sendOptionsCapabilityRequest called with no implementation.");
|
||||||
|
try {
|
||||||
|
callback.onCommandError(COMMAND_CODE_NOT_SUPPORTED);
|
||||||
|
} catch (ImsException e) {
|
||||||
|
// Do not do anything, this is a stub implementation.
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user