From c63f06d4c8012ca43e8705e99cf012a1614bff94 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Tue, 7 May 2024 16:37:11 +0800 Subject: [PATCH] Fix isInCallFlow when no active subscription Direct emit false in this case to fix. Fix: 338484668 Test: manual - on SIMs Test: unit test Change-Id: I5286701160d95b1c06e577db6232f7e70f040cdb --- .../network/telephony/CallStateRepository.kt | 9 +++++++-- .../network/telephony/CallStateRepositoryTest.kt | 12 ++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/network/telephony/CallStateRepository.kt b/src/com/android/settings/network/telephony/CallStateRepository.kt index 1c93af32b19..4b6cdc83975 100644 --- a/src/com/android/settings/network/telephony/CallStateRepository.kt +++ b/src/com/android/settings/network/telephony/CallStateRepository.kt @@ -26,6 +26,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.onEach @@ -50,8 +51,12 @@ class CallStateRepository(private val context: Context) { fun isInCallFlow(): Flow = context.subscriptionsChangedFlow() .flatMapLatest { val subIds = subscriptionManager.activeSubscriptionIdList - combine(subIds.map(::callStateFlow)) { states -> - states.any { it != TelephonyManager.CALL_STATE_IDLE } + if (subIds.isEmpty()) { + flowOf(false) + } else { + combine(subIds.map(::callStateFlow)) { states -> + states.any { it != TelephonyManager.CALL_STATE_IDLE } + } } } .conflate() diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/CallStateRepositoryTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/CallStateRepositoryTest.kt index 8213ecf4842..55d520fd214 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/CallStateRepositoryTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/CallStateRepositoryTest.kt @@ -35,6 +35,7 @@ import org.mockito.kotlin.doAnswer import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.spy +import org.mockito.kotlin.stub @RunWith(AndroidJUnit4::class) class CallStateRepositoryTest { @@ -86,6 +87,17 @@ class CallStateRepositoryTest { .inOrder() } + @Test + fun isInCallFlow_noActiveSubscription() = runBlocking { + mockSubscriptionManager.stub { + on { activeSubscriptionIdList } doReturn intArrayOf() + } + + val isInCall = repository.isInCallFlow().firstWithTimeoutOrNull() + + assertThat(isInCall).isFalse() + } + @Test fun isInCallFlow_initial() = runBlocking { val isInCall = repository.isInCallFlow().firstWithTimeoutOrNull()