Added flag to enable subscription manager service through adb

Test: Boot up and basic phone testing
Test: adb root && adb shell device_config put telephony enable_subscription_manager_service true
      && adb shell device_config set_sync_disabled_for_tests persistent && sleep 3 && adb reboot
Fix: 266896752
Change-Id: I14ff642402929bcfd39e6c20c50588ef8eec4eed
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index da63822..0bc46dd 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -42,6 +42,7 @@
 import android.os.UserManager;
 import android.os.WorkSource;
 import android.preference.PreferenceManager;
+import android.provider.DeviceConfig;
 import android.sysprop.TelephonyProperties;
 import android.telecom.VideoProfile;
 import android.telephony.AccessNetworkConstants;
@@ -627,8 +628,11 @@
         // Initialize SMS stats
         mSmsStats = new SmsStats(this);
 
+        // This is a temp flag which will be removed before U AOSP public release.
         mIsSubscriptionManagerServiceEnabled = mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_using_subscription_manager_service);
+                com.android.internal.R.bool.config_using_subscription_manager_service)
+                || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY,
+                "enable_subscription_manager_service", false);
         if (isSubscriptionManagerServiceEnabled()) {
             mSubscriptionManagerService = SubscriptionManagerService.getInstance();
         }
diff --git a/src/java/com/android/internal/telephony/PhoneFactory.java b/src/java/com/android/internal/telephony/PhoneFactory.java
index c69f844..e926607 100644
--- a/src/java/com/android/internal/telephony/PhoneFactory.java
+++ b/src/java/com/android/internal/telephony/PhoneFactory.java
@@ -34,6 +34,7 @@
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.preference.PreferenceManager;
+import android.provider.DeviceConfig;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 import android.telephony.AnomalyReporter;
@@ -124,8 +125,11 @@
             if (!sMadeDefaults) {
                 sContext = context;
 
+                // This is a temp flag which will be removed before U AOSP public release.
                 sSubscriptionManagerServiceEnabled = context.getResources().getBoolean(
-                        com.android.internal.R.bool.config_using_subscription_manager_service);
+                        com.android.internal.R.bool.config_using_subscription_manager_service)
+                        || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY,
+                        "enable_subscription_manager_service", false);
 
                 // create the telephony device controller.
                 TelephonyDevController.create();
diff --git a/src/java/com/android/internal/telephony/SubscriptionController.java b/src/java/com/android/internal/telephony/SubscriptionController.java
index 6f74147..bbdba56 100644
--- a/src/java/com/android/internal/telephony/SubscriptionController.java
+++ b/src/java/com/android/internal/telephony/SubscriptionController.java
@@ -79,6 +79,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.data.PhoneSwitcher;
 import com.android.internal.telephony.metrics.TelephonyMetrics;
+import com.android.internal.telephony.subscription.SubscriptionManagerService;
 import com.android.internal.telephony.uicc.IccUtils;
 import com.android.internal.telephony.uicc.UiccCard;
 import com.android.internal.telephony.uicc.UiccController;
@@ -403,6 +404,8 @@
                     }
                 });
 
+        SubscriptionManager.invalidateSubscriptionManagerServiceEnabledCaches();
+
         if (DBG) logdl("[SubscriptionController] init by Context");
     }
 
@@ -4953,6 +4956,16 @@
     }
 
     /**
+     * @return {@code true} if using {@link SubscriptionManagerService} instead of
+     * {@link SubscriptionController}.
+     */
+    //TODO: Removed before U AOSP public release.
+    @Override
+    public boolean isSubscriptionManagerServiceEnabled() {
+        return false;
+    }
+
+    /**
      * @hide
      */
     private void setGlobalSetting(String name, int value) {
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index e81ba33..b4bfd0b 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -82,6 +82,7 @@
 import com.android.internal.telephony.MultiSimSettingController;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.SubscriptionController;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyPermissions;
 import com.android.internal.telephony.data.PhoneSwitcher;
@@ -542,6 +543,9 @@
                 mEuiccController = EuiccController.get();
             }
         });
+
+        SubscriptionManager.invalidateSubscriptionManagerServiceCaches();
+        SubscriptionManager.invalidateSubscriptionManagerServiceEnabledCaches();
     }
 
     /**
@@ -3566,6 +3570,16 @@
     }
 
     /**
+     * @return {@code true} if using {@link SubscriptionManagerService} instead of
+     * {@link SubscriptionController}.
+     */
+    //TODO: Removed before U AOSP public release.
+    @Override
+    public boolean isSubscriptionManagerServiceEnabled() {
+        return true;
+    }
+
+    /**
      * Register the callback for receiving information from {@link SubscriptionManagerService}.
      *
      * @param callback The callback.