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

Commit 09c46841 authored by Hyunho's avatar Hyunho
Browse files

Changed the interface between the caller and the framework for subscriptions.

In order to more debug issues during the subscription, the caller should have access to the sip information.
To access the sip information, using the created SipDetails class.
The existing interface change to set the SipDetails class as a parameter.

Bug: b/238192079
Test: cts CtsTelephonyTestCases:RcsUceAdapterTest
Test: atest UceControllerTest SubscribeCoordinatorTest SubscribeRequestTest UceRequestManagerTest
Change-Id: Iadb98971b7b12911d079bc4a9c99f2cd7e7ee78e
parent 31f3630a
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -635,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;
        }

@@ -655,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;
        }

@@ -674,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;
        }

@@ -694,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;
        }

+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) {
+28 −6
Original line number Diff line number Diff line
@@ -16,11 +16,14 @@

package com.android.ims.rcs.uce.request;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.Uri;
import android.telephony.ims.RcsContactTerminatedReason;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsUceAdapter;
import android.telephony.ims.RcsUceAdapter.ErrorCode;
import android.telephony.ims.SipDetails;
import android.telephony.ims.stub.RcsCapabilityExchangeImplBase;
import android.telephony.ims.stub.RcsCapabilityExchangeImplBase.CommandCode;
import android.text.TextUtils;
@@ -85,6 +88,9 @@ public class CapabilityRequestResponse {
    // The collection to record whether the request contacts have received the capabilities updated.
    private Map<Uri, Boolean> mContactCapsReceived;

    // The SIP detail information of the network response.
    private Optional<SipDetails> mSipDetails;

    public CapabilityRequestResponse() {
        mRequestInternalError = Optional.empty();
        mCommandError = Optional.empty();
@@ -99,6 +105,7 @@ public class CapabilityRequestResponse {
        mUpdatedCapabilityList = new ArrayList<>();
        mRemoteCaps = new HashSet<>();
        mContactCapsReceived = new HashMap<>();
        mSipDetails = Optional.empty();
    }

    /**
@@ -169,12 +176,20 @@ public class CapabilityRequestResponse {
    /**
     * Set the network response of this request which is sent by the network.
     */
    public synchronized void setNetworkResponseCode(int sipCode, String reasonPhrase,
            int reasonHeaderCause, String reasonHeaderText) {
        mNetworkRespSipCode = Optional.of(sipCode);
        mReasonPhrase = Optional.ofNullable(reasonPhrase);
        mReasonHeaderCause = Optional.of(reasonHeaderCause);
        mReasonHeaderText = Optional.ofNullable(reasonHeaderText);
    public synchronized void setSipDetails(@NonNull SipDetails details) {
        setNetworkResponseCode(details.getResponseCode(), details.getResponsePhrase());
        if (details.getReasonHeaderCause() != 0) {
            mReasonHeaderCause = Optional.of(details.getReasonHeaderCause());
        } else {
            mReasonHeaderCause = Optional.empty();
        }
        if (TextUtils.isEmpty(details.getReasonHeaderText())) {
            mReasonHeaderText = Optional.empty();
        } else {
            mReasonHeaderText = Optional.ofNullable(details.getReasonHeaderText());
        }

        mSipDetails = Optional.ofNullable(details);
    }

    // Get the sip code of the network response.
@@ -238,6 +253,13 @@ public class CapabilityRequestResponse {
        return mRetryAfterMillis.orElse(0L);
    }

    /**
     * Retrieve the SIP information which received from the network.
     */
    public Optional<SipDetails> getSipDetails() {
        return mSipDetails;
    }

    /**
     * Add the capabilities which are retrieved from the cache.
     */
+2 −2
Original line number Diff line number Diff line
@@ -315,7 +315,7 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
    private void triggerCompletedCallback() {
        try {
            logd("triggerCompletedCallback");
            mCapabilitiesCallback.onComplete();
            mCapabilitiesCallback.onComplete(null);
        } catch (RemoteException e) {
            logw("triggerCompletedCallback exception: " + e);
        } finally {
@@ -329,7 +329,7 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
    private void triggerErrorCallback(int errorCode, long retryAfterMillis) {
        try {
            logd("triggerErrorCallback: errorCode=" + errorCode + ", retry=" + retryAfterMillis);
            mCapabilitiesCallback.onError(errorCode, retryAfterMillis);
            mCapabilitiesCallback.onError(errorCode, retryAfterMillis, null);
        } catch (RemoteException e) {
            logw("triggerErrorCallback exception: " + e);
        } finally {
+7 −25
Original line number Diff line number Diff line
@@ -17,11 +17,13 @@
package com.android.ims.rcs.uce.request;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.Uri;
import android.os.RemoteException;
import android.telephony.ims.RcsContactTerminatedReason;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsUceAdapter;
import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.ISubscribeResponseCallback;
import android.telephony.ims.stub.RcsCapabilityExchangeImplBase.CommandCode;

@@ -53,14 +55,8 @@ public class SubscribeRequest extends CapabilityRequest {
                    SubscribeRequest.this.onCommandError(code);
                }
                @Override
                public void onNetworkResponse(int code, String reason) {
                    SubscribeRequest.this.onNetworkResponse(code, reason);
                }
                @Override
                public void onNetworkRespHeader(int code, String reasonPhrase,
                        int reasonHeaderCause, String reasonHeaderText) {
                    SubscribeRequest.this.onNetworkResponse(code, reasonPhrase, reasonHeaderCause,
                            reasonHeaderText);
                public void onNetworkResponse(@NonNull SipDetails details) {
                    SubscribeRequest.this.onNetworkResponse(details);
                }
                @Override
                public void onNotifyCapabilitiesUpdate(List<String> pidfXmls) {
@@ -135,28 +131,14 @@ public class SubscribeRequest extends CapabilityRequest {
    }

    // Receive the network response callback which is triggered by ISubscribeResponseCallback.
    private void onNetworkResponse(int sipCode, String reason) {
        logd("onNetworkResponse: code=" + sipCode + ", reason=" + reason);
        if (mIsFinished) {
            logw("onNetworkResponse: request is already finished");
            return;
        }
        mRequestResponse.setNetworkResponseCode(sipCode, reason);
        mRequestManagerCallback.notifyNetworkResponse(mCoordinatorId, mTaskId);
    }
    private void onNetworkResponse(@NonNull SipDetails details) {
        logd("onNetworkResponse: sip details=" + details.toString());

    // Receive the network response callback which is triggered by ISubscribeResponseCallback.
    private void onNetworkResponse(int sipCode, String reasonPhrase,
        int reasonHeaderCause, String reasonHeaderText) {
        logd("onNetworkResponse: code=" + sipCode + ", reasonPhrase=" + reasonPhrase +
                ", reasonHeaderCause=" + reasonHeaderCause +
                ", reasonHeaderText=" + reasonHeaderText);
        if (mIsFinished) {
            logw("onNetworkResponse: request is already finished");
            return;
        }
        mRequestResponse.setNetworkResponseCode(sipCode, reasonPhrase, reasonHeaderCause,
                reasonHeaderText);
        mRequestResponse.setSipDetails(details);
        mRequestManagerCallback.notifyNetworkResponse(mCoordinatorId, mTaskId);
    }

Loading