diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java index 9c5a98ef01d..a9606abd528 100644 --- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java +++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java @@ -54,6 +54,8 @@ public class EnabledNetworkModePreferenceController extends public int getAvailabilityStatus(int subId) { boolean visible; final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId); + final TelephonyManager telephonyManager = TelephonyManager + .from(mContext).createForSubscriptionId(subId); if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { visible = false; } else if (carrierConfig == null) { @@ -63,8 +65,8 @@ public class EnabledNetworkModePreferenceController extends visible = false; } else if (carrierConfig.getBoolean( CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL) - && !mTelephonyManager.getServiceState().getRoaming() - && mTelephonyManager.getServiceState().getDataRegState() + && !telephonyManager.getServiceState().getRoaming() + && telephonyManager.getServiceState().getDataRegState() == ServiceState.STATE_IN_SERVICE) { visible = false; } else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) { diff --git a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java index 27a7bce5bb2..294f05f2ae5 100644 --- a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java +++ b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java @@ -30,7 +30,6 @@ import androidx.preference.Preference; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; import com.android.settings.R; -import com.android.settings.core.BasePreferenceController; /** * Preference controller for "Preferred network mode" @@ -51,6 +50,8 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe @Override public int getAvailabilityStatus(int subId) { final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId); + final TelephonyManager telephonyManager = TelephonyManager + .from(mContext).createForSubscriptionId(subId); boolean visible; if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { visible = false; @@ -61,8 +62,8 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe visible = false; } else if (carrierConfig.getBoolean( CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL) - && !mTelephonyManager.getServiceState().getRoaming() - && mTelephonyManager.getServiceState().getDataRegState() + && !telephonyManager.getServiceState().getRoaming() + && telephonyManager.getServiceState().getDataRegState() == ServiceState.STATE_IN_SERVICE) { visible = false; } else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) { diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java index 44984e65dc3..8c32df0ee12 100644 --- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java @@ -34,7 +34,6 @@ import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.android.ims.ImsManager; -import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; @@ -49,7 +48,6 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC private Preference mPreference; private TelephonyManager mTelephonyManager; private CarrierConfigManager mCarrierConfigManager; - private PersistableBundle mCarrierConfig; @VisibleForTesting ImsManager mImsManager; private PhoneCallStateListener mPhoneStateListener; @@ -67,7 +65,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && MobileNetworkUtils.isWifiCallingEnabled(mContext, SubscriptionManager.getPhoneId(subId)) - && isVideoCallEnabled() + && isVideoCallEnabled(subId) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @@ -94,7 +92,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC public void updateState(Preference preference) { super.updateState(preference); final SwitchPreference switchPreference = (SwitchPreference) preference; - final boolean videoCallEnabled = isVideoCallEnabled(); + final boolean videoCallEnabled = isVideoCallEnabled(mSubId, mImsManager); switchPreference.setVisible(videoCallEnabled); if (videoCallEnabled) { final boolean is4gLteEnabled = mImsManager.isEnhanced4gLteModeSettingEnabledByUser() @@ -119,7 +117,6 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC public VideoCallingPreferenceController init(int subId) { mSubId = subId; mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId); - mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId); if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId)); } @@ -127,15 +124,25 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC return this; } + private boolean isVideoCallEnabled(int subId) { + final ImsManager imsManager = subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID + ? ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(subId)) + : null; + return isVideoCallEnabled(subId, imsManager); + } + @VisibleForTesting - boolean isVideoCallEnabled() { - return mCarrierConfig != null && mImsManager != null - && mImsManager.isVtEnabledByPlatform() - && mImsManager.isVtProvisionedOnDevice() - && MobileNetworkUtils.isImsServiceStateReady(mImsManager) - && (mCarrierConfig.getBoolean( + boolean isVideoCallEnabled(int subId, ImsManager imsManager) { + final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId); + final TelephonyManager telephonyManager = TelephonyManager + .from(mContext).createForSubscriptionId(subId); + return carrierConfig != null && imsManager != null + && imsManager.isVtEnabledByPlatform() + && imsManager.isVtProvisionedOnDevice() + && MobileNetworkUtils.isImsServiceStateReady(imsManager) + && (carrierConfig.getBoolean( CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS) - || mTelephonyManager.isDataEnabled()); + || telephonyManager.isDataEnabled()); } @Override diff --git a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java index 26c4d06d853..dfa12715f77 100644 --- a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java @@ -67,7 +67,7 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont public int getAvailabilityStatus(int subId) { return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && MobileNetworkUtils.isWifiCallingEnabled(mContext, - SubscriptionManager.getPhoneId(mSubId)) + SubscriptionManager.getPhoneId(subId)) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } diff --git a/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java index a5498bc505f..ea7d82fe14f 100644 --- a/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java +++ b/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java @@ -29,8 +29,8 @@ import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; -import com.android.settings.core.BasePreferenceController; import com.android.settings.network.telephony.MobileNetworkUtils; +import com.android.settings.network.telephony.TelephonyBasePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; @@ -38,7 +38,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop; /** * Preference controller related to CDMA category */ -public abstract class CdmaBasePreferenceController extends BasePreferenceController +public abstract class CdmaBasePreferenceController extends TelephonyBasePreferenceController implements LifecycleObserver, OnStart, OnStop { protected Preference mPreference; @@ -64,8 +64,8 @@ public abstract class CdmaBasePreferenceController extends BasePreferenceControl } @Override - public int getAvailabilityStatus() { - return MobileNetworkUtils.isCdmaOptions(mContext, mSubId) + public int getAvailabilityStatus(int subId) { + return MobileNetworkUtils.isCdmaOptions(mContext, subId) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceController.java index c6538902385..e6c1c22ed10 100644 --- a/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceController.java +++ b/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceController.java @@ -44,8 +44,8 @@ public class CdmaSubscriptionPreferenceController extends CdmaBasePreferenceCont } @Override - public int getAvailabilityStatus() { - return MobileNetworkUtils.isCdmaOptions(mContext, mSubId) && deviceSupportsNvAndRuim() + public int getAvailabilityStatus(int subId) { + return MobileNetworkUtils.isCdmaOptions(mContext, subId) && deviceSupportsNvAndRuim() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java index fdc9f7f23f6..a5d445fc383 100644 --- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java +++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java @@ -29,9 +29,9 @@ import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.core.SubSettingLauncher; -import com.android.settings.core.TogglePreferenceController; import com.android.settings.network.telephony.MobileNetworkUtils; import com.android.settings.network.telephony.NetworkSelectSettings; +import com.android.settings.network.telephony.TelephonyTogglePreferenceController; import java.util.ArrayList; import java.util.List; @@ -39,7 +39,7 @@ import java.util.List; /** * Preference controller for "Auto Select Network" */ -public class AutoSelectPreferenceController extends TogglePreferenceController { +public class AutoSelectPreferenceController extends TelephonyTogglePreferenceController { private int mSubId; private TelephonyManager mTelephonyManager; @@ -54,8 +54,8 @@ public class AutoSelectPreferenceController extends TogglePreferenceController { } @Override - public int getAvailabilityStatus() { - return MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext,mSubId) + public int getAvailabilityStatus(int subId) { + return MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, subId) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java index e8a392a9f38..9ac0d1275a9 100644 --- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java +++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java @@ -33,11 +33,13 @@ import com.android.settings.core.BasePreferenceController; import com.android.settings.core.SubSettingLauncher; import com.android.settings.network.telephony.MobileNetworkUtils; import com.android.settings.network.telephony.NetworkSelectSettings; +import com.android.settings.network.telephony.TelephonyBasePreferenceController; /** * Preference controller for "Open network select" */ -public class OpenNetworkSelectPagePreferenceController extends BasePreferenceController implements +public class OpenNetworkSelectPagePreferenceController extends + TelephonyBasePreferenceController implements AutoSelectPreferenceController.OnNetworkSelectModeListener { private int mSubId; @@ -51,8 +53,8 @@ public class OpenNetworkSelectPagePreferenceController extends BasePreferenceCon } @Override - public int getAvailabilityStatus() { - return MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, mSubId) + public int getAvailabilityStatus(int subId) { + return MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, subId) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java index a0570225854..d904ab3e8b1 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java @@ -84,14 +84,14 @@ public class VideoCallingPreferenceControllerTest { @Test public void isVideoCallEnabled_allFlagsOn_returnTrue() { - assertThat(mController.isVideoCallEnabled()).isTrue(); + assertThat(mController.isVideoCallEnabled(SUB_ID, mImsManager)).isTrue(); } @Test public void isVideoCallEnabled_disabledByPlatform_returnFalse() { doReturn(false).when(mImsManager).isVtEnabledByPlatform(); - assertThat(mController.isVideoCallEnabled()).isFalse(); + assertThat(mController.isVideoCallEnabled(SUB_ID, mImsManager)).isFalse(); } @Test @@ -100,7 +100,7 @@ public class VideoCallingPreferenceControllerTest { CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS, false); doReturn(false).when(mTelephonyManager).isDataEnabled(); - assertThat(mController.isVideoCallEnabled()).isFalse(); + assertThat(mController.isVideoCallEnabled(SUB_ID, mImsManager)).isFalse(); } @Test