RTT bugfixes and logging am: 27fc842412 am: 0dfbcc7373
am: 6e66ce3cf4  -s ours

Change-Id: I280b00d102d35c7987164778c5aca3616d17ab38
diff --git a/src/java/com/android/ims/ImsCall.java b/src/java/com/android/ims/ImsCall.java
index 1d728a1..40d9faa 100644
--- a/src/java/com/android/ims/ImsCall.java
+++ b/src/java/com/android/ims/ImsCall.java
@@ -605,6 +605,12 @@
     private int mOverrideReason = ImsReasonInfo.CODE_UNSPECIFIED;
 
     /**
+     * When true, if this call is incoming, it will be answered with an
+     * {@link ImsStreamMediaProfile} that has RTT enabled.
+     */
+    private boolean mAnswerWithRtt = false;
+
+    /**
      * Create an IMS call object.
      *
      * @param context the context for accessing system services
@@ -1135,6 +1141,11 @@
     public void accept(int callType, ImsStreamMediaProfile profile) throws ImsException {
         logi("accept :: callType=" + callType + ", profile=" + profile);
 
+        if (mAnswerWithRtt) {
+            profile.mRttMode = ImsStreamMediaProfile.RTT_MODE_FULL;
+            logi("accept :: changing media profile RTT mode to full");
+        }
+
         synchronized(mLockObj) {
             if (mSession == null) {
                 throw new ImsException("No call to answer",
@@ -1681,6 +1692,10 @@
         }
     }
 
+    public void setAnswerWithRtt() {
+        mAnswerWithRtt = true;
+    }
+
     private void clear(ImsReasonInfo lastReasonInfo) {
         mInCall = false;
         mHold = false;
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 6fc1292..0a0eb24 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -245,9 +245,12 @@
 
     /**
      * Returns the user configuration of Enhanced 4G LTE Mode setting for slot. If the option is
-     * not editable ({@link CarrierConfigManager#KEY_EDITABLE_ENHANCED_4G_LTE_BOOL} is false),
-     * this method will return default value specified by
+     * not editable ({@link CarrierConfigManager#KEY_EDITABLE_ENHANCED_4G_LTE_BOOL} is false), or
+     * the setting is not initialized, this method will return default value specified by
      * {@link CarrierConfigManager#KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL}.
+     *
+     * Note that even if the setting was set, it may no longer be editable. If this is the case we
+     * return the default value.
      */
     public boolean isEnhanced4gLteModeSettingEnabledByUser() {
         int setting = SubscriptionManager.getIntegerSubscriptionProperty(
@@ -546,7 +549,8 @@
                 SUB_PROPERTY_NOT_INITIALIZED, mContext);
 
         // If it's never set, by default we return true.
-        return (setting == SUB_PROPERTY_NOT_INITIALIZED || setting == 1);
+        return (setting == SUB_PROPERTY_NOT_INITIALIZED
+                || setting == ImsConfig.FeatureValueConstants.ON);
     }
 
     /**
@@ -656,7 +660,7 @@
             return getBooleanCarrierConfig(
                     CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL);
         } else {
-            return setting == 1;
+            return setting == ImsConfig.FeatureValueConstants.ON;
         }
     }
 
@@ -936,7 +940,7 @@
             return getBooleanCarrierConfig(
                             CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL);
         } else {
-            return (setting == 1);
+            return setting == ImsConfig.FeatureValueConstants.ON;
         }
     }
 
@@ -2083,7 +2087,9 @@
     public void factoryReset() {
         // Set VoLTE to default
         SubscriptionManager.setSubscriptionProperty(getSubId(),
-                SubscriptionManager.ENHANCED_4G_MODE_ENABLED, booleanToPropertyString(true));
+                SubscriptionManager.ENHANCED_4G_MODE_ENABLED,
+                booleanToPropertyString(getBooleanCarrierConfig(
+                        CarrierConfigManager.KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL)));
 
         // Set VoWiFi to default
         SubscriptionManager.setSubscriptionProperty(getSubId(),