diff options
author | Hyunho Shin <hhshin@google.com> | 2023-01-13 10:43:43 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-01-13 10:43:43 +0000 |
commit | 69eb9297828629aa733085d4961e3104421f1383 (patch) | |
tree | 92ebe557f1dadfd052e85356dbf3f28bcbbef11f | |
parent | 172f177d75454caa597bc5d5384e44cac134795b (diff) | |
parent | 56127f65b0df21518a6d2ba836a53e1c6c402271 (diff) | |
download | ims-69eb9297828629aa733085d4961e3104421f1383.tar.gz |
Merge "If only RCS or MMTEL is unregistered, send a modify PUBLISH request"
3 files changed, 44 insertions, 10 deletions
diff --git a/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfo.java b/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfo.java index dc794331..f97ccf0a 100644 --- a/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfo.java +++ b/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfo.java @@ -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; } /** diff --git a/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java b/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java index 0ec30403..8e940073 100644 --- a/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java +++ b/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java @@ -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. diff --git a/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java b/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java index 7bdeb11d..d96b87e6 100644 --- a/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java +++ b/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java @@ -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, |