diff --git a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java index dc915af2d06..0484632a774 100644 --- a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java +++ b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java @@ -57,8 +57,7 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc private boolean mShow5gLimitedDialog; boolean mIsNrEnabledFromCarrierConfig; private boolean mHas5gCapability; - @VisibleForTesting - Integer mCallState; + private Integer mCallState; private final List m4gLteListeners; protected static final int MODE_NONE = -1; @@ -199,8 +198,13 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc return new VolteQueryImsState(mContext, subId); } + @VisibleForTesting + boolean isCallStateIdle() { + return (mCallState != null) && (mCallState == TelephonyManager.CALL_STATE_IDLE); + } + private boolean isUserControlAllowed(final PersistableBundle carrierConfig) { - return (mCallState != null) && (mCallState == TelephonyManager.CALL_STATE_IDLE) + return isCallStateIdle() && (carrierConfig != null) && carrierConfig.getBoolean( CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL); diff --git a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java index 598f30ae06d..d107814fe32 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java @@ -79,6 +79,9 @@ public class Enhanced4gBasePreferenceControllerTest { mCarrierConfig = new PersistableBundle(); doReturn(mCarrierConfig).when(mCarrierConfigManager).getConfigForSubId(SUB_ID); + mCarrierConfig.putBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL, false); + mCarrierConfig.putBoolean(CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL, true); + mCarrierConfig.putInt(CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT, 1); mQueryImsState = spy(new MockVolteQueryImsState(mContext, SUB_ID)); mQueryImsState.setEnabledByPlatform(true); @@ -91,6 +94,8 @@ public class Enhanced4gBasePreferenceControllerTest { mController = spy(new Enhanced4gLtePreferenceController(mContext, "VoLTE")); mController.init(SUB_ID); doReturn(mQueryImsState).when(mController).queryImsState(anyInt()); + doReturn(true).when(mController).isCallStateIdle(); + doReturn(1).when(mController).getMode(); mPreference.setKey(mController.getPreferenceKey()); } @@ -105,6 +110,16 @@ public class Enhanced4gBasePreferenceControllerTest { BasePreferenceController.CONDITIONALLY_UNAVAILABLE); } + @Test + public void getAvailabilityStatus_modeMismatch_returnUnavailable() { + doReturn(2).when(mController).getMode(); + + mController.init(SUB_ID); + + assertThat(mController.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.CONDITIONALLY_UNAVAILABLE); + } + @Test public void getAvailabilityStatus_volteDisabled_returnUnavailable() { mQueryImsState.setEnabledByPlatform(false); @@ -115,17 +130,23 @@ public class Enhanced4gBasePreferenceControllerTest { @Test public void updateState_configEnabled_prefEnabled() { - mQueryImsState.setIsEnabledByUser(true); mPreference.setEnabled(false); - mCarrierConfig.putInt(CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT, 1); - mController.mCallState = TelephonyManager.CALL_STATE_IDLE; - mCarrierConfig.putBoolean(CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL, true); mController.updateState(mPreference); assertThat(mPreference.isEnabled()).isTrue(); } + @Test + public void updateState_callStateNotIdle_prefDisabled() { + doReturn(false).when(mController).isCallStateIdle(); + mPreference.setEnabled(true); + + mController.updateState(mPreference); + + assertThat(mPreference.isEnabled()).isFalse(); + } + @Test public void updateState_configOn_prefChecked() { mQueryImsState.setIsEnabledByUser(true);