If only RCS or MMTEL is unregistered, send a modify PUBLISH request am: e60edd7244 am: 53d93ed935 am: 8034df4acd
Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/net/ims/+/2215065
Change-Id: Icb632fd9afbb4c7e75887eb7011f7315cb242db7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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 442cf7d..54e227d 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
@@ -162,6 +162,8 @@
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);
@@ -492,7 +494,7 @@
public void onSubscriberAssociatedUriChanged(Uri[] uris) {
synchronized (mLock) {
logi("onRcsSubscriberAssociatedUriChanged");
- handleRcsSubscriberAssociatedUriChanged(uris, true);
+ handleRcsSubscriberAssociatedUriChanged(uris);
}
}
};
@@ -523,7 +525,7 @@
public void onSubscriberAssociatedUriChanged(Uri[] uris) {
synchronized (mLock) {
logi("onMmTelSubscriberAssociatedUriChanged");
- handleMmTelSubscriberAssociatedUriChanged(uris, true);
+ handleMmTelSubscriberAssociatedUriChanged(uris);
}
}
};
@@ -613,7 +615,7 @@
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) {
@@ -624,16 +626,16 @@
/*
* 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);
}
@@ -663,7 +665,7 @@
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();
@@ -673,16 +675,16 @@
/*
* 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);
}
}
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 2d170ab..3f71688 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
@@ -266,6 +266,37 @@
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);