Add FeatureFlags to the Phone Objects

Add the new FeatureFlags reference to the base
phone object and update all the snaking constructors
to support it.

Bug: 302033535
Test: compilation (non-functional change)
Change-Id: I39c9531d3c5e54cbfceecfc74be259bf5cd1d6fb
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index b0c1e52..5bcfb64 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -321,7 +321,8 @@
             TelephonyComponentFactory telephonyComponentFactory,
             ImsManagerFactory imsManagerFactory, @NonNull FeatureFlags featureFlags) {
         super(precisePhoneType == PhoneConstants.PHONE_TYPE_GSM ? "GSM" : "CDMA",
-                notifier, context, ci, unitTestMode, phoneId, telephonyComponentFactory);
+                notifier, context, ci, unitTestMode, phoneId, telephonyComponentFactory,
+                featureFlags);
 
         // phone type needs to be set before other initialization as other objects rely on it
         mPrecisePhoneType = precisePhoneType;
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index 80e502c..ea15af6 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -93,6 +93,7 @@
 import com.android.internal.telephony.emergency.EmergencyConstants;
 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.imsphone.ImsCallInfo;
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.imsphone.ImsPhoneCall;
@@ -283,6 +284,8 @@
             "pref_null_cipher_and_integrity_enabled";
     private final TelephonyAdminReceiver m2gAdminUpdater;
 
+    protected final FeatureFlags mFeatureFlags;
+
     /**
      * This method is invoked when the Phone exits Emergency Callback Mode.
      */
