Add work profile feature flag

Fix: 296290011
Test: basic voice call + data browsing
Change-Id: I8404d5c68324dc6764eb2e238227883276fc7898
diff --git a/Android.bp b/Android.bp
index 66cca32..b56ee2a 100644
--- a/Android.bp
+++ b/Android.bp
@@ -108,6 +108,7 @@
         "telephony-protos",
         "modules-utils-build_system",
         "modules-utils-statemachine",
+        "telephony_flags-lib",
     ],
 
     optimize: {
diff --git a/flags/Android.bp b/flags/Android.bp
new file mode 100644
index 0000000..184f716
--- /dev/null
+++ b/flags/Android.bp
@@ -0,0 +1,37 @@
+//
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+aconfig_declarations {
+    name: "telephony_flags",
+    package: "com.android.internal.telephony.flags",
+    srcs: [
+      "data.aconfig",
+      "ims.aconfig",
+      "messaging.aconfig",
+      "misc.aconfig",
+      "subscription.aconfig",
+      "uicc.aconfig",
+    ],
+}
+
+java_aconfig_library {
+    name: "telephony_flags-lib",
+    aconfig_declarations: "telephony_flags"
+}
diff --git a/flags/data.aconfig b/flags/data.aconfig
new file mode 100644
index 0000000..9a5b506
--- /dev/null
+++ b/flags/data.aconfig
@@ -0,0 +1 @@
+package: "com.android.internal.telephony.flags"
diff --git a/flags/ims.aconfig b/flags/ims.aconfig
new file mode 100644
index 0000000..84e491e
--- /dev/null
+++ b/flags/ims.aconfig
@@ -0,0 +1 @@
+package: "com.android.internal.telephony.flags"
\ No newline at end of file
diff --git a/flags/messaging.aconfig b/flags/messaging.aconfig
new file mode 100644
index 0000000..84e491e
--- /dev/null
+++ b/flags/messaging.aconfig
@@ -0,0 +1 @@
+package: "com.android.internal.telephony.flags"
\ No newline at end of file
diff --git a/flags/misc.aconfig b/flags/misc.aconfig
new file mode 100644
index 0000000..84e491e
--- /dev/null
+++ b/flags/misc.aconfig
@@ -0,0 +1 @@
+package: "com.android.internal.telephony.flags"
\ No newline at end of file
diff --git a/flags/subscription.aconfig b/flags/subscription.aconfig
new file mode 100644
index 0000000..0521cb9
--- /dev/null
+++ b/flags/subscription.aconfig
@@ -0,0 +1,8 @@
+package: "com.android.internal.telephony.flags"
+
+flag {
+  name: "work_profile_api_split"
+  namespace: "telephony"
+  description: "To support separation between personal and work from TelephonyManager and SubscriptionManager API perspective."
+  bug: "296076674"
+}
\ No newline at end of file
diff --git a/flags/uicc.aconfig b/flags/uicc.aconfig
new file mode 100644
index 0000000..84e491e
--- /dev/null
+++ b/flags/uicc.aconfig
@@ -0,0 +1 @@
+package: "com.android.internal.telephony.flags"
\ No newline at end of file
diff --git a/src/java/com/android/internal/telephony/PhoneFactory.java b/src/java/com/android/internal/telephony/PhoneFactory.java
index 57a375b..1b05ffd 100644
--- a/src/java/com/android/internal/telephony/PhoneFactory.java
+++ b/src/java/com/android/internal/telephony/PhoneFactory.java
@@ -23,6 +23,7 @@
 
 import static java.util.Arrays.copyOf;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.ComponentName;
@@ -47,6 +48,7 @@
 import com.android.internal.telephony.data.TelephonyNetworkFactory;
 import com.android.internal.telephony.euicc.EuiccCardController;
 import com.android.internal.telephony.euicc.EuiccController;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.imsphone.ImsPhoneFactory;
 import com.android.internal.telephony.metrics.MetricsCollector;
@@ -105,8 +107,12 @@
 
     //***** Class Methods
 
-    public static void makeDefaultPhones(Context context) {
-        makeDefaultPhone(context);
+    /**
+     * @param context The context.
+     * @param featureFlags The feature flag.
+     */
+    public static void makeDefaultPhones(Context context, @NonNull FeatureFlags featureFlags) {
+        makeDefaultPhone(context, featureFlags);
     }
 
     /**
@@ -114,7 +120,7 @@
      * instances
      */
     @UnsupportedAppUsage
-    public static void makeDefaultPhone(Context context) {
+    public static void makeDefaultPhone(Context context, @NonNull FeatureFlags featureFlags) {
         synchronized (sLockProxyPhones) {
             if (!sMadeDefaults) {
                 sContext = context;
@@ -198,7 +204,7 @@
 
                 Rlog.i(LOG_TAG, "Creating SubscriptionManagerService");
                 sSubscriptionManagerService = new SubscriptionManagerService(context,
-                        Looper.myLooper());
+                        Looper.myLooper(), featureFlags);
 
                 TelephonyComponentFactory.getInstance().inject(MultiSimSettingController.class.
                         getName()).initMultiSimSettingController(context);
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index 8c8620e..8a35649 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -95,6 +95,7 @@
 import com.android.internal.telephony.TelephonyPermissions;
 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.subscription.SubscriptionDatabaseManager.SubscriptionDatabaseManagerCallback;
 import com.android.internal.telephony.uicc.IccRecords;
 import com.android.internal.telephony.uicc.IccUtils;
@@ -194,6 +195,10 @@
     @NonNull
     private final Context mContext;
 
+    /** Feature flags */
+    @NonNull
+    private final FeatureFlags mFeatureFlags;
+
     /** App Ops manager instance. */
     @NonNull
     private final AppOpsManager mAppOpsManager;
@@ -406,10 +411,12 @@
      * @param context The context
      * @param looper The looper for the handler.
      */
-    public SubscriptionManagerService(@NonNull Context context, @NonNull Looper looper) {
+    public SubscriptionManagerService(@NonNull Context context, @NonNull Looper looper,
+            @NonNull FeatureFlags featureFlags) {
         logl("Created SubscriptionManagerService");
         sInstance = this;
         mContext = context;
+        mFeatureFlags = featureFlags;
         mTelephonyManager = context.getSystemService(TelephonyManager.class);
         mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
         mEuiccManager = context.getSystemService(EuiccManager.class);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java b/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java
index aea7965..ab531a6 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java
@@ -104,6 +104,7 @@
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyTest;
 import com.android.internal.telephony.euicc.EuiccController;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.subscription.SubscriptionDatabaseManagerTest.SubscriptionProvider;
 import com.android.internal.telephony.subscription.SubscriptionManagerService.SubscriptionManagerServiceCallback;
 import com.android.internal.telephony.subscription.SubscriptionManagerService.SubscriptionMap;
@@ -153,7 +154,7 @@
     // mocked
     private SubscriptionManagerServiceCallback mMockedSubscriptionManagerServiceCallback;
     private EuiccController mEuiccController;
-
+    private FeatureFlags mFlags;
     private Set<Integer> mActiveSubs = new ArraySet<>();
 
     @Rule
@@ -199,7 +200,9 @@
         ((MockContentResolver) mContext.getContentResolver()).addProvider(
                 Telephony.Carriers.CONTENT_URI.getAuthority(), mSubscriptionProvider);
 
-        mSubscriptionManagerServiceUT = new SubscriptionManagerService(mContext, Looper.myLooper());
+        mFlags = Mockito.mock(FeatureFlags.class);
+        mSubscriptionManagerServiceUT = new SubscriptionManagerService(mContext, Looper.myLooper(),
+                mFlags);
 
         monitorTestableLooper(new TestableLooper(getBackgroundHandler().getLooper()));
         monitorTestableLooper(new TestableLooper(getSubscriptionDatabaseManager().getLooper()));