Apply feature flag inject approach

Bug: 323278352
Test: atest TelephonyRcsServiceTest UceControllerManagerTest
Change-Id: Ia52ca507f1d02282e1e4f423c7987f44c4398265
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 2ae39df..b787e84 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -594,7 +594,7 @@
                 mImsStateCallbackController =
                         ImsStateCallbackController.make(this, PhoneFactory.getPhones().length);
                 mTelephonyRcsService = new TelephonyRcsService(this,
-                        PhoneFactory.getPhones().length);
+                        PhoneFactory.getPhones().length, mFeatureFlags);
                 mTelephonyRcsService.initialize();
                 imsRcsController.setRcsService(mTelephonyRcsService);
                 mImsProvisioningController =
diff --git a/src/com/android/services/telephony/rcs/TelephonyRcsService.java b/src/com/android/services/telephony/rcs/TelephonyRcsService.java
index f6ba40b..63753c2 100644
--- a/src/com/android/services/telephony/rcs/TelephonyRcsService.java
+++ b/src/com/android/services/telephony/rcs/TelephonyRcsService.java
@@ -33,6 +33,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.PhoneConfigurationManager;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.metrics.RcsStats;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.phone.ImsStateCallbackController;
@@ -63,7 +64,8 @@
         /**
          * @return an instance of {@link UceControllerManager} associated with the slot specified.
          */
-        UceControllerManager createUceControllerManager(Context context, int slotId, int subId);
+        UceControllerManager createUceControllerManager(Context context, int slotId, int subId,
+                FeatureFlags featureFlags);
 
         /**
          * @return an instance of {@link SipTransportController} for the slot and subscription
@@ -80,8 +82,8 @@
 
         @Override
         public UceControllerManager createUceControllerManager(Context context, int slotId,
-                int subId) {
-            return new UceControllerManager(context, slotId, subId);
+                int subId, FeatureFlags featureFlags) {
+            return new UceControllerManager(context, slotId, subId, featureFlags);
         }
 
         @Override
@@ -112,6 +114,7 @@
 
     private final Context mContext;
     private final Object mLock = new Object();
+    private final FeatureFlags mFeatureFlags;
     private int mNumSlots;
 
     // Maps slot ID -> RcsFeatureController.
@@ -160,23 +163,26 @@
         return true;
     });
 
-    public TelephonyRcsService(Context context, int numSlots) {
+    public TelephonyRcsService(Context context, int numSlots, FeatureFlags featureFlags) {
         mContext = context;
         mNumSlots = numSlots;
         mFeatureControllers = new SparseArray<>(numSlots);
         mSlotToAssociatedSubIds = new SparseArray<>(numSlots);
         mRcsUceEnabled = sResourceProxy.getDeviceUceEnabled(mContext);
+        mFeatureFlags = featureFlags;
         RcsStats.getInstance().registerUceCallback();
     }
 
     @VisibleForTesting
-    public TelephonyRcsService(Context context, int numSlots, ResourceProxy resourceProxy) {
+    public TelephonyRcsService(Context context, int numSlots, ResourceProxy resourceProxy,
+            FeatureFlags featureFlags) {
         mContext = context;
         mNumSlots = numSlots;
         mFeatureControllers = new SparseArray<>(numSlots);
         mSlotToAssociatedSubIds = new SparseArray<>(numSlots);
         sResourceProxy = resourceProxy;
         mRcsUceEnabled = sResourceProxy.getDeviceUceEnabled(mContext);
+        mFeatureFlags = featureFlags;
         RcsStats.getInstance().registerUceCallback();
     }
 
@@ -310,8 +316,8 @@
     private void updateSupportedFeatures(RcsFeatureController c, int slotId, int subId) {
         if (isDeviceUceEnabled() && doesSubscriptionSupportPresence(subId)) {
             if (c.getFeature(UceControllerManager.class) == null) {
-                c.addFeature(mFeatureFactory.createUceControllerManager(mContext, slotId, subId),
-                        UceControllerManager.class);
+                c.addFeature(mFeatureFactory.createUceControllerManager(
+                        mContext, slotId, subId, mFeatureFlags), UceControllerManager.class);
             }
         } else {
             if (c.getFeature(UceControllerManager.class) != null) {
diff --git a/src/com/android/services/telephony/rcs/UceControllerManager.java b/src/com/android/services/telephony/rcs/UceControllerManager.java
index 02ae048..b7e12a3 100644
--- a/src/com/android/services/telephony/rcs/UceControllerManager.java
+++ b/src/com/android/services/telephony/rcs/UceControllerManager.java
@@ -32,6 +32,7 @@
 import com.android.ims.RcsFeatureManager;
 import com.android.ims.rcs.uce.UceController;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.FeatureFlags;
 
 import java.io.PrintWriter;
 import java.util.List;
@@ -53,15 +54,17 @@
     private final int mSlotId;
     private final Context mContext;
     private final ExecutorService mExecutorService;
+    private final FeatureFlags mFeatureFlags;
 
     private volatile @Nullable UceController mUceController;
     private volatile @Nullable RcsFeatureManager mRcsFeatureManager;
 
-    public UceControllerManager(Context context, int slotId, int subId) {
+    public UceControllerManager(Context context, int slotId, int subId, FeatureFlags featureFlags) {
         Log.d(LOG_TAG, "create: slotId=" + slotId + ", subId=" + subId);
         mSlotId = slotId;
         mContext = context;
         mExecutorService = Executors.newSingleThreadExecutor();
+        mFeatureFlags = featureFlags;
         initUceController(subId);
     }
 
@@ -70,11 +73,12 @@
      */
     @VisibleForTesting
     public UceControllerManager(Context context, int slotId, ExecutorService executor,
-            UceController uceController) {
+            UceController uceController, FeatureFlags featureFlags) {
         mSlotId = slotId;
         mContext = context;
         mExecutorService = executor;
         mUceController = uceController;
+        mFeatureFlags = featureFlags;
     }
 
     @Override
@@ -440,7 +444,7 @@
         if (mUceController == null) {
             // Create new UceController only when the subscription ID is valid.
             if (SubscriptionManager.isValidSubscriptionId(newSubId)) {
-                mUceController = new UceController(mContext, newSubId);
+                mUceController = new UceController(mContext, newSubId, mFeatureFlags);
             }
         } else if (mUceController.getSubId() != newSubId) {
             // The subscription ID is updated. Remove the old UceController instance.
@@ -448,7 +452,7 @@
             mUceController = null;
             // Create new UceController only when the subscription ID is valid.
             if (SubscriptionManager.isValidSubscriptionId(newSubId)) {
-                mUceController = new UceController(mContext, newSubId);
+                mUceController = new UceController(mContext, newSubId, mFeatureFlags);
             }
         }
     }