Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7eb2671a authored by James.cf Lin's avatar James.cf Lin
Browse files

UCE OPTIONS APIs updated

1. Expose OPTIONS APIs in the RcsContactUceCapability.
2. Update the feature tags type from List to Set.

Bug: 181175307
Test: atest RcsUceAdapterTest ImsServiceTest RcsContactUceCapabilityTest
Merged-In: Id4499d7f9f6eb2b572902d76129f9ad388354d9f
Change-Id: Id4499d7f9f6eb2b572902d76129f9ad388354d9f
parent 003db3a5
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -11745,6 +11745,7 @@ package android.telephony.ims {
    method @Nullable public android.telephony.ims.RcsContactPresenceTuple getCapabilityTuple(@NonNull String);
    method @NonNull public java.util.List<android.telephony.ims.RcsContactPresenceTuple> getCapabilityTuples();
    method @NonNull public android.net.Uri getContactUri();
    method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
    method public int getRequestResult();
    method public int getSourceType();
    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
  }
  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 {
    ctor public RcsContactUceCapability.PresenceBuilder(@NonNull android.net.Uri, int, int);
    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 {
  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 onUnpublish() throws android.telephony.ims.ImsException;
  }
@@ -12248,7 +12257,7 @@ package android.telephony.ims.stub {
  public class RcsCapabilityExchangeImplBase {
    ctor public RcsCapabilityExchangeImplBase(@NonNull java.util.concurrent.Executor);
    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);
    field public static final int COMMAND_CODE_FETCH_ERROR = 3; // 0x3
    field public static final int COMMAND_CODE_GENERIC_FAILURE = 1; // 0x1
+22 −6
Original line number Diff line number Diff line
@@ -29,7 +29,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 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
     * queried through SIP OPTIONS.
     * @hide
     */
    public static final class OptionsBuilder {

@@ -151,7 +152,7 @@ public final class RcsContactUceCapability implements Parcelable {
         * @param tags the list of the supported feature tags
         * @return this OptionBuilder
         */
        public @NonNull OptionsBuilder addFeatureTags(@NonNull List<String> tags) {
        public @NonNull OptionsBuilder addFeatureTags(@NonNull Set<String> tags) {
            mCapabilities.mFeatureTags.addAll(tags);
            return this;
        }
@@ -220,7 +221,7 @@ public final class RcsContactUceCapability implements Parcelable {
    private @CapabilityMechanism int mCapabilityMechanism;
    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 RcsContactUceCapability(@NonNull Uri contactUri, @CapabilityMechanism int mechanism,
@@ -235,7 +236,9 @@ public final class RcsContactUceCapability implements Parcelable {
        mCapabilityMechanism = in.readInt();
        mSourceType = 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());
    }

@@ -245,7 +248,7 @@ public final class RcsContactUceCapability implements Parcelable {
        out.writeInt(mCapabilityMechanism);
        out.writeInt(mSourceType);
        out.writeInt(mRequestResult);
        out.writeStringList(mFeatureTags);
        out.writeStringList(new ArrayList<>(mFeatureTags));
        out.writeParcelableList(mPresenceTuples, flags);
    }

@@ -285,7 +288,20 @@ public final class RcsContactUceCapability implements Parcelable {
        if (mCapabilityMechanism != CAPABILITY_MECHANISM_OPTIONS) {
            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);
    }

    /**
+5 −3
Original line number Diff line number Diff line
@@ -26,7 +26,8 @@ import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.stub.CapabilityExchangeEventListener;
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
@@ -84,7 +85,7 @@ public class CapabilityExchangeAidlWrapper implements CapabilityExchangeEventLis
     * request to the framework.
     */
    public void onRemoteCapabilityRequest(@NonNull Uri contactUri,
            @NonNull List<String> remoteCapabilities, @NonNull OptionsRequestCallback callback)
            @NonNull Set<String> remoteCapabilities, @NonNull OptionsRequestCallback callback)
            throws ImsException {
        ICapabilityExchangeEventListener listener = mListenerBinder;
        if (listener == null) {
@@ -114,7 +115,8 @@ public class CapabilityExchangeAidlWrapper implements CapabilityExchangeEventLis
        };

        try {
            listener.onRemoteCapabilityRequest(contactUri, remoteCapabilities, internalCallback);
            listener.onRemoteCapabilityRequest(contactUri, new ArrayList<>(remoteCapabilities),
                    internalCallback);
        } catch (RemoteException e) {
            Log.w(LOG_TAG, "Remote capability request exception: " + e);
            throw new ImsException("Remote is not available",
+3 −2
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.internal.telephony.util.TelephonyUtils;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.HashSet;
import java.util.List;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
@@ -145,8 +146,8 @@ public class RcsFeature extends ImsFeature {
                throws RemoteException {
            OptionsResponseCallback callbackWrapper = new RcsOptionsResponseAidlWrapper(callback);
            executeMethodAsync(() -> mReference.getCapabilityExchangeImplBaseInternal()
                    .sendOptionsCapabilityRequest(contactUri, myCapabilities, callbackWrapper),
                    "sendOptionsCapabilityRequest");
                    .sendOptionsCapabilityRequest(contactUri, new HashSet<>(myCapabilities),
                        callbackWrapper), "sendOptionsCapabilityRequest");
        }

        // Call the methods with a clean calling identity on the executor and wait indefinitely for
+4 −3
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import android.telephony.ims.RcsUceAdapter;
import android.telephony.ims.feature.ImsFeature;
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
@@ -98,7 +98,8 @@ public interface CapabilityExchangeEventListener {
     * {@link OptionsRequestCallback#onRespondToCapabilityRequestWithError}.
     * @param contactUri The URI associated with the remote contact that is
     * 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.
     * @throws ImsException If this {@link RcsCapabilityExchangeImplBase} instance 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.
     */
    void onRemoteCapabilityRequest(@NonNull Uri contactUri,
            @NonNull List<String> remoteCapabilities,
            @NonNull Set<String> remoteCapabilities,
            @NonNull OptionsRequestCallback callback) throws ImsException;
}
Loading