diff --git a/src/com/android/settings/network/ims/VolteQueryImsState.java b/src/com/android/settings/network/ims/VolteQueryImsState.java index 167b4b13a3e..b09a1304136 100644 --- a/src/com/android/settings/network/ims/VolteQueryImsState.java +++ b/src/com/android/settings/network/ims/VolteQueryImsState.java @@ -16,11 +16,14 @@ package com.android.settings.network.ims; +import static android.telephony.ims.ProvisioningManager.KEY_VOIMS_OPT_IN_STATUS; + import android.content.Context; import android.telecom.TelecomManager; import android.telephony.AccessNetworkConstants; import android.telephony.SubscriptionManager; import android.telephony.ims.ImsException; +import android.telephony.ims.ProvisioningManager; import android.telephony.ims.feature.MmTelFeature; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.Log; @@ -133,4 +136,15 @@ public class VolteQueryImsState extends ImsQueryController { } return isEnabledByUser(mSubId); } + + /** + * Get VoIMS opt-in configuration. + * + * @return true when VoIMS opt-in has been enabled, otherwise false + */ + public boolean isVoImsOptInEnabled() { + int voImsOptInStatus = ProvisioningManager.createForSubscriptionId(mSubId) + .getProvisioningIntValue(KEY_VOIMS_OPT_IN_STATUS); + return voImsOptInStatus == ProvisioningManager.PROVISIONING_VALUE_ENABLED; + } } diff --git a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java index fbbdabc701d..c2b1fc4f453 100644 --- a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java +++ b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java @@ -107,12 +107,18 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc if (!isModeMatched()) { return CONDITIONALLY_UNAVAILABLE; } + final VolteQueryImsState queryState = queryImsState(subId); + // Show VoLTE settings if VoIMS opt-in has been enabled irrespective of other VoLTE settings + if (queryState.isVoImsOptInEnabled()) { + return AVAILABLE; + } + final PersistableBundle carrierConfig = getCarrierConfigForSubId(subId); if ((carrierConfig == null) || carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL)) { return CONDITIONALLY_UNAVAILABLE; } - final VolteQueryImsState queryState = queryImsState(subId); + if (!queryState.isReadyToVoLte()) { return CONDITIONALLY_UNAVAILABLE; }