aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-01-08 00:22:37 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-01-08 00:22:37 +0000
commitb43515148f0298afdb2a9165b28ad9780ae28233 (patch)
treec11ed5c13b56080982eda318ac743692aa994837
parent76eca3eb435d0f4b73142c12f6eb414ede5adc08 (diff)
parenta0118dbc82791a5eadf410d86d4d9ea7492d7031 (diff)
downloadims-b43515148f0298afdb2a9165b28ad9780ae28233.tar.gz
Snap for 9466057 from a0118dbc82791a5eadf410d86d4d9ea7492d7031 to udc-release
Change-Id: I4403a05f6177cdb837285a77d3fc1527fff31d44
-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,