@@ -548,22 +551,25 @@
     /**
      * Constructs a Phone in normal (non-unit test) mode.
      *
+     * @param name a name for this phone object
      * @param notifier An instance of DefaultPhoneNotifier,
      * @param context Context object from hosting application
      * unless unit testing.
      * @param ci is CommandsInterface
      * @param unitTestMode when true, prevents notifications
      * of state change events
+     * @param featureFlags an instance of the FeatureFlags set
      */
     protected Phone(String name, PhoneNotifier notifier, Context context, CommandsInterface ci,
-                    boolean unitTestMode) {
+                    boolean unitTestMode, FeatureFlags featureFlags) {
         this(name, notifier, context, ci, unitTestMode, SubscriptionManager.DEFAULT_PHONE_INDEX,
-                TelephonyComponentFactory.getInstance());
+                TelephonyComponentFactory.getInstance(), featureFlags);
     }
 
     /**
      * Constructs a Phone in normal (non-unit test) mode.
      *
+     * @param name a name for this phone object
      * @param notifier An instance of DefaultPhoneNotifier,
      * @param context Context object from hosting application
      * unless unit testing.
@@ -571,10 +577,13 @@
      * @param unitTestMode when true, prevents notifications
      * of state change events
      * @param phoneId the phone-id of this phone.
+     * @param telephonyComponentFactory a factory for injecting telephony components
+     * @param featureFlags an instance of the FeatureFlags set
      */
     protected Phone(String name, PhoneNotifier notifier, Context context, CommandsInterface ci,
                     boolean unitTestMode, int phoneId,
-                    TelephonyComponentFactory telephonyComponentFactory) {
+                    TelephonyComponentFactory telephonyComponentFactory,
+                    FeatureFlags featureFlags) {
         mPhoneId = phoneId;
         mName = name;
         mNotifier = notifier;
@@ -587,6 +596,8 @@
                 .makeAppSmsManager(context);
         mLocalLog = new LocalLog(64);
 
+        mFeatureFlags = featureFlags;
+
         setUnitTestMode(unitTestMode);
 
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
diff --git a/src/java/com/android/internal/telephony/PhoneFactory.java b/src/java/com/android/internal/telephony/PhoneFactory.java
index e49804f..a796368 100644
--- a/src/java/com/android/internal/telephony/PhoneFactory.java
+++ b/src/java/com/android/internal/telephony/PhoneFactory.java
@@ -455,7 +455,7 @@
      * @return the {@code ImsPhone} object or null if the exception occured
      */
     public static Phone makeImsPhone(PhoneNotifier phoneNotifier, Phone defaultPhone) {
-        return ImsPhoneFactory.makePhone(sContext, phoneNotifier, defaultPhone);
+        return ImsPhoneFactory.makePhone(sContext, phoneNotifier, defaultPhone, sFeatureFlags);
     }
 
     /**
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
index a5127f2..3a93f18 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
@@ -120,6 +120,7 @@
 import com.android.internal.telephony.domainselection.DomainSelectionResolver;
 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.gsm.SuppServiceNotification;
 import com.android.internal.telephony.metrics.ImsStats;
 import com.android.internal.telephony.metrics.TelephonyMetrics;
@@ -454,14 +455,15 @@
     }
 
     // Constructors
-    public ImsPhone(Context context, PhoneNotifier notifier, Phone defaultPhone) {
-        this(context, notifier, defaultPhone, ImsManager::getInstance, false);
+    public ImsPhone(Context context, PhoneNotifier notifier,
+            Phone defaultPhone, FeatureFlags featureFlags) {
+        this(context, notifier, defaultPhone, ImsManager::getInstance, false, featureFlags);
     }
 
     @VisibleForTesting
     public ImsPhone(Context context, PhoneNotifier notifier, Phone defaultPhone,
-            ImsManagerFactory imsManagerFactory, boolean unitTestMode) {
-        super("ImsPhone", context, notifier, unitTestMode);
+            ImsManagerFactory imsManagerFactory, boolean unitTestMode, FeatureFlags featureFlags) {
+        super("ImsPhone", context, notifier, unitTestMode, featureFlags);
 
         mDefaultPhone = defaultPhone;
         mImsManagerFactory = imsManagerFactory;
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneBase.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneBase.java
index 8a1041d..c5a7ecf 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneBase.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneBase.java
@@ -43,6 +43,7 @@
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneNotifier;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.uicc.IccFileHandler;
 import com.android.telephony.Rlog;
 
@@ -58,8 +59,9 @@
     private PhoneConstants.State mState = PhoneConstants.State.IDLE;
 
     public ImsPhoneBase(String name, Context context, PhoneNotifier notifier,
-                        boolean unitTestMode) {
-        super(name, notifier, context, new ImsPhoneCommandInterface(context), unitTestMode);
+                        boolean unitTestMode, FeatureFlags featureFlags) {
+        super(name, notifier, context, new ImsPhoneCommandInterface(context), unitTestMode,
+                featureFlags);
     }
 
     @Override
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneFactory.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneFactory.java
index 8f82328..0ae149c 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneFactory.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneFactory.java
@@ -20,6 +20,7 @@
 
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneNotifier;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.telephony.Rlog;
 
 /**
@@ -35,10 +36,10 @@
      * @return the {@code ImsPhone} object
      */
     public static ImsPhone makePhone(Context context,
-            PhoneNotifier phoneNotifier, Phone defaultPhone) {
+            PhoneNotifier phoneNotifier, Phone defaultPhone, FeatureFlags featureFlags) {
 
         try {
-            return new ImsPhone(context, phoneNotifier, defaultPhone);
+            return new ImsPhone(context, phoneNotifier, defaultPhone, featureFlags);
         } catch (Exception e) {
             Rlog.e("VoltePhoneFactory", "makePhone", e);
             return null;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneFactoryTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneFactoryTest.java
index a657ba2..21d79a9 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneFactoryTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneFactoryTest.java
@@ -28,6 +28,7 @@
 
 import com.android.internal.telephony.PhoneNotifier;
 import com.android.internal.telephony.TelephonyTest;
+import com.android.internal.telephony.flags.FeatureFlags;
 
 import org.junit.After;
 import org.junit.Before;
@@ -42,6 +43,8 @@
     private ImsPhone mImsPhoneUT;
     private ImsPhoneFactoryHandler mImsPhoneFactoryHandler;
 
+    private FeatureFlags mFeatureFlags;
+
     private final Executor mExecutor = Runnable::run;
 
     private class ImsPhoneFactoryHandler extends HandlerThread {
@@ -51,7 +54,8 @@
         }
         @Override
         public void onLooperPrepared() {
-            mImsPhoneUT = ImsPhoneFactory.makePhone(mContext, mPhoneNotifier, mPhone);
+            mImsPhoneUT = ImsPhoneFactory.makePhone(mContext, mPhoneNotifier, mPhone,
+                    mFeatureFlags);
             setReady(true);
         }
     }
@@ -60,6 +64,7 @@
     public void setUp() throws Exception {
         super.setUp(getClass().getSimpleName());
         mPhoneNotifier = mock(PhoneNotifier.class);
+        mFeatureFlags = mock(FeatureFlags.class);
         doReturn(mExecutor).when(mContext).getMainExecutor();
 
         mImsPhoneFactoryHandler = new ImsPhoneFactoryHandler(getClass().getSimpleName());
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneMmiCodeTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneMmiCodeTest.java
index d8173a2..a833da0 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneMmiCodeTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneMmiCodeTest.java
@@ -35,6 +35,7 @@
 
 import com.android.internal.telephony.CommandException;
 import com.android.internal.telephony.TelephonyTest;
+import com.android.internal.telephony.flags.FeatureFlags;
 
 import org.junit.After;
 import org.junit.Before;
@@ -57,6 +58,7 @@
 
     // Mocked classes
     private ServiceState mServiceState;
+    private FeatureFlags mFeatureFlags;
 
     private final Executor mExecutor = Runnable::run;
 
@@ -64,12 +66,14 @@
     public void setUp() throws Exception {
         super.setUp(getClass().getSimpleName());
         mServiceState = mock(ServiceState.class);
+        mFeatureFlags = mock(FeatureFlags.class);
+
         doReturn(mExecutor).when(mContext).getMainExecutor();
         doReturn(mPhone).when(mPhone).getDefaultPhone();
         doReturn(mServiceState).when(mPhone).getServiceState();
         doReturn(false).when(mServiceState).getVoiceRoaming();
         doReturn(false).when(mPhone).supportsConversionOfCdmaCallerIdMmiCodesWhileRoaming();
-        mImsPhoneUT = new ImsPhone(mContext, mNotifier, mPhone);
+        mImsPhoneUT = new ImsPhone(mContext, mNotifier, mPhone, mFeatureFlags);
         setCarrierSupportsCallerIdVerticalServiceCodesCarrierConfig();
     }
 
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 9eafa09..95f47c5 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
@@ -97,6 +97,7 @@
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyTest;
 import com.android.internal.telephony.domainselection.DomainSelectionResolver;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.gsm.SuppServiceNotification;
 import com.android.internal.telephony.imsphone.ImsPhone.SS;
 import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
@@ -125,6 +126,7 @@
     private DomainSelectionResolver mDomainSelectionResolver;
     Connection mConnection;
     ImsUtInterface mImsUtInterface;
+    private FeatureFlags mFeatureFlags;
 
     private final Executor mExecutor = Runnable::run;
 
@@ -149,6 +151,7 @@
         mConnection = mock(Connection.class);
         mImsUtInterface = mock(ImsUtInterface.class);
         mDomainSelectionResolver = mock(DomainSelectionResolver.class);
+        mFeatureFlags = mock(FeatureFlags.class);
         doReturn(false).when(mDomainSelectionResolver).isDomainSelectionSupported();
         DomainSelectionResolver.setDomainSelectionResolver(mDomainSelectionResolver);
 
@@ -162,7 +165,8 @@
 
         doReturn(true).when(mTelephonyManager).isVoiceCapable();
 
-        mImsPhoneUT = new ImsPhone(mContext, mNotifier, mPhone, (c, p) -> mImsManager, true);
+        mImsPhoneUT = new ImsPhone(mContext, mNotifier, mPhone, (c, p) -> mImsManager, true,
+                mFeatureFlags);
 
         mDoesRilSendMultipleCallRing = TelephonyProperties.ril_sends_multiple_call_ring()
                 .orElse(true);