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

Commit 382da488 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix wildcard scene edges" into main

parents 3474c46f 4b439508
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -33,12 +33,16 @@ import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.utils.GlobalWindowManager
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch

@@ -60,6 +64,7 @@ constructor(
    @Application private val applicationScope: CoroutineScope,
    @Background private val bgDispatcher: CoroutineDispatcher,
    private val featureFlags: FeatureFlags,
    private val sceneInteractor: SceneInteractor,
) : CoreStartable, WakefulnessLifecycle.Observer {

    override fun start() {
@@ -85,13 +90,19 @@ constructor(

        applicationScope.launch(bgDispatcher) {
            // We drop 1 to avoid triggering on initial collect().
            keyguardTransitionInteractor.transition(Edge.create(to = GONE)).collect { transition ->
                if (transition.transitionState == TransitionState.FINISHED) {
            if (SceneContainerFlag.isEnabled) {
                sceneInteractor.transitionState
                    .filter { it.isIdle(Scenes.Gone) }
                    .collect { onKeyguardGone() }
            } else {
                keyguardTransitionInteractor.transition(Edge.create(to = GONE)).collect {
                    if (it.transitionState == TransitionState.FINISHED) {
                        onKeyguardGone()
                    }
                }
            }
        }
    }

    @WorkerThread
    private fun onKeyguardGone() {
+10 −1
Original line number Diff line number Diff line
@@ -25,6 +25,9 @@ import com.android.systemui.keyguard.shared.model.KeyguardDone
import com.android.systemui.keyguard.shared.model.KeyguardState.ALTERNATE_BOUNCER
import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -48,6 +51,7 @@ constructor(
    transitionInteractor: KeyguardTransitionInteractor,
    val dismissInteractor: KeyguardDismissInteractor,
    @Application private val applicationScope: CoroutineScope,
    sceneInteractor: SceneInteractor,
) {
    val dismissAction: Flow<DismissAction> = repository.dismissAction

@@ -72,7 +76,12 @@ constructor(
            )

    private val finishedTransitionToGone: Flow<Unit> =
        transitionInteractor.finishedKeyguardState.filter { it == GONE }.map {} // map to Unit
        if (SceneContainerFlag.isEnabled) {
            sceneInteractor.transitionState.filter { it.isIdle(Scenes.Gone) }.map {}
        } else {
            transitionInteractor.finishedKeyguardState.filter { it == GONE }.map {}
        }

    val executeDismissAction: Flow<() -> KeyguardDone> =
        merge(
                finishedTransitionToGone,
+11 −3
Original line number Diff line number Diff line
@@ -74,6 +74,9 @@ import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.qs.PageIndicator
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shared.system.SysUiStatsLog
import com.android.systemui.shared.system.SysUiStatsLog.SMARTSPACE_CARD_REPORTED
import com.android.systemui.shared.system.SysUiStatsLog.SMART_SPACE_CARD_REPORTED__CARD_TYPE__UNKNOWN_CARD
@@ -143,6 +146,7 @@ constructor(
    private val secureSettings: SecureSettings,
    private val mediaCarouselViewModel: MediaCarouselViewModel,
    private val mediaViewControllerFactory: Provider<MediaViewController>,
    private val sceneInteractor: SceneInteractor,
) : Dumpable {
    /** The current width of the carousel */
    var currentCarouselWidth: Int = 0
@@ -641,9 +645,13 @@ constructor(
    @VisibleForTesting
    internal fun listenForAnyStateToGoneKeyguardTransition(scope: CoroutineScope): Job {
        return scope.launch {
            keyguardTransitionInteractor
                .transition(Edge.create(to = GONE))
                .filter { it.transitionState == TransitionState.FINISHED }
            if (SceneContainerFlag.isEnabled) {
                    sceneInteractor.transitionState.filter { it.isIdle(Scenes.Gone) }
                } else {
                    keyguardTransitionInteractor.transition(Edge.create(to = GONE)).filter {
                        it.transitionState == TransitionState.FINISHED
                    }
                }
                .collect {
                    showMediaCarousel()
                    updateHostVisibility()
+41 −6
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@ import android.platform.test.flag.junit.SetFlagsRule
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
@@ -19,7 +21,10 @@ import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.any
import com.android.systemui.utils.GlobalWindowManager
@@ -70,12 +75,13 @@ class ResourceTrimmerTest : SysuiTestCase() {
        resourceTrimmer =
            ResourceTrimmer(
                keyguardInteractor,
                powerInteractor,
                kosmos.keyguardTransitionInteractor,
                globalWindowManager,
                testScope.backgroundScope,
                kosmos.testDispatcher,
                featureFlags,
                powerInteractor = powerInteractor,
                keyguardTransitionInteractor = kosmos.keyguardTransitionInteractor,
                globalWindowManager = globalWindowManager,
                applicationScope = testScope.backgroundScope,
                bgDispatcher = kosmos.testDispatcher,
                featureFlags = featureFlags,
                sceneInteractor = kosmos.sceneInteractor,
            )
        resourceTrimmer.start()
    }
@@ -204,6 +210,7 @@ class ResourceTrimmerTest : SysuiTestCase() {

    @Test
    @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK)
    @DisableSceneContainer
    fun keyguardTransitionsToGone_trimsFontCache() =
        testScope.runTest {
            keyguardTransitionRepository.sendTransitionSteps(
@@ -219,6 +226,20 @@ class ResourceTrimmerTest : SysuiTestCase() {

    @Test
    @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK)
    @EnableSceneContainer
    fun keyguardTransitionsToGone_trimsFontCache_scene_container() =
        testScope.runTest {
            kosmos.setSceneTransition(Idle(Scenes.Gone))

            verify(globalWindowManager, times(1))
                .trimMemory(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN)
            verify(globalWindowManager, times(1)).trimCaches(HardwareRenderer.CACHE_TRIM_FONT)
            verifyNoMoreInteractions(globalWindowManager)
        }

    @Test
    @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK)
    @DisableSceneContainer
    fun keyguardTransitionsToGone_flagDisabled_doesNotTrimFontCache() =
        testScope.runTest {
            featureFlags.set(Flags.TRIM_FONT_CACHES_AT_UNLOCK, false)
@@ -232,4 +253,18 @@ class ResourceTrimmerTest : SysuiTestCase() {
                .trimMemory(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN)
            verify(globalWindowManager, times(0)).trimCaches(any())
        }

    @Test
    @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK)
    @EnableSceneContainer
    fun keyguardTransitionsToGone_flagDisabled_doesNotTrimFontCache_scene_container() =
        testScope.runTest {
            featureFlags.set(Flags.TRIM_FONT_CACHES_AT_UNLOCK, false)
            kosmos.setSceneTransition(Idle(Scenes.Gone))

            // Memory hidden should still be called.
            verify(globalWindowManager, times(1))
                .trimMemory(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN)
            verify(globalWindowManager, times(0)).trimCaches(any())
        }
}
+35 −4
Original line number Diff line number Diff line
@@ -21,12 +21,18 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.DismissAction
import com.android.systemui.keyguard.shared.model.KeyguardDone
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -65,10 +71,11 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {

        underTest =
            KeyguardDismissActionInteractor(
                keyguardRepository,
                kosmos.keyguardTransitionInteractor,
                dismissInteractorWithDependencies.interactor,
                testScope.backgroundScope,
                repository = keyguardRepository,
                transitionInteractor = kosmos.keyguardTransitionInteractor,
                dismissInteractor = dismissInteractorWithDependencies.interactor,
                applicationScope = testScope.backgroundScope,
                sceneInteractor = kosmos.sceneInteractor,
            )
    }

@@ -153,6 +160,7 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {
        }

    @Test
    @DisableSceneContainer
    fun executeDismissAction_dismissKeyguardRequestWithoutImmediateDismissAction() =
        testScope.runTest {
            val executeDismissAction by collectLastValue(underTest.executeDismissAction)
@@ -178,6 +186,29 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {
            assertThat(executeDismissAction).isNotNull()
        }

    @Test
    @EnableSceneContainer
    fun executeDismissAction_dismissKeyguardRequestWithoutImmediateDismissAction_scene_container() =
        testScope.runTest {
            val executeDismissAction by collectLastValue(underTest.executeDismissAction)

            // WHEN a keyguard action will run after the keyguard is gone
            val onDismissAction = {}
            keyguardRepository.setDismissAction(
                DismissAction.RunAfterKeyguardGone(
                    dismissAction = onDismissAction,
                    onCancelAction = {},
                    message = "message",
                    willAnimateOnLockscreen = true,
                )
            )
            assertThat(executeDismissAction).isNull()

            kosmos.setSceneTransition(Idle(Scenes.Gone))

            assertThat(executeDismissAction).isNotNull()
        }

    @Test
    fun resetDismissAction() =
        testScope.runTest {
Loading