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()