Merge changes from topics "delegate_regi_new_state_losing_pdn", "ims_rcs_api_improvement_delegate_regi_state" am: a570a8259b am: d8d853ca17
Original change: https://android-review.googlesource.com/c/platform/packages/services/Telephony/+/1911014
Change-Id: I34c5d531279d3937edc885c3277f81840f658b1e
diff --git a/src/com/android/services/telephony/rcs/DelegateStateTracker.java b/src/com/android/services/telephony/rcs/DelegateStateTracker.java
index 64090d5..29b8121 100644
--- a/src/com/android/services/telephony/rcs/DelegateStateTracker.java
+++ b/src/com/android/services/telephony/rcs/DelegateStateTracker.java
@@ -86,6 +86,17 @@
@VisibleForTesting
public static final long SUPPORT_REGISTERING_DELEGATE_STATE = 205194548;
+ /**
+ * For apps targeting Android T and above, support the DEREGISTERING_REASON_LOSING_PDN state
+ * on APIs, such as {@code DelegateRegistrationState#addDeregisteringFeatureTag} and
+ * {@code DelegateRegistrationState#getDeregisteringFeatureTags}
+ * @hide
+ */
+ @ChangeId
+ @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
+ @VisibleForTesting
+ public static final long SUPPORT_DEREGISTERING_LOSING_PDN_STATE = 201522903;
+
public DelegateStateTracker(int subId, int uid,
ISipDelegateConnectionStateCallback appStateCallback,
ISipDelegate localDelegateImpl, RcsStats rcsStats) {
@@ -178,9 +189,13 @@
*/
@Override
public void onRegistrationStateChanged(DelegateRegistrationState registrationState) {
+ if (!mCompatChangesFactory.isChangeEnabled(SUPPORT_DEREGISTERING_LOSING_PDN_STATE, mUid)) {
+ registrationState = overrideDeregisteringStateForCompatibility(registrationState);
+ }
if (!mCompatChangesFactory.isChangeEnabled(SUPPORT_REGISTERING_DELEGATE_STATE, mUid)) {
registrationState = overrideRegistrationForCompatibility(registrationState);
}
+
if (mRegistrationStateOverride > DelegateRegistrationState.DEREGISTERED_REASON_UNKNOWN) {
logi("onRegistrationStateChanged: overriding registered state to "
+ mRegistrationStateOverride);
@@ -291,6 +306,43 @@
return overriddenState.build();
}
+ /**
+ * @param state The RegistrationState reported by the SipDelegate to be sent to the
+ * IMS application .
+ * @return DEREGISTERING_REASON_PDN_CHANGE instead of DEREGISTERING_REASON_LOSING_PDN
+ * if the SUPPORT_DEREGISTERING_LOSING_PDN_STATE compat key is not enabled for the application
+ * consuming the registration change events.
+ */
+ private DelegateRegistrationState overrideDeregisteringStateForCompatibility(
+ DelegateRegistrationState state) {
+ Set<String> registeredFeatures = state.getRegisteredFeatureTags();
+ Set<String> registeringFeatures = state.getRegisteringFeatureTags();
+ DelegateRegistrationState.Builder overriddenState = new DelegateRegistrationState.Builder();
+
+ // keep other registered/registering/deregistered tags the same.
+ for (FeatureTagState dereged : state.getDeregisteredFeatureTags()) {
+ overriddenState.addDeregisteredFeatureTag(dereged.getFeatureTag(),
+ dereged.getState());
+ }
+ overriddenState.addRegisteredFeatureTags(registeredFeatures);
+ overriddenState.addRegisteringFeatureTags(registeringFeatures);
+
+ // change DEREGISTERING_REASON_LOSING_PDN to DEREGISTERING_REASON_PDN_CHANGE
+ for (FeatureTagState dereging : state.getDeregisteringFeatureTags()) {
+ overriddenState.addDeregisteringFeatureTag(dereging.getFeatureTag(),
+ getDeregisteringReasonForCompatibility(dereging.getState()));
+ }
+
+ return overriddenState.build();
+ }
+
+ private int getDeregisteringReasonForCompatibility(int reason) {
+ if (reason == DelegateRegistrationState.DEREGISTERING_REASON_LOSING_PDN) {
+ reason = DelegateRegistrationState.DEREGISTERING_REASON_PDN_CHANGE;
+ }
+ return reason;
+ }
+
private void notifySipDelegateCreated() {
try {
mAppStateCallback.onCreated(mLocalDelegateImpl);
diff --git a/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java b/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java
index 0eb19e7..ffbe5ce 100644
--- a/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java
@@ -234,6 +234,9 @@
* When registration states are changed in a case that an application doesn't support the new
* 'registering' state the 'registering' state will be moved to the 'registered' state
* as the old behavior.
+ *
+ * This method tests the case where the application doesn't support consuming the
+ * DEREGISTERING_REASON_LOSING_PDN reason.
*/
@Test
public void testDelegateChangingRegisteredTagsRegisteringDisable() throws Exception {
@@ -250,7 +253,7 @@
.addRegisteredFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG)
.addRegisteringFeatureTags(registeringTags)
.addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
- DelegateRegistrationState.DEREGISTERING_REASON_PROVISIONING_CHANGE)
+ DelegateRegistrationState.DEREGISTERING_REASON_LOSING_PDN)
.addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED)
.build();
@@ -259,7 +262,7 @@
DelegateRegistrationState.Builder builder = new DelegateRegistrationState.Builder()
.addRegisteredFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG)
.addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
- DelegateRegistrationState.DEREGISTERING_REASON_PROVISIONING_CHANGE)
+ DelegateRegistrationState.DEREGISTERING_REASON_PDN_CHANGE)
.addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED);
for (String tag : registeringTags) {
@@ -283,6 +286,9 @@
/**
* When registration states are changed in a case that an application supports the new
* 'registering' state the state will be kept.
+ *
+ * This method tests the case where the application supports consuming the
+ * DEREGISTERING_REASON_LOSING_PDN reason.
*/
@Test
public void testDelegateChangingRegisteredTagsRegisteringEnable() throws Exception {
@@ -300,7 +306,7 @@
.addRegisteredFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG)
.addRegisteringFeatureTags(registeringTags)
.addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
- DelegateRegistrationState.DEREGISTERING_REASON_PROVISIONING_CHANGE)
+ DelegateRegistrationState.DEREGISTERING_REASON_LOSING_PDN)
.addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED)
.build();