Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 042e2ff5 authored by Evan Laird's avatar Evan Laird
Browse files

[sb] Move flows to bgDispatcher

Test: HomeStatusBarViewModelImplTest
Bug: 393610814
Flag: EXEMPT threading bugfix
Change-Id: I41f0fe277bf3e39e9a42afce86ca51611c7a9dea
parent 9d4cbbde
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -88,16 +88,13 @@ import com.android.systemui.statusbar.pipeline.shared.domain.interactor.setHomeS
import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(AndroidJUnit4::class)
class HomeStatusBarViewModelImplTest : SysuiTestCase() {
    private val kosmos = testKosmos().useUnconfinedTestDispatcher()
+17 −7
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.systemui.statusbar.pipeline.shared.ui.viewmodel
import android.annotation.ColorInt
import android.graphics.Rect
import android.view.View
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.Edge
@@ -61,6 +61,7 @@ import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
@@ -71,6 +72,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn

@@ -193,7 +195,8 @@ constructor(
    statusBarPopupChipsViewModel: StatusBarPopupChipsViewModel,
    animations: SystemStatusEventAnimationInteractor,
    statusBarContentInsetsViewModelStore: StatusBarContentInsetsViewModelStore,
    @Application coroutineScope: CoroutineScope,
    @Background bgScope: CoroutineScope,
    @Background bgDispatcher: CoroutineDispatcher,
) : HomeStatusBarViewModel {

    val tableLogger = tableLoggerFactory.getOrCreate(tableLogBufferName(thisDisplayId), 200)
@@ -207,13 +210,14 @@ constructor(
                columnName = COL_LOCK_TO_OCCLUDED,
                initialValue = false,
            )
            .stateIn(coroutineScope, SharingStarted.WhileSubscribed(), initialValue = false)
            .stateIn(bgScope, SharingStarted.WhileSubscribed(), initialValue = false)

    override val transitionFromLockscreenToDreamStartedEvent: Flow<Unit> =
        keyguardTransitionInteractor
            .transition(Edge.create(from = LOCKSCREEN, to = DREAMING))
            .filter { it.transitionState == TransitionState.STARTED }
            .map {}
            .flowOn(bgDispatcher)

    override val mediaProjectionStopDialogDueToCallEndedState =
        shareToAppChipViewModel.stopDialogToShow
@@ -242,7 +246,7 @@ constructor(
                columnName = COL_ALLOWED_BY_SCENE,
                initialValue = false,
            )
            .stateIn(coroutineScope, SharingStarted.WhileSubscribed(), initialValue = false)
            .stateIn(bgScope, SharingStarted.WhileSubscribed(), initialValue = false)

    override val areNotificationsLightsOut: Flow<Boolean> =
        if (NotificationsLiveDataStoreRefactor.isUnexpectedlyInLegacyMode()) {
@@ -261,6 +265,7 @@ constructor(
                columnName = COL_NOTIF_LIGHTS_OUT,
                initialValue = false,
            )
            .flowOn(bgDispatcher)

    override val areaTint: Flow<StatusBarTintColor> =
        darkIconInteractor
@@ -276,6 +281,7 @@ constructor(
            }
            .conflate()
            .distinctUntilChanged()
            .flowOn(bgDispatcher)

    /**
     * True if the current SysUI state can show the home status bar (aka this status bar), and false
@@ -318,6 +324,7 @@ constructor(
                columnName = COL_VISIBLE,
                initialValue = false,
            )
            .flowOn(bgDispatcher)

    private val isAnyChipVisible =
        if (StatusBarNotifChips.isEnabled) {
@@ -361,6 +368,7 @@ constructor(
                columnName = COL_SHOW_OPERATOR_NAME,
                initialValue = false,
            )
            .flowOn(bgDispatcher)

    override val isClockVisible: Flow<VisibilityModel> =
        combine(
@@ -382,6 +390,7 @@ constructor(
                columnPrefix = COL_PREFIX_CLOCK,
                initialValue = VisibilityModel(false.toVisibleOrInvisible(), false),
            )
            .flowOn(bgDispatcher)

    override val isNotificationIconContainerVisible: Flow<VisibilityModel> =
        combine(
@@ -407,6 +416,7 @@ constructor(
                columnPrefix = COL_PREFIX_NOTIF_CONTAINER,
                initialValue = VisibilityModel(false.toVisibleOrInvisible(), false),
            )
            .flowOn(bgDispatcher)

    private val isSystemInfoVisible =
        combine(shouldHomeStatusBarBeVisible, homeStatusBarInteractor.visibilityViaDisableFlags) {
@@ -429,17 +439,17 @@ constructor(
                    SystemInfoCombinedVisibilityModel(VisibilityModel(View.VISIBLE, false), Idle),
            )
            .stateIn(
                coroutineScope,
                bgScope,
                SharingStarted.WhileSubscribed(),
                SystemInfoCombinedVisibilityModel(VisibilityModel(View.VISIBLE, false), Idle),
            )

    override val iconBlockList: Flow<List<String>> =
        homeStatusBarIconBlockListInteractor.iconBlockList
        homeStatusBarIconBlockListInteractor.iconBlockList.flowOn(bgDispatcher)

    override val contentArea: Flow<Rect> =
        statusBarContentInsetsViewModelStore.forDisplay(thisDisplayId)?.contentArea
            ?: flowOf(Rect(0, 0, 0, 0))
            ?: flowOf(Rect(0, 0, 0, 0)).flowOn(bgDispatcher)

    @View.Visibility
    private fun Boolean.toVisibleOrGone(): Int {
+4 −2
Original line number Diff line number Diff line
@@ -20,7 +20,8 @@ import android.content.testableContext
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.backgroundScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.log.table.tableLogBufferFactory
import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
@@ -59,6 +60,7 @@ var Kosmos.homeStatusBarViewModel: HomeStatusBarViewModel by
            statusBarPopupChipsViewModel,
            systemStatusEventAnimationInteractor,
            multiDisplayStatusBarContentInsetsViewModelStore,
            applicationCoroutineScope,
            backgroundScope,
            testDispatcher,
        )
    }