Fix isInCallFlow when no active subscription am: c63f06d4c8
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/27205448 Change-Id: I5a58046c3e7ed2a1164648516248b39ee4feb5ef Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -26,6 +26,7 @@ import kotlinx.coroutines.flow.Flow
|
|||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.conflate
|
import kotlinx.coroutines.flow.conflate
|
||||||
import kotlinx.coroutines.flow.flatMapLatest
|
import kotlinx.coroutines.flow.flatMapLatest
|
||||||
|
import kotlinx.coroutines.flow.flowOf
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
|
||||||
@@ -50,10 +51,14 @@ class CallStateRepository(private val context: Context) {
|
|||||||
fun isInCallFlow(): Flow<Boolean> = context.subscriptionsChangedFlow()
|
fun isInCallFlow(): Flow<Boolean> = context.subscriptionsChangedFlow()
|
||||||
.flatMapLatest {
|
.flatMapLatest {
|
||||||
val subIds = subscriptionManager.activeSubscriptionIdList
|
val subIds = subscriptionManager.activeSubscriptionIdList
|
||||||
|
if (subIds.isEmpty()) {
|
||||||
|
flowOf(false)
|
||||||
|
} else {
|
||||||
combine(subIds.map(::callStateFlow)) { states ->
|
combine(subIds.map(::callStateFlow)) { states ->
|
||||||
states.any { it != TelephonyManager.CALL_STATE_IDLE }
|
states.any { it != TelephonyManager.CALL_STATE_IDLE }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.conflate()
|
.conflate()
|
||||||
.flowOn(Dispatchers.Default)
|
.flowOn(Dispatchers.Default)
|
||||||
.onEach { Log.d(TAG, "isInCallFlow: $it") }
|
.onEach { Log.d(TAG, "isInCallFlow: $it") }
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import org.mockito.kotlin.doAnswer
|
|||||||
import org.mockito.kotlin.doReturn
|
import org.mockito.kotlin.doReturn
|
||||||
import org.mockito.kotlin.mock
|
import org.mockito.kotlin.mock
|
||||||
import org.mockito.kotlin.spy
|
import org.mockito.kotlin.spy
|
||||||
|
import org.mockito.kotlin.stub
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class CallStateRepositoryTest {
|
class CallStateRepositoryTest {
|
||||||
@@ -86,6 +87,17 @@ class CallStateRepositoryTest {
|
|||||||
.inOrder()
|
.inOrder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun isInCallFlow_noActiveSubscription() = runBlocking {
|
||||||
|
mockSubscriptionManager.stub {
|
||||||
|
on { activeSubscriptionIdList } doReturn intArrayOf()
|
||||||
|
}
|
||||||
|
|
||||||
|
val isInCall = repository.isInCallFlow().firstWithTimeoutOrNull()
|
||||||
|
|
||||||
|
assertThat(isInCall).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun isInCallFlow_initial() = runBlocking {
|
fun isInCallFlow_initial() = runBlocking {
|
||||||
val isInCall = repository.isInCallFlow().firstWithTimeoutOrNull()
|
val isInCall = repository.isInCallFlow().firstWithTimeoutOrNull()
|
||||||
|
|||||||
Reference in New Issue
Block a user