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

Commit 3de33564 authored by Hyunho's avatar Hyunho Committed by Automerger Merge Worker
Browse files

If only RCS or MMTEL is unregistered, send a modify PUBLISH request am:...

If only RCS or MMTEL is unregistered, send a modify PUBLISH request am: e60edd72 am: 53d93ed9 am: 8034df4a am: 69305341

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



Change-Id: Iccfa0b9b9b6bf0d7a630ade4bae468eb4e86e72d
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 6db05499 69305341
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -162,6 +162,8 @@ public class DeviceCapabilityListener {

        public void sendImsUnregisteredMessage() {
            logd("sendImsUnregisteredMessage");
            // The IMS has been unregistered. Remove the existing message not processed.
            removeMessages(EVENT_REQUEST_PUBLISH);
            // Remove the existing message and resend a new message.
            removeMessages(EVENT_IMS_UNREGISTERED);
            Message msg = obtainMessage(EVENT_IMS_UNREGISTERED);
@@ -493,7 +495,7 @@ public class DeviceCapabilityListener {
                public void onSubscriberAssociatedUriChanged(Uri[] uris) {
                    synchronized (mLock) {
                        logi("onRcsSubscriberAssociatedUriChanged");
                        handleRcsSubscriberAssociatedUriChanged(uris, true);
                        handleRcsSubscriberAssociatedUriChanged(uris);
                    }
                }
    };
@@ -524,7 +526,7 @@ public class DeviceCapabilityListener {
                public void onSubscriberAssociatedUriChanged(Uri[] uris) {
                    synchronized (mLock) {
                        logi("onMmTelSubscriberAssociatedUriChanged");
                        handleMmTelSubscriberAssociatedUriChanged(uris, true);
                        handleMmTelSubscriberAssociatedUriChanged(uris);
                    }
                }
            };
@@ -614,7 +616,7 @@ public class DeviceCapabilityListener {
    private void handleImsMmtelUnregistered() {
        mCapabilityInfo.updateImsMmtelUnregistered();
        // When the MMTEL is unregistered, the mmtel associated uri should be cleared.
        handleMmTelSubscriberAssociatedUriChanged(null, false);
        handleMmTelSubscriberAssociatedUriChanged(null);

        // If the RCS is already unregistered, it informs that the IMS is unregistered.
        if (mCapabilityInfo.isImsRegistered() == false) {
@@ -625,16 +627,16 @@ public class DeviceCapabilityListener {
    /*
     * This method is called when the MMTEL associated uri has changed.
     */
    private void handleMmTelSubscriberAssociatedUriChanged(Uri[] uris, boolean triggerPublish) {
    private void handleMmTelSubscriberAssociatedUriChanged(Uri[] uris) {
        Uri originalUri = mCapabilityInfo.getMmtelAssociatedUri();
        mCapabilityInfo.updateMmTelAssociatedUri(uris);
        Uri currentUri = mCapabilityInfo.getMmtelAssociatedUri();

        boolean hasChanged = !(Objects.equals(originalUri, currentUri));
        logi("handleMmTelSubscriberAssociatedUriChanged: triggerPublish=" + triggerPublish +
                ", hasChanged=" + hasChanged);
        logi("handleMmTelSubscriberAssociatedUriChanged: hasChanged=" + hasChanged);

        if (triggerPublish && hasChanged) {
        // Send internal request to send a modification PUBLISH if the MMTEL or RCS is registered.
        if (mCapabilityInfo.isImsRegistered() && hasChanged) {
            mHandler.sendTriggeringPublishMessage(
                    PublishController.PUBLISH_TRIGGER_MMTEL_URI_CHANGE);
        }
@@ -664,7 +666,7 @@ public class DeviceCapabilityListener {
    private void handleImsRcsUnregistered() {
        boolean hasChanged = mCapabilityInfo.updateImsRcsUnregistered();
        // When the RCS is unregistered, the rcs associated uri should be cleared.
        handleRcsSubscriberAssociatedUriChanged(null, false);
        handleRcsSubscriberAssociatedUriChanged(null);
        // If the MMTEL is already unregistered, it informs that the IMS is unregistered.
        if (mCapabilityInfo.isImsRegistered() == false) {
            mHandler.sendImsUnregisteredMessage();
@@ -674,16 +676,16 @@ public class DeviceCapabilityListener {
    /*
     * This method is called when the RCS associated uri has changed.
     */
    private void handleRcsSubscriberAssociatedUriChanged(Uri[] uris, boolean triggerPublish) {
    private void handleRcsSubscriberAssociatedUriChanged(Uri[] uris) {
        Uri originalUri = mCapabilityInfo.getRcsAssociatedUri();
        mCapabilityInfo.updateRcsAssociatedUri(uris);
        Uri currentUri = mCapabilityInfo.getRcsAssociatedUri();

        boolean hasChanged = !(Objects.equals(originalUri, currentUri));
        logi("handleRcsSubscriberAssociatedUriChanged: triggerPublish=" + triggerPublish +
                ", hasChanged=" + hasChanged);
        logi("handleRcsSubscriberAssociatedUriChanged: hasChanged=" + hasChanged);

        if (triggerPublish && hasChanged) {
        // Send internal request to send a modification PUBLISH if the MMTEL or RCS is registered.
        if (mCapabilityInfo.isImsRegistered() && hasChanged) {
            mHandler.sendTriggeringPublishMessage(PublishController.PUBLISH_TRIGGER_RCS_URI_CHANGE);
        }
    }
+31 −0
Original line number Diff line number Diff line
@@ -267,6 +267,37 @@ public class DeviceCapabilityListenerTest extends ImsTestBase {
        verify(mCallback).updateImsUnregistered();
    }

    @Test
    @SmallTest
    public void testRcsAndMmtelUnregistration() throws Exception {
        DeviceCapabilityListener deviceCapListener = createDeviceCapabilityListener();
        deviceCapListener.setImsCallbackRegistered(true);

        Handler handler = deviceCapListener.getHandler();
        ImsReasonInfo info = new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED, -1, "");
        // RCS unregistered
        RegistrationCallback rcsRegiCallback = deviceCapListener.mRcsRegistrationCallback;

        doReturn(true).when(mDeviceCapability).updateImsRcsUnregistered();
        // RCS is unregistered but MMTEL is registered.
        doReturn(true).when(mDeviceCapability).isImsRegistered();
        rcsRegiCallback.onUnregistered(info);

        // MMTEL unregistered
        RegistrationCallback mmtelRegiCallback = deviceCapListener.mMmtelRegistrationCallback;
        // set the Ims is unregistered
        doReturn(false).when(mDeviceCapability).isImsRegistered();
        mmtelRegiCallback.onUnregistered(info);

        waitForHandlerActionDelayed(handler, HANDLER_WAIT_TIMEOUT_MS, HANDLER_SENT_DELAY_MS);

        // Do not send internal publish trigger
        verify(mCallback, never()).requestPublishFromInternal(anyInt());
        // IMS is unregistered. Verify send ImsUnregistered.
        verify(mCallback).updateImsUnregistered();
    }


    private DeviceCapabilityListener createDeviceCapabilityListener() {
        DeviceCapabilityListener deviceCapListener = new DeviceCapabilityListener(mContext,
                mSubId, mDeviceCapability, mCallback, mUceStatsWriter);