From 8e6bc6f2897195345f9c4e16597cb09cb281cddb Mon Sep 17 00:00:00 2001 From: songferngwang Date: Thu, 3 Oct 2024 13:49:56 +0000 Subject: [PATCH] VideoCalling UI adds the init value Bug: 367696228 Test: atest VideoCallingPreferenceControllerTest Flag: EXEMPT bugfix Change-Id: I1a1de9e3174a9211be619c96c104607f831b51a2 --- .../VideoCallingPreferenceController.kt | 20 +++++---- .../VideoCallingPreferenceControllerTest.kt | 45 +++++++++++++++++++ 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.kt b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.kt index e6b3f315425..f73bcdaf81f 100644 --- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.kt +++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.kt @@ -44,12 +44,12 @@ constructor( context: Context, key: String, private val callStateRepository: CallStateRepository = CallStateRepository(context), + private val videoCallingRepository: VideoCallingRepository = VideoCallingRepository(context), ) : TogglePreferenceController(context, key), On4gLteUpdateListener { private var subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID private var preference: TwoStatePreference? = null private var callingPreferenceCategoryController: CallingPreferenceCategoryController? = null - private val repository = VideoCallingRepository(context) private var videoCallEditable = false private var isInCall = false @@ -71,14 +71,18 @@ constructor( override fun displayPreference(screen: PreferenceScreen) { super.displayPreference(screen) preference = screen.findPreference(preferenceKey) + Log.d(TAG, "init ui") + preference?.isVisible = false + callingPreferenceCategoryController?.updateChildVisible(preferenceKey, false) } override fun onViewCreated(viewLifecycleOwner: LifecycleOwner) { - repository.isVideoCallReadyFlow(subId).collectLatestWithLifecycle(viewLifecycleOwner) { - isReady -> - preference?.isVisible = isReady - callingPreferenceCategoryController?.updateChildVisible(preferenceKey, isReady) - } + videoCallingRepository.isVideoCallReadyFlow(subId) + .collectLatestWithLifecycle(viewLifecycleOwner) { isReady -> + Log.d(TAG, "isVideoCallReadyFlow: update visible") + preference?.isVisible = isReady + callingPreferenceCategoryController?.updateChildVisible(preferenceKey, isReady) + } callStateRepository.callStateFlow(subId).collectLatestWithLifecycle(viewLifecycleOwner) { callState -> isInCall = callState != TelephonyManager.CALL_STATE_IDLE @@ -129,10 +133,10 @@ constructor( class VideoCallingSearchItem(private val context: Context) : MobileNetworkSettingsSearchItem { - private val repository = VideoCallingRepository(context) + private val videoCallingRepository = VideoCallingRepository(context) private fun isAvailable(subId: Int): Boolean = runBlocking { - repository.isVideoCallReadyFlow(subId).first() + videoCallingRepository.isVideoCallReadyFlow(subId).first() } override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? { diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.kt index 4babfaae301..b9bda771299 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.kt @@ -47,6 +47,8 @@ class VideoCallingPreferenceControllerTest { private val context: Context = ApplicationProvider.getApplicationContext() private val mockCallStateRepository = mock {} + private val mockVideoCallingRepository = mock {} + private var controller = spy( @@ -54,6 +56,7 @@ class VideoCallingPreferenceControllerTest { context = context, key = TEST_KEY, callStateRepository = mockCallStateRepository, + videoCallingRepository = mockVideoCallingRepository ) ) { on { queryImsState(SUB_ID) } doReturn mockVtQueryImsState @@ -70,6 +73,42 @@ class VideoCallingPreferenceControllerTest { controller.displayPreference(preferenceScreen) } + + @Test + fun displayPreference_uiInitState_isHidden() { + assertThat(preference.isVisible).isFalse() + } + + @Test + fun onViewCreated_videoCallIsNotReady_isHidden() = runBlocking { + mockVideoCallingRepository.stub { + on { isVideoCallReadyFlow(SUB_ID) } doReturn flowOf(false) + } + mockCallStateRepository.stub { + on { callStateFlow(SUB_ID) } doReturn flowOf(TelephonyManager.CALL_STATE_IDLE) + } + + controller.onViewCreated(TestLifecycleOwner()) + delay(100) + + assertThat(preference.isVisible).isFalse() + } + + @Test + fun onViewCreated_videoCallIsNotReady_isShown() = runBlocking { + mockVideoCallingRepository.stub { + on { isVideoCallReadyFlow(SUB_ID) } doReturn flowOf(true) + } + mockCallStateRepository.stub { + on { callStateFlow(SUB_ID) } doReturn flowOf(TelephonyManager.CALL_STATE_IDLE) + } + + controller.onViewCreated(TestLifecycleOwner()) + delay(100) + + assertThat(preference.isVisible).isTrue() + } + @Test fun updateState_4gLteOff_disabledAndUnchecked() { mockQueryVoLteState.stub { on { isEnabledByUser } doReturn false } @@ -82,6 +121,9 @@ class VideoCallingPreferenceControllerTest { @Test fun updateState_4gLteOnWithoutCall_enabledAndChecked() = runBlocking { + mockVideoCallingRepository.stub { + on { isVideoCallReadyFlow(SUB_ID) } doReturn flowOf(true) + } mockVtQueryImsState.stub { on { isEnabledByUser } doReturn true on { isAllowUserControl } doReturn true @@ -101,6 +143,9 @@ class VideoCallingPreferenceControllerTest { @Test fun updateState_4gLteOnWithCall_disabledAndChecked() = runBlocking { + mockVideoCallingRepository.stub { + on { isVideoCallReadyFlow(SUB_ID) } doReturn flowOf(true) + } mockVtQueryImsState.stub { on { isEnabledByUser } doReturn true on { isAllowUserControl } doReturn true