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

Commit 293139f3 authored by Hyunho Shin's avatar Hyunho Shin Committed by Android (Google) Code Review
Browse files

Merge changes from topic "SipDebugInfo"

* changes:
  Changed the interface between the caller and the framework for subscriptions.
  Create a PublishAttributes class that tells the result of a publish request, including sip debug information.
parents b1a19a4e 09c46841
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.ims;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.net.Uri;
import android.os.IBinder;
@@ -30,6 +32,7 @@ import android.telephony.ims.ImsException;
import android.telephony.ims.ImsService;
import android.telephony.ims.RcsUceAdapter.StackPublishTriggerType;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.ICapabilityExchangeEventListener;
import android.telephony.ims.aidl.IImsCapabilityCallback;
import android.telephony.ims.aidl.IImsConfig;
@@ -95,8 +98,7 @@ public class RcsFeatureManager implements FeatureUpdates {
         * This method must be called to notify the framework of SUCCESS (200 OK) and FAILURE (300+)
         * codes in order to keep the AOSP stack up to date.
         */
        void onPublishUpdated(int reasonCode, String reasonPhrase,
                int reasonHeaderCause, String reasonHeaderText);
        void onPublishUpdated(SipDetails details);

        /**
         * Receive a capabilities request from the remote client.
@@ -122,10 +124,9 @@ public class RcsFeatureManager implements FeatureUpdates {
                }

                @Override
                public void onPublishUpdated(int reasonCode, String reasonPhrase,
                        int reasonHeaderCause, String reasonHeaderText) {
                    mCapabilityEventCallback.forEach(callback -> callback.onPublishUpdated(
                            reasonCode, reasonPhrase, reasonHeaderCause, reasonHeaderText));
                public void onPublishUpdated(@NonNull SipDetails details) {
                    mCapabilityEventCallback.forEach(
                            callback ->callback.onPublishUpdated(details));
                }

                @Override
+20 −35
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.ims.rcs.uce;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.net.Uri;
import android.os.HandlerThread;
@@ -28,6 +29,7 @@ import android.telephony.ims.RcsContactUceCapability.CapabilityMechanism;
import android.telephony.ims.RcsUceAdapter;
import android.telephony.ims.RcsUceAdapter.PublishState;
import android.telephony.ims.RcsUceAdapter.StackPublishTriggerType;
import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.IOptionsRequestCallback;
import android.telephony.ims.aidl.IRcsUceControllerCallback;
import android.telephony.ims.aidl.IRcsUcePublishStateCallback;
@@ -212,7 +214,7 @@ public class UceController {
    private static class CachedCapabilityEvent {
        private Optional<Integer> mRequestPublishCapabilitiesEvent;
        private Optional<Boolean> mUnpublishEvent;
        private Optional<SomeArgs> mPublishUpdatedEvent;
        private Optional<SipDetails> mPublishUpdatedEvent;
        private Optional<SomeArgs> mRemoteCapabilityRequestEvent;

        public CachedCapabilityEvent() {
@@ -239,14 +241,8 @@ public class UceController {
        /**
         * Cache the publish update event triggered by the ImsService.
         */
        public synchronized void setOnPublishUpdatedEvent(int reasonCode, String reasonPhrase,
                int reasonHeaderCause, String reasonHeaderText) {
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = reasonCode;
            args.arg2 = reasonPhrase;
            args.arg3 = reasonHeaderCause;
            args.arg4 = reasonHeaderText;
            mPublishUpdatedEvent = Optional.of(args);
        public synchronized void setOnPublishUpdatedEvent(SipDetails details) {
            mPublishUpdatedEvent = Optional.of(details);
        }

        /**
@@ -272,7 +268,7 @@ public class UceController {
        }

        /** @Return the cached pubilsh update event */
        public synchronized Optional<SomeArgs> getPublishUpdatedEvent() {
        public synchronized Optional<SipDetails> getPublishUpdatedEvent() {
            return mPublishUpdatedEvent;
        }

@@ -285,7 +281,6 @@ public class UceController {
        public synchronized void clear() {
            mRequestPublishCapabilitiesEvent = Optional.empty();
            mUnpublishEvent = Optional.empty();
            mPublishUpdatedEvent.ifPresent(args -> args.recycle());
            mPublishUpdatedEvent = Optional.empty();
            mRemoteCapabilityRequestEvent.ifPresent(args -> args.recycle());
            mRemoteCapabilityRequestEvent = Optional.empty();
@@ -489,14 +484,9 @@ public class UceController {
        Optional<Boolean> unpublishEvent = mCachedCapabilityEvent.getUnpublishEvent();
        unpublishEvent.ifPresent(unpublish -> onUnpublish());

        Optional<SomeArgs> publishUpdatedEvent = mCachedCapabilityEvent.getPublishUpdatedEvent();
        publishUpdatedEvent.ifPresent(args -> {
            int reasonCode = (Integer) args.arg1;
            String reasonPhrase = (String) args.arg2;
            int reasonHeaderCause = (Integer) args.arg3;
            String reasonHeaderText = (String) args.arg4;
            onPublishUpdated(reasonCode, reasonPhrase, reasonHeaderCause, reasonHeaderText);
        });
        Optional<SipDetails> publishUpdatedEvent = mCachedCapabilityEvent.getPublishUpdatedEvent();
        publishUpdatedEvent.ifPresent(details ->
                onPublishUpdated(details));

        Optional<SomeArgs> remoteRequest = mCachedCapabilityEvent.getRemoteCapabilityRequestEvent();
        remoteRequest.ifPresent(args -> {
@@ -606,15 +596,12 @@ public class UceController {
                }

                @Override
                public void onPublishUpdated(int reasonCode, String reasonPhrase,
                        int reasonHeaderCause, String reasonHeaderText) {
                public void onPublishUpdated(@NonNull SipDetails details) {
                    if (isRcsConnecting()) {
                        mCachedCapabilityEvent.setOnPublishUpdatedEvent(reasonCode, reasonPhrase,
                                reasonHeaderCause, reasonHeaderText);
                        mCachedCapabilityEvent.setOnPublishUpdatedEvent(details);
                        return;
                    }
                    UceController.this.onPublishUpdated(reasonCode, reasonPhrase,
                            reasonHeaderCause, reasonHeaderText);
                    UceController.this.onPublishUpdated(details);
                }

                @Override
@@ -648,14 +635,14 @@ public class UceController {
        if (uriList == null || uriList.isEmpty() || c == null) {
            logw("requestCapabilities: parameter is empty");
            if (c != null) {
                c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
                c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
            }
            return;
        }

        if (isUnavailable()) {
            logw("requestCapabilities: controller is unavailable");
            c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
            c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
            return;
        }

@@ -668,7 +655,7 @@ public class UceController {
            long retryAfterMillis = deviceStateResult.getRequestRetryAfterMillis();
            logw("requestCapabilities: The device is disallowed, deviceState= " + deviceState +
                    ", errorCode=" + errorCode + ", retryAfterMillis=" + retryAfterMillis);
            c.onError(errorCode, retryAfterMillis);
            c.onError(errorCode, retryAfterMillis, null);
            return;
        }

@@ -687,14 +674,14 @@ public class UceController {
        if (uri == null || c == null) {
            logw("requestAvailability: parameter is empty");
            if (c != null) {
                c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
                c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
            }
            return;
        }

        if (isUnavailable()) {
            logw("requestAvailability: controller is unavailable");
            c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
            c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
            return;
        }

@@ -707,7 +694,7 @@ public class UceController {
            long retryAfterMillis = deviceStateResult.getRequestRetryAfterMillis();
            logw("requestAvailability: The device is disallowed, deviceState= " + deviceState +
                    ", errorCode=" + errorCode + ", retryAfterMillis=" + retryAfterMillis);
            c.onError(errorCode, retryAfterMillis);
            c.onError(errorCode, retryAfterMillis, null);
            return;
        }

@@ -740,11 +727,9 @@ public class UceController {
     * This method is triggered by the ImsService to notify framework that the device's
     * publish status has been changed.
     */
    public void onPublishUpdated(int reasonCode, String reasonPhrase,
            int reasonHeaderCause, String reasonHeaderText) {
    public void onPublishUpdated(@NonNull SipDetails details) {
        logi("onPublishUpdated");
        mPublishController.onPublishUpdated(reasonCode, reasonPhrase,
                reasonHeaderCause, reasonHeaderText);
        mPublishController.onPublishUpdated(details);
    }

    /**
+3 −2
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.telephony.CarrierConfigManager;
import android.telephony.ims.ImsManager;
import android.telephony.ims.ImsRcsManager;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.IRcsUceControllerCallback;
import android.util.Log;

@@ -142,12 +143,12 @@ public final class EabBulkCapabilityUpdater {
        }

        @Override
        public void onComplete() {
        public void onComplete(SipDetails details) {
            Log.d(TAG, "onComplete");
        }

        @Override
        public void onError(int errorCode, long retryAfterMilliseconds) {
        public void onError(int errorCode, long retryAfterMilliseconds, SipDetails details) {
            Log.d(TAG, "Refresh capabilities failed. Error code: " + errorCode
                    + ", retryAfterMilliseconds: " + retryAfterMilliseconds);
            if (retryAfterMilliseconds != 0) {
+13 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.ims.rcs.uce.util.UceUtils;
import com.android.internal.annotations.VisibleForTesting;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
@@ -484,6 +485,18 @@ public class DeviceCapabilityInfo {
        mPendingPublishCapabilities = null;
    }

    public List<RcsContactPresenceTuple> getLastSuccessfulPresenceTuplesWithoutContactUri() {
        List<RcsContactPresenceTuple> presenceTuples = new ArrayList<>();
        if (mLastSuccessfulCapabilities.isEmpty()) {
            return presenceTuples;
        }

        for (ServiceDescription capability : mLastSuccessfulCapabilities) {
            presenceTuples.add(capability.getTupleBuilder().build());
        }
        return presenceTuples;
    }

    @VisibleForTesting
    public void addLastSuccessfulServiceDescription(ServiceDescription capability) {
        mLastSuccessfulCapabilities.add(capability);
+5 −4
Original line number Diff line number Diff line
@@ -18,9 +18,11 @@ package com.android.ims.rcs.uce.presence.publish;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsContactUceCapability.CapabilityMechanism;
import android.telephony.ims.RcsUceAdapter.PublishState;
import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.IRcsUcePublishStateCallback;

import com.android.ims.rcs.uce.ControllerBase;
@@ -138,7 +140,8 @@ public interface PublishController extends ControllerBase {
        /**
         * Update the publish request result.
         */
        void updatePublishRequestResult(int publishState, Instant updatedTimestamp, String pidfXml);
        void updatePublishRequestResult(int publishState, Instant updatedTimestamp, String pidfXml,
                SipDetails details);

        /**
         * Update the value of the publish throttle.
@@ -208,9 +211,7 @@ public interface PublishController extends ControllerBase {
    /**
     * Notify that the device's publish status have been changed.
     */
    void onPublishUpdated(int reasonCode, String reasonPhrase,
            int reasonHeaderCause, String reasonHeaderText);

    void onPublishUpdated(@NonNull SipDetails details);
    /**
     * Retrieve the device's capabilities.
     */
Loading