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

Commit df6cf8ab authored by James Lin's avatar James Lin Committed by Automerger Merge Worker
Browse files

Merge "UCE API change: Remove the unused RCS UCE APIs" am: 29c9a7a9 am: 49a01d8a am: 46935546

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1629268

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ie0ce1872304064ba0af777ce1970ac580058d91b
parents 1ef8f533 46935546
Loading
Loading
Loading
Loading
+0 −25
Original line number Original line Diff line number Diff line
@@ -25,7 +25,6 @@ import android.os.Build;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.Log;


import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.RetentionPolicy;
@@ -385,22 +384,6 @@ public final class RcsContactPresenceTuple implements Parcelable {
            return this;
            return this;
        }
        }


        /**
         * The optional timestamp indicating the data and time of the status change of this tuple.
         * Per RFC3863 section 4.1.7, the timestamp is formatted as an IMPP datetime format
         * string per RFC3339.
         * @hide
         */
        public @NonNull Builder setTimestamp(@NonNull String timestamp) {
            try {
                mPresenceTuple.mTimestamp =
                        DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(timestamp, Instant::from);
            } catch (DateTimeParseException e) {
                Log.d(LOG_TAG, "Parse timestamp failed " + e);
            }
            return this;
        }

        /**
        /**
         * The optional timestamp indicating the data and time of the status change of this tuple.
         * The optional timestamp indicating the data and time of the status change of this tuple.
         * Per RFC3863 section 4.1.7, the timestamp is formatted as an IMPP datetime format
         * Per RFC3863 section 4.1.7, the timestamp is formatted as an IMPP datetime format
@@ -534,14 +517,6 @@ public final class RcsContactPresenceTuple implements Parcelable {
        return mContactUri;
        return mContactUri;
    }
    }


    /**
     * @return the timestamp element contained in the tuple if it exists
     * @hide
     */
    public @Nullable String getTimestamp() {
        return (mTimestamp == null) ? null : mTimestamp.toString();
    }

    /** @return the timestamp element contained in the tuple if it exists */
    /** @return the timestamp element contained in the tuple if it exists */
    public @Nullable Instant getTime() {
    public @Nullable Instant getTime() {
        return mTimestamp;
        return mTimestamp;
+1 −89
Original line number Original line Diff line number Diff line
@@ -439,8 +439,7 @@ public class RcsUceAdapter {


        /**
        /**
         * The pending request has resulted in an error and may need to be retried, depending on the
         * The pending request has resulted in an error and may need to be retried, depending on the
         * error code. The callback {@link #onCapabilitiesReceived(List)}
         * error code.
         * for each contacts is required to be called before {@link #onError} is called.
         * @param errorCode The reason for the framework being unable to process the request.
         * @param errorCode The reason for the framework being unable to process the request.
         * @param retryIntervalMillis The time in milliseconds the requesting application should
         * @param retryIntervalMillis The time in milliseconds the requesting application should
         * wait before retrying, if non-zero.
         * wait before retrying, if non-zero.
@@ -464,93 +463,6 @@ public class RcsUceAdapter {
        mPublishStateCallbacks = new HashMap<>();
        mPublishStateCallbacks = new HashMap<>();
    }
    }


    /**
     * Request the User Capability Exchange capabilities for one or more contacts.
     * <p>
     * This will return the cached capabilities of the contact and will not perform a capability
     * poll on the network unless there are contacts being queried with stale information.
     * <p>
     * Be sure to check the availability of this feature using
     * {@link ImsRcsManager#isAvailable(int, int)} and ensuring
     * {@link RcsFeature.RcsImsCapabilities#CAPABILITY_TYPE_OPTIONS_UCE} or
     * {@link RcsFeature.RcsImsCapabilities#CAPABILITY_TYPE_PRESENCE_UCE} is enabled or else
     * this operation will fail with {@link #ERROR_NOT_AVAILABLE} or {@link #ERROR_NOT_ENABLED}.
     *
     * @param contactNumbers A list of numbers that the capabilities are being requested for.
     * @param executor The executor that will be used when the request is completed and the
     *         {@link CapabilitiesCallback} is called.
     * @param c A one-time callback for when the request for capabilities completes or there is an
     *         error processing the request.
     * @throws ImsException if the subscription associated with this instance of
     * {@link RcsUceAdapter} is valid, but the ImsService associated with the subscription is not
     * available. This can happen if the ImsService has crashed, for example, or if the subscription
     * becomes inactive. See {@link ImsException#getCode()} for more information on the error codes.
     * @hide
     */
    @RequiresPermission(allOf = {Manifest.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE,
            Manifest.permission.READ_CONTACTS})
    public void requestCapabilities(@NonNull List<Uri> contactNumbers,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull CapabilitiesCallback c) throws ImsException {
        if (c == null) {
            throw new IllegalArgumentException("Must include a non-null CapabilitiesCallback.");
        }
        if (executor == null) {
            throw new IllegalArgumentException("Must include a non-null Executor.");
        }
        if (contactNumbers == null) {
            throw new IllegalArgumentException("Must include non-null contact number list.");
        }

        IImsRcsController imsRcsController = getIImsRcsController();
        if (imsRcsController == null) {
            Log.e(TAG, "requestCapabilities: IImsRcsController is null");
            throw new ImsException("Can not find remote IMS service",
                    ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
        }

        IRcsUceControllerCallback internalCallback = new IRcsUceControllerCallback.Stub() {
            @Override
            public void onCapabilitiesReceived(List<RcsContactUceCapability> contactCapabilities) {
                final long callingIdentity = Binder.clearCallingIdentity();
                try {
                    executor.execute(() -> c.onCapabilitiesReceived(contactCapabilities));
                } finally {
                    restoreCallingIdentity(callingIdentity);
                }
            }
            @Override
            public void onComplete() {
                final long callingIdentity = Binder.clearCallingIdentity();
                try {
                    executor.execute(() -> c.onComplete());
                } finally {
                    restoreCallingIdentity(callingIdentity);
                }
            }
            @Override
            public void onError(int errorCode, long retryAfterMilliseconds) {
                final long callingIdentity = Binder.clearCallingIdentity();
                try {
                    executor.execute(() -> c.onError(errorCode, retryAfterMilliseconds));
                } finally {
                    restoreCallingIdentity(callingIdentity);
                }
            }
        };

        try {
            imsRcsController.requestCapabilities(mSubId, mContext.getOpPackageName(),
                    mContext.getAttributionTag(), contactNumbers, internalCallback);
        } catch (ServiceSpecificException e) {
            throw new ImsException(e.toString(), e.errorCode);
        } catch (RemoteException e) {
            Log.e(TAG, "Error calling IImsRcsController#requestCapabilities", e);
            throw new ImsException("Remote IMS Service is not available",
                    ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
        }
    }

    /**
    /**
     * Request the User Capability Exchange capabilities for one or more contacts.
     * Request the User Capability Exchange capabilities for one or more contacts.
     * <p>
     * <p>
+0 −35
Original line number Original line Diff line number Diff line
@@ -369,41 +369,6 @@ public class RcsCapabilityExchangeImplBase {
        mBinderExecutor = executor;
        mBinderExecutor = executor;
    }
    }


    /**
     * The user capabilities of one or multiple contacts have been requested by the framework.
     * <p>
     * The implementer must follow up this call with an
     * {@link SubscribeResponseCallback#onCommandError} call to indicate this operation has failed.
     * The response from the network to the SUBSCRIBE request must be sent back to the framework
     * using {@link SubscribeResponseCallback#onNetworkResponse(int, String)}.
     * As NOTIFY requests come in from the network, the requested contact’s capabilities should be
     * sent back to the framework using
     * {@link SubscribeResponseCallback#onNotifyCapabilitiesUpdate(List<String>}) and
     * {@link SubscribeResponseCallback#onResourceTerminated(List<Pair<Uri, String>>)}
     * should be called with the presence information for the contacts specified.
     * <p>
     * Once the subscription is terminated,
     * {@link SubscribeResponseCallback#onTerminated(String, long)} must be called for the
     * framework to finish listening for NOTIFY responses.
     *
     * @param uris A {@link List} of the {@link Uri}s that the framework is requesting the UCE
     * capabilities for.
     * @param cb The callback of the subscribe request.
     * @hide
     */
    // executor used is defined in the constructor.
    @SuppressLint("ExecutorRegistration")
    public void subscribeForCapabilities(@NonNull List<Uri> uris,
            @NonNull SubscribeResponseCallback cb) {
        // Stub - to be implemented by service
        Log.w(LOG_TAG, "subscribeForCapabilities called with no implementation.");
        try {
            cb.onCommandError(COMMAND_CODE_NOT_SUPPORTED);
        } catch (ImsException e) {
            // Do not do anything, this is a stub implementation.
        }
    }

    /**
    /**
     * The user capabilities of one or multiple contacts have been requested by the framework.
     * The user capabilities of one or multiple contacts have been requested by the framework.
     * <p>
     * <p>