aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunho <hhshin@google.com>2022-12-06 11:29:01 +0000
committerHyunho <hhshin@google.com>2023-01-06 02:07:49 +0000
commita0118dbc82791a5eadf410d86d4d9ea7492d7031 (patch)
treec11ed5c13b56080982eda318ac743692aa994837
parent47a86324a9370f1f58300053c9c3192fd7939e78 (diff)
downloadims-a0118dbc82791a5eadf410d86d4d9ea7492d7031.tar.gz
If only RCS or MMTEL is unregistered, send a modify PUBLISH request
When RCS or MMTEL is unregistered, send a modify PUBLISH request message even if the associated URI has not changed. When RCS or MMTEL change from Unregistered to Unregistered, the registration status does not change. In this case, the modify PUBLISH request is sent depending on whether the associated URI has been changed. Bug: b/235973951 Test: atest DeviceCapabilityListenerTest Test: TMO Live network. The RCS and MMTEL are registered but the associated URI of RCS is not set. After that, RCS will be unregistered. Verified that the modify PUBLISH request has been sent to the netowrk. Change-Id: I96b565c15f11ee1083b56db29971ddee930d7e64
-rw-r--r--src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfo.java5
-rw-r--r--src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java20
-rw-r--r--tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java28
3 files changed, 43 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 4dd76be6..0c8515ba 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
@@ -177,14 +177,17 @@ public class DeviceCapabilityInfo {
/**
* Update the status that IMS MMTEL is unregistered.
*/
- 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;
mLastSuccessfulCapabilities.clear();
mPendingPublishCapabilities = null;
+ 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 9874fdb3..b824aa08 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
@@ -489,7 +489,7 @@ public class DeviceCapabilityListener {
public void onSubscriberAssociatedUriChanged(Uri[] uris) {
synchronized (mLock) {
logi("onRcsSubscriberAssociatedUriChanged");
- handleRcsSubscriberAssociatedUriChanged(uris);
+ handleRcsSubscriberAssociatedUriChanged(uris, false);
}
}
};
@@ -520,7 +520,7 @@ public class DeviceCapabilityListener {
public void onSubscriberAssociatedUriChanged(Uri[] uris) {
synchronized (mLock) {
logi("onMmTelSubscriberAssociatedUriChanged");
- handleMmTelSubscriberAssociatedUriChanged(uris);
+ handleMmTelSubscriberAssociatedUriChanged(uris, false);
}
}
};
@@ -599,9 +599,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) {
@@ -612,12 +612,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.
@@ -651,7 +652,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();
@@ -661,12 +662,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 6b726740..4b3caeb4 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
@@ -279,6 +279,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,