From 9769677a3cf57f84eb7992b5f31d94df55b3d01d Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Mon, 9 Nov 2020 12:49:35 +0800 Subject: [PATCH] [Settings] Add voice call status and VoLTE mode detection into VoLTE UI test case 1. VoLTE UI should gray out during voice call. 2. UI should be invisible when VoLTE mode mismatch. Bug: 172781455 Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gBasePreferenceControllerTest Merged-In: I8b6a212dc727f1ab78f4dd280cb41966b7054180 (cherry picked from commit 227329b2f7648852016e7ec8aa43765f6bef3570) Change-Id: I1bd239b6434038323a0689e2bc3bf05182bfcd45 --- .../Enhanced4gBasePreferenceController.java | 10 +++++-- ...nhanced4gBasePreferenceControllerTest.java | 29 ++++++++++++++++--- 2 files changed, 32 insertions(+), 7 deletions(-) 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);