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

Commit 9724882c authored by James.cf Lin's avatar James.cf Lin Committed by Automerger Merge Worker
Browse files

Fix the OPTIONS request does not handle that the capabilities are retrieved...

Fix the OPTIONS request does not handle that the capabilities are retrieved from cache. am: 3b3370f9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/net/ims/+/14622818

Change-Id: Ieeed96d7be76a46c6a8172a739509f078add7551
parents 2ecae17d 3b3370f9
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -320,7 +320,10 @@ public class EabControllerImpl implements EabController {
            builder.addCapabilityTuple(createPresenceTuple(contactUri, cursor));
            builderWrapper.setPresenceBuilder(builder);
        } else {
            builderWrapper.setOptionsBuilder(new OptionsBuilder(contactUri));
            OptionsBuilder builder = new OptionsBuilder(contactUri, SOURCE_TYPE_CACHED);
            builder.setRequestResult(result);
            builder.addFeatureTag(createOptionTuple(cursor));
            builderWrapper.setOptionsBuilder(builder);
        }
        return builderWrapper;
    }
+3 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.ims.rcs.uce.presence.publish;

import static android.telephony.ims.RcsContactUceCapability.SOURCE_TYPE_CACHED;

import android.content.Context;
import android.net.Uri;
import android.telecom.TelecomManager;
@@ -460,7 +462,7 @@ public class DeviceCapabilityInfo {

        Set<String> capableFromReg = mServiceCapRegTracker.copyRegistrationFeatureTags();

        OptionsBuilder optionsBuilder = new OptionsBuilder(uri);
        OptionsBuilder optionsBuilder = new OptionsBuilder(uri, SOURCE_TYPE_CACHED);
        optionsBuilder.setRequestResult(RcsContactUceCapability.REQUEST_RESULT_FOUND);
        FeatureTags.addFeatureTags(optionsBuilder, hasVolteCapability(), hasVtCapability(),
                isPresenceCapable(), hasCallComposerCapability(), capableFromReg);
+6 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

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

import static android.telephony.ims.RcsContactUceCapability.SOURCE_TYPE_NETWORK;

import android.annotation.NonNull;
import android.net.Uri;
import android.os.RemoteException;
@@ -144,6 +146,9 @@ public class OptionsRequest extends CapabilityRequest {
        mRequestManagerCallback.notifyNetworkResponse(mCoordinatorId, mTaskId);
    }

    /**
     * Convert the remote capabilities from string list type to RcsContactUceCapability.
     */
    private RcsContactUceCapability getContactCapabilities(Uri contact, int sipCode,
            Set<String> featureTags) {
        int requestResult = RcsContactUceCapability.REQUEST_RESULT_FOUND;
@@ -166,7 +171,7 @@ public class OptionsRequest extends CapabilityRequest {
        }

        RcsContactUceCapability.OptionsBuilder optionsBuilder
                = new RcsContactUceCapability.OptionsBuilder(contact);
                = new RcsContactUceCapability.OptionsBuilder(contact, SOURCE_TYPE_NETWORK);
        optionsBuilder.setRequestResult(requestResult);
        optionsBuilder.addFeatureTags(featureTags);
        return optionsBuilder.build();
+49 −2
Original line number Diff line number Diff line
@@ -92,6 +92,10 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
        }
    };

    // The RequestResult creator for does not need to request from the network.
    private static final RequestResultCreator sNotNeedRequestFromNetworkCreator =
            (taskId, response) -> RequestResult.createSuccessResult(taskId);

    // The callback to notify the result of the capabilities request.
    private IRcsUceControllerCallback mCapabilitiesCallback;

@@ -121,7 +125,9 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
            return;
        }

        logd("onRequestUpdated: taskId=" + taskId + ", event=" + REQUEST_EVENT_DESC.get(event));
        logd("onRequestUpdated(OptionsRequest): taskId=" + taskId + ", event=" +
                REQUEST_EVENT_DESC.get(event));

        switch (event) {
            case REQUEST_UPDATE_ERROR:
                handleRequestError(request);
@@ -132,6 +138,11 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
            case REQUEST_UPDATE_NETWORK_RESPONSE:
                handleNetworkResponse(request);
                break;
            case REQUEST_UPDATE_CACHED_CAPABILITY_UPDATE:
                handleCachedCapabilityUpdated(request);
                break;
            case REQUEST_UPDATE_NO_NEED_REQUEST_FROM_NETWORK:
                handleNoNeedRequestFromNetwork(request);
            default:
                logw("onRequestUpdated: invalid event " + event);
                break;
@@ -199,6 +210,42 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
        moveRequestToFinishedCollection(taskId, requestResult);
    }

    /**
     * This method is called when the OptionsRequest retrieves the capabilities from cache.
     */
    private void handleCachedCapabilityUpdated(OptionsRequest request) {
        CapabilityRequestResponse response = request.getRequestResponse();
        Long taskId = request.getTaskId();
        List<RcsContactUceCapability> cachedCapList = response.getCachedContactCapability();
        logd("handleCachedCapabilityUpdated: taskId=" + taskId + ", CapRequestResp=" + response);

        if (cachedCapList.isEmpty()) {
            return;
        }

        // Trigger the capabilities updated callback.
        triggerCapabilitiesReceivedCallback(cachedCapList);
        response.removeCachedContactCapabilities();
    }

    /**
     * This method is called when all the capabilities can be retrieved from the cached and it does
     * not need to request capabilities from the network.
     */
    private void handleNoNeedRequestFromNetwork(OptionsRequest request) {
        CapabilityRequestResponse response = request.getRequestResponse();
        logd("handleNoNeedRequestFromNetwork: " + response.toString());

        // Finish this request.
        request.onFinish();

        // Remove this request from the activated collection and notify RequestManager.
        long taskId = request.getTaskId();
        RequestResult requestResult = sNotNeedRequestFromNetworkCreator.createRequestResult(taskId,
                response);
        moveRequestToFinishedCollection(taskId, requestResult);
    }

    /**
     * Trigger the capabilities updated callback.
     */
@@ -269,7 +316,7 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
            // Notify UceRequestManager to remove this instance from the collection.
            mRequestManagerCallback.notifyRequestCoordinatorFinished(mCoordinatorId);

            logd("checkAndFinishRequestCoordinator done, id=" + mCoordinatorId);
            logd("checkAndFinishRequestCoordinator(OptionsRequest) done, id=" + mCoordinatorId);
        }
    }

+2 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.ims.rcs.uce.request;

import static android.telephony.ims.RcsContactUceCapability.CAPABILITY_MECHANISM_OPTIONS;
import static android.telephony.ims.RcsContactUceCapability.SOURCE_TYPE_NETWORK;

import android.net.Uri;
import android.telephony.ims.RcsContactUceCapability;
@@ -172,7 +173,7 @@ public class RemoteOptionsRequest implements UceRequest {
        // Store the remote capabilities
        Uri contactUri = mUriList.get(0);
        RcsContactUceCapability remoteCaps = FeatureTags.getContactCapability(contactUri,
                mRemoteFeatureTags);
                SOURCE_TYPE_NETWORK, mRemoteFeatureTags);
        mRequestManagerCallback.saveCapabilities(Collections.singletonList(remoteCaps));

        // Get the device's capabilities and trigger the request callback
Loading