Sync RTT config from framework to Modem.

1st. For this update, when updateImsServiceconfig is in process, it add
updateRttConfigValue to sync RTT config. It can solve if RTT config
change before factory reset or flash ROM, RTT config in modem side
would be different from framework side.

2nd. To prevent VoLTE config out of sync with modem from
RTT switch change. When RTT config turn on, it will use
setEnhanced4gLteModeSetting instead of setAdvanced4GMode for VoLTE
config sync. When RTT config turn off, it will depend on user's config
to decide VoLTE on or off.

Bug: b/110891445
Test: 1. Manual flip RTT switch and MobileData switch to obserb
      updateImsServiceConfig for checking RTT sync process.
      2. Do factory reset and check solution in process.
      3. Make a RTT call to check config is synced and RTT is work.

Change-Id: Ie44b783d54cc605ba383a3e402df8dea25131919
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index dfff3ff..3dc12f4 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -28,6 +28,7 @@
 import android.os.PersistableBundle;
 import android.os.RemoteException;
 import android.os.SystemProperties;
+import android.provider.Settings;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
 import android.telephony.ims.stub.ImsRegistrationImplBase;
@@ -1287,6 +1288,7 @@
                 boolean isImsUsed = updateVolteFeatureValue();
                 isImsUsed |= updateWfcFeatureAndProvisionedValues();
                 isImsUsed |= updateVideoCallFeatureValue();
+                isImsUsed |= updateRttConfigValue();
 
                 if (isImsUsed || !isTurnOffImsAllowedByPlatform()) {
                     // Turn on IMS if it is used.
@@ -1834,22 +1836,42 @@
         }
     }
 
+    public boolean updateRttConfigValue() {
+        boolean isCarrierSupported =
+                getBooleanCarrierConfig(CarrierConfigManager.KEY_RTT_SUPPORTED_BOOL);
+        boolean isRttEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Secure.RTT_CALLING_MODE, 0) != 0;
+        Log.i(ImsManager.class.getSimpleName(), "update RTT value " + isRttEnabled);
+        if (isCarrierSupported == true) {
+            setRttConfig(isRttEnabled);
+        }
+        return isCarrierSupported && isRttEnabled;
+    }
+
+    private void setRttConfig(boolean enabled) {
+        final int value = enabled ? ImsConfig.FeatureValueConstants.ON :
+                ImsConfig.FeatureValueConstants.OFF;
+        Thread thread = new Thread(() -> {
+            try {
+                Log.i(ImsManager.class.getSimpleName(), "Setting RTT enabled to " + enabled);
+                getConfigInterface().setProvisionedValue(
+                        ImsConfig.ConfigConstants.RTT_SETTING_ENABLED, value);
+            } catch (ImsException e) {
+                Log.e(ImsManager.class.getSimpleName(), "Unable to set RTT value enabled to "
+                        + enabled + ": " + e);
+            }
+        });
+        thread.start();
+    }
+
     public void setRttEnabled(boolean enabled) {
         try {
-            setAdvanced4GMode(enabled || isEnhanced4gLteModeSettingEnabledByUser());
-            final int value = enabled ? ImsConfig.FeatureValueConstants.ON :
-                    ImsConfig.FeatureValueConstants.OFF;
-            Thread thread = new Thread(() -> {
-                try {
-                    Log.i(ImsManager.class.getSimpleName(), "Setting RTT enabled to " + enabled);
-                    getConfigInterface().setProvisionedValue(
-                            ImsConfig.ConfigConstants.RTT_SETTING_ENABLED, value);
-                } catch (ImsException e) {
-                    Log.e(ImsManager.class.getSimpleName(), "Unable to set RTT enabled to "
-                            + enabled + ": " + e);
-                }
-            });
-            thread.start();
+            if (enabled) {
+                setEnhanced4gLteModeSetting(enabled);
+            } else {
+                setAdvanced4GMode(enabled || isEnhanced4gLteModeSettingEnabledByUser());
+            }
+            setRttConfig(enabled);
         } catch (ImsException e) {
             Log.e(ImsManager.class.getSimpleName(), "Unable to set RTT enabled to " + enabled
                     + ": " + e);