Loading src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfo.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; } /** Loading src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java +11 −9 Original line number Diff line number Diff line Loading @@ -495,7 +495,7 @@ public class DeviceCapabilityListener { public void onSubscriberAssociatedUriChanged(Uri[] uris) { synchronized (mLock) { logi("onRcsSubscriberAssociatedUriChanged"); handleRcsSubscriberAssociatedUriChanged(uris); handleRcsSubscriberAssociatedUriChanged(uris, false); } } }; Loading Loading @@ -526,7 +526,7 @@ public class DeviceCapabilityListener { public void onSubscriberAssociatedUriChanged(Uri[] uris) { synchronized (mLock) { logi("onMmTelSubscriberAssociatedUriChanged"); handleMmTelSubscriberAssociatedUriChanged(uris); handleMmTelSubscriberAssociatedUriChanged(uris, false); } } }; Loading Loading @@ -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) { Loading @@ -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. Loading Loading @@ -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(); Loading @@ -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. Loading tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java +28 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading
src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfo.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; } /** Loading
src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java +11 −9 Original line number Diff line number Diff line Loading @@ -495,7 +495,7 @@ public class DeviceCapabilityListener { public void onSubscriberAssociatedUriChanged(Uri[] uris) { synchronized (mLock) { logi("onRcsSubscriberAssociatedUriChanged"); handleRcsSubscriberAssociatedUriChanged(uris); handleRcsSubscriberAssociatedUriChanged(uris, false); } } }; Loading Loading @@ -526,7 +526,7 @@ public class DeviceCapabilityListener { public void onSubscriberAssociatedUriChanged(Uri[] uris) { synchronized (mLock) { logi("onMmTelSubscriberAssociatedUriChanged"); handleMmTelSubscriberAssociatedUriChanged(uris); handleMmTelSubscriberAssociatedUriChanged(uris, false); } } }; Loading Loading @@ -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) { Loading @@ -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. Loading Loading @@ -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(); Loading @@ -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. Loading
tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java +28 −0 Original line number Diff line number Diff line Loading @@ -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, Loading