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

Commit 69eb9297 authored by Hyunho Shin's avatar Hyunho Shin Committed by Gerrit Code Review
Browse files

Merge "If only RCS or MMTEL is unregistered, send a modify PUBLISH request"

parents 172f177d 56127f65
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -168,13 +168,17 @@ public class DeviceCapabilityInfo {

    /**
     * Update the status that IMS MMTEL is unregistered.
     * @return Mmtel registered status before change
     */
    public synchronized void updateImsMmtelUnregistered() {
    public synchronized boolean updateImsMmtelUnregistered() {
        logi("IMS MMTEL unregistered: original state=" + mMmtelRegistered);
        boolean changed = false;
        if (mMmtelRegistered) {
            mMmtelRegistered = false;
            changed = true;
        }
        mMmtelNetworkRegType = AccessNetworkConstants.TRANSPORT_TYPE_INVALID;
        return changed;
    }

    /**
+11 −9
Original line number Diff line number Diff line
@@ -495,7 +495,7 @@ public class DeviceCapabilityListener {
                public void onSubscriberAssociatedUriChanged(Uri[] uris) {
                    synchronized (mLock) {
                        logi("onRcsSubscriberAssociatedUriChanged");
                        handleRcsSubscriberAssociatedUriChanged(uris);
                        handleRcsSubscriberAssociatedUriChanged(uris, false);
                    }
                }
    };
@@ -526,7 +526,7 @@ public class DeviceCapabilityListener {
                public void onSubscriberAssociatedUriChanged(Uri[] uris) {
                    synchronized (mLock) {
                        logi("onMmTelSubscriberAssociatedUriChanged");
                        handleMmTelSubscriberAssociatedUriChanged(uris);
                        handleMmTelSubscriberAssociatedUriChanged(uris, false);
                    }
                }
            };
@@ -614,9 +614,9 @@ public class DeviceCapabilityListener {
     * This method is called when the MMTEL is unregistered.
     */
    private void handleImsMmtelUnregistered() {
        mCapabilityInfo.updateImsMmtelUnregistered();
        boolean hasChanged = mCapabilityInfo.updateImsMmtelUnregistered();
        // When the MMTEL is unregistered, the mmtel associated uri should be cleared.
        handleMmTelSubscriberAssociatedUriChanged(null);
        handleMmTelSubscriberAssociatedUriChanged(null, hasChanged);

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

        boolean hasChanged = !(Objects.equals(originalUri, currentUri));
        boolean hasChanged = regiChanged || !(Objects.equals(originalUri, currentUri));

        logi("handleMmTelSubscriberAssociatedUriChanged: hasChanged=" + hasChanged);

        // Send internal request to send a modification PUBLISH if the MMTEL or RCS is registered.
@@ -666,7 +667,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);
        handleRcsSubscriberAssociatedUriChanged(null, hasChanged);
        // If the MMTEL is already unregistered, it informs that the IMS is unregistered.
        if (mCapabilityInfo.isImsRegistered() == false) {
            mHandler.sendImsUnregisteredMessage();
@@ -676,12 +677,13 @@ public class DeviceCapabilityListener {
    /*
     * This method is called when the RCS associated uri has changed.
     */
    private void handleRcsSubscriberAssociatedUriChanged(Uri[] uris) {
    private void handleRcsSubscriberAssociatedUriChanged(Uri[] uris, boolean regiChanged) {
        Uri originalUri = mCapabilityInfo.getRcsAssociatedUri();
        mCapabilityInfo.updateRcsAssociatedUri(uris);
        Uri currentUri = mCapabilityInfo.getRcsAssociatedUri();

        boolean hasChanged = !(Objects.equals(originalUri, currentUri));
        boolean hasChanged = regiChanged || !(Objects.equals(originalUri, currentUri));

        logi("handleRcsSubscriberAssociatedUriChanged: hasChanged=" + hasChanged);

        // Send internal request to send a modification PUBLISH if the MMTEL or RCS is registered.
+28 −0
Original line number Diff line number Diff line
@@ -297,6 +297,34 @@ public class DeviceCapabilityListenerTest extends ImsTestBase {
        verify(mCallback).updateImsUnregistered();
    }

    @Test
    @SmallTest
    public void testUnregisterRcsOnlyFromImsRegistration() throws Exception {
        DeviceCapabilityListener deviceCapListener = createDeviceCapabilityListener();
        deviceCapListener.setImsCallbackRegistered(true);
        Handler handler = deviceCapListener.getHandler();

        // set the Ims is registered
        doReturn(true).when(mDeviceCapability).isImsRegistered();
        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);

        waitForHandlerActionDelayed(handler, HANDLER_WAIT_TIMEOUT_MS, HANDLER_SENT_DELAY_MS);

        verify(mDeviceCapability).updateImsRcsUnregistered();
        // Only RCS unregistered. Verify the request of the modify publish is sent.
        verify(mCallback).requestPublishFromInternal(
                PublishController.PUBLISH_TRIGGER_RCS_URI_CHANGE);

        // Only RCS unregistered. Verify do not send ImsUnregistered.
        verify(mCallback, never()).updateImsUnregistered();
    }

    private DeviceCapabilityListener createDeviceCapabilityListener() {
        DeviceCapabilityListener deviceCapListener = new DeviceCapabilityListener(mContext,