Ensure IMS is turned On or Off when synchronizing settings with ImsConfig
Bug: 23219836
Change-Id: I0830bf6071841d2822038f737d935351a9ddebe4
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 2ca2b19..c787bbc 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -461,9 +461,17 @@
final ImsManager imsManager = ImsManager.getInstance(context, phoneId);
if (imsManager != null && (!imsManager.mConfigUpdated || force)) {
try {
- imsManager.updateVolteFeatureValue();
- imsManager.updateVideoCallFeatureValue();
- imsManager.updateWfcFeatureAndProvisionedValues();
+ boolean turnOn = imsManager.updateVolteFeatureValue();
+ turnOn |= imsManager.updateVideoCallFeatureValue();
+ turnOn |= imsManager.updateWfcFeatureAndProvisionedValues();
+
+ if (turnOn) {
+ imsManager.turnOnIms();
+ } else if (getBooleanCarrierConfig(context,
+ CarrierConfigManager.KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL)) {
+ imsManager.turnOffIms();
+ }
+
imsManager.mConfigUpdated = true;
} catch (ImsException e) {
loge("updateImsServiceConfig: " + e);
@@ -472,10 +480,16 @@
}
}
- private void updateVolteFeatureValue() throws ImsException {
+ /**
+ * Update VoLTE config
+ * @return whether feature is On
+ * @throws ImsException
+ */
+ private boolean updateVolteFeatureValue() throws ImsException {
boolean available = isVolteEnabledByPlatform(mContext);
boolean enabled = isEnhanced4gLteModeSettingEnabledByUser(mContext);
boolean isNonTty = isNonTtyOrTtyOnVolteEnabled(mContext);
+ boolean turnOn = available && enabled && isNonTty;
log("updateVolteFeatureValue: available = " + available
+ ", enabled = " + enabled
@@ -484,13 +498,20 @@
getConfigInterface().setFeatureValue(
ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE,
TelephonyManager.NETWORK_TYPE_LTE,
- (available && enabled && isNonTty) ?
+ turnOn ?
ImsConfig.FeatureValueConstants.ON :
ImsConfig.FeatureValueConstants.OFF,
null);
+
+ return turnOn;
}
- private void updateVideoCallFeatureValue() throws ImsException {
+ /**
+ * Update VC config
+ * @return whether feature is On
+ * @throws ImsException
+ */
+ private boolean updateVideoCallFeatureValue() throws ImsException {
boolean available = isVtEnabledByPlatform(mContext);
SharedPreferences sharedPrefs =
PreferenceManager.getDefaultSharedPreferences(mContext);
@@ -499,6 +520,7 @@
boolean isNonTty = Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.PREFERRED_TTY_MODE, TelecomManager.TTY_MODE_OFF)
== TelecomManager.TTY_MODE_OFF;
+ boolean turnOn = available && enabled && isNonTty;
log("updateVideoCallFeatureValue: available = " + available
+ ", enabled = " + enabled
@@ -507,17 +529,25 @@
getConfigInterface().setFeatureValue(
ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_LTE,
TelephonyManager.NETWORK_TYPE_LTE,
- (available && enabled && isNonTty) ?
+ turnOn ?
ImsConfig.FeatureValueConstants.ON :
ImsConfig.FeatureValueConstants.OFF,
null);
+
+ return turnOn;
}
- private void updateWfcFeatureAndProvisionedValues() throws ImsException {
+ /**
+ * Update WFC config
+ * @return whether feature is On
+ * @throws ImsException
+ */
+ private boolean updateWfcFeatureAndProvisionedValues() throws ImsException {
boolean available = isWfcEnabledByPlatform(mContext);
boolean enabled = isWfcEnabledByUser(mContext);
int mode = getWfcMode(mContext);
boolean roaming = isWfcRoamingEnabledByUser(mContext);
+ boolean turnOn = available && enabled;
log("updateWfcFeatureAndProvisionedValues: available = " + available
+ ", enabled = " + enabled
@@ -527,17 +557,19 @@
getConfigInterface().setFeatureValue(
ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_LTE,
TelephonyManager.NETWORK_TYPE_LTE,
- (available && enabled) ?
+ turnOn ?
ImsConfig.FeatureValueConstants.ON :
ImsConfig.FeatureValueConstants.OFF,
null);
- if (!available || !enabled) {
+ if (!turnOn) {
mode = ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED;
roaming = false;
}
setWfcModeInternal(mContext, mode);
setWfcRoamingSettingInternal(mContext, roaming);
+
+ return turnOn;
}
private ImsManager(Context context, int phoneId) {