Add feature flag to clears cached IMS phone number when device lost IMS registration.
Bug: 307133015
Test: atest ImsPhoneTest, ImsServiceTest
Change-Id: I140ac7c5bbeea3e4f262b7415a883aef02982c0d
diff --git a/flags/ims.aconfig b/flags/ims.aconfig
index 4f06049..482802a 100644
--- a/flags/ims.aconfig
+++ b/flags/ims.aconfig
@@ -12,4 +12,11 @@
namespace: "telephony"
description: "This flag ignores the incoming call by throwing an exception if the call was already terminated before the framework registers the listener for the incoming call"
bug:"289461637"
-}
\ No newline at end of file
+}
+
+flag {
+ name: "clear_cached_ims_phone_number_when_device_lost_ims_registration"
+ namespace: "telephony"
+ description: "This flag clears cached IMS phone number when device lost IMS registration"
+ bug:"288002989"
+}
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
index 3a93f18..2912935 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
@@ -47,6 +47,7 @@
import static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_NONE;
import static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_VOICE;
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.app.Activity;
import android.app.Notification;
@@ -121,6 +122,7 @@
import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.emergency.EmergencyStateTracker;
import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.gsm.SuppServiceNotification;
import com.android.internal.telephony.metrics.ImsStats;
import com.android.internal.telephony.metrics.TelephonyMetrics;
@@ -2530,9 +2532,11 @@
updateImsRegistrationInfo(REGISTRATION_STATE_NOT_REGISTERED,
imsRadioTech, suggestedModemAction);
- // Clear the phone number from P-Associated-Uri
- setCurrentSubscriberUris(null);
- clearPhoneNumberForSourceIms();
+ if (mFeatureFlags.clearCachedImsPhoneNumberWhenDeviceLostImsRegistration()) {
+ // Clear the phone number from P-Associated-Uri
+ setCurrentSubscriberUris(null);
+ clearPhoneNumberForSourceIms();
+ }
}
@Override
@@ -2545,6 +2549,7 @@
/** Clear the IMS phone number from IMS associated Uris when IMS registration is lost. */
@VisibleForTesting
+ @FlaggedApi(Flags.FLAG_CLEAR_CACHED_IMS_PHONE_NUMBER_WHEN_DEVICE_LOST_IMS_REGISTRATION)
public void clearPhoneNumberForSourceIms() {
int subId = getSubId();
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index 80ec039..a952197 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -96,6 +96,7 @@
import com.android.internal.telephony.data.PhoneSwitcher;
import com.android.internal.telephony.euicc.EuiccController;
import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.subscription.SubscriptionDatabaseManager.SubscriptionDatabaseManagerCallback;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.IccUtils;
@@ -1460,8 +1461,11 @@
loge("updateSubscription: ICC card is not available.");
}
- // Clear the cached Ims phone number before proceeding with Ims Registration
- setNumberFromIms(subId, new String(""));
+ if (Flags.clearCachedImsPhoneNumberWhenDeviceLostImsRegistration()) {
+ // Clear the cached Ims phone number
+ // before proceeding with Ims Registration
+ setNumberFromIms(subId, new String(""));
+ }
// Attempt to restore SIM specific settings when SIM is loaded.
Bundle result = mContext.getContentResolver().call(
diff --git a/tests/telephonytests/Android.bp b/tests/telephonytests/Android.bp
index 9fb4fe6..51ab617 100644
--- a/tests/telephonytests/Android.bp
+++ b/tests/telephonytests/Android.bp
@@ -41,6 +41,7 @@
"truth",
"testables",
"platform-compat-test-rules",
+ "flag-junit",
],
jarjar_rules: ":jarjar-rules-telephony-tests",
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
index 95f47c5..4e61c67 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
@@ -1118,6 +1118,9 @@
@Test
@SmallTest
public void testClearPhoneNumberForSourceIms() {
+ doReturn(true).when(mFeatureFlags)
+ .clearCachedImsPhoneNumberWhenDeviceLostImsRegistration();
+
// In reality the method under test runs in phone process so has MODIFY_PHONE_STATE
mContextFixture.addCallingOrSelfPermission(MODIFY_PHONE_STATE);
int subId = 1;