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

Commit b7309afd authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Fix bug with isInTransition* methods.

I added these unused in the submitted power CL, and
accidentally fixed them locally.

Bug: 278086361
Test: atest KeyguardTransitionInteractorTest
Change-Id: I5c7378487d007a955f70d4a6f15e8085879b0405
parent 05760c5a
Loading
Loading
Loading
Loading
+30 −53
Original line number Diff line number Diff line
@@ -34,16 +34,17 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.OFF
import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.stateIn
import javax.inject.Inject

/** Encapsulates business-logic related to the keyguard transitions. */
@SysUISingleton
@@ -176,7 +177,6 @@ constructor(
            .map { step -> step.to }
            .stateIn(scope, SharingStarted.Eagerly, LOCKSCREEN)


    /**
     * Whether we're currently in a transition to a new [KeyguardState] and haven't yet completed
     * it.
@@ -238,12 +238,7 @@ constructor(
    fun isInTransitionToState(
        state: KeyguardState,
    ): Flow<Boolean> {
        return combine(
                startedKeyguardTransitionStep,
                finishedKeyguardState,
        ) { startedStep, finishedState ->
            startedStep.to == state && finishedState != state
        }
        return isInTransitionToStateWhere { it == state }
    }

    /**
@@ -253,12 +248,7 @@ constructor(
    fun isInTransitionToStateWhere(
        stateMatcher: (KeyguardState) -> Boolean,
    ): Flow<Boolean> {
        return combine(
                startedKeyguardTransitionStep,
                finishedKeyguardState,
        ) { startedStep, finishedState ->
            stateMatcher(startedStep.to) && finishedState != startedStep.from
        }
        return isInTransitionWhere(fromStatePredicate = { true }, toStatePredicate = stateMatcher)
    }

    /**
@@ -267,12 +257,7 @@ constructor(
    fun isInTransitionFromState(
        state: KeyguardState,
    ): Flow<Boolean> {
        return combine(
                startedKeyguardTransitionStep,
                finishedKeyguardState,
        ) { startedStep, finishedState ->
            startedStep.from == state && finishedState != state
        }
        return isInTransitionFromStateWhere { it == state }
    }

    /**
@@ -282,12 +267,7 @@ constructor(
    fun isInTransitionFromStateWhere(
        stateMatcher: (KeyguardState) -> Boolean,
    ): Flow<Boolean> {
        return combine(
                startedKeyguardTransitionStep,
                finishedKeyguardState,
        ) { startedStep, finishedState ->
            stateMatcher(startedStep.from) && finishedState != startedStep.from
        }
        return isInTransitionWhere(fromStatePredicate = stateMatcher, toStatePredicate = { true })
    }

    /**
@@ -302,23 +282,20 @@ constructor(
                startedKeyguardTransitionStep,
                finishedKeyguardState,
            ) { startedStep, finishedState ->
            fromStatePredicate(startedStep.from)
                    && toStatePredicate(startedStep.to)
                    && finishedState != startedStep.from
                fromStatePredicate(startedStep.from) &&
                    toStatePredicate(startedStep.to) &&
                    finishedState != startedStep.to
            }
            .distinctUntilChanged()
    }

    /**
     * Whether we've FINISHED a transition to a state that matches the given predicate.
     */
    /** Whether we've FINISHED a transition to a state that matches the given predicate. */
    fun isFinishedInStateWhere(stateMatcher: (KeyguardState) -> Boolean): Flow<Boolean> {
        return finishedKeyguardState.map { stateMatcher(it) }
        return finishedKeyguardState.map { stateMatcher(it) }.distinctUntilChanged()
    }

    /**
     * Whether we've FINISHED a transition to a state that matches the given predicate.
     */
    /** Whether we've FINISHED a transition to a state that matches the given predicate. */
    fun isFinishedInState(state: KeyguardState): Flow<Boolean> {
        return finishedKeyguardState.map { it == state }
        return finishedKeyguardState.map { it == state }.distinctUntilChanged()
    }
}
+428 −0
Original line number Diff line number Diff line
@@ -230,4 +230,432 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {

        assertThat(startedSteps).isEqualTo(listOf(0f, 0.5f, 1f, 1f, 0.5f, 0f))
    }

    @Test
    fun isInTransitionToState() = testScope.runTest {
        val results by collectValues(underTest.isInTransitionToState(GONE))

        sendSteps(
                TransitionStep(AOD, DOZING, 0f, STARTED),
                TransitionStep(AOD, DOZING, 0.5f, RUNNING),
                TransitionStep(AOD, DOZING, 1f, FINISHED),
        )


        assertThat(results).isEqualTo(listOf(
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(GONE, DOZING, 0f, STARTED),
                TransitionStep(GONE, DOZING, 0f, RUNNING),
                TransitionStep(GONE, DOZING, 1f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
                true,
        ))
    }

    @Test
    fun isInTransitionFromState() = testScope.runTest {
        val results by collectValues(underTest.isInTransitionFromState(DOZING))

        sendSteps(
                TransitionStep(AOD, DOZING, 0f, STARTED),
                TransitionStep(AOD, DOZING, 0.5f, RUNNING),
                TransitionStep(AOD, DOZING, 1f, FINISHED),
        )


        assertThat(results).isEqualTo(listOf(
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(GONE, DOZING, 0f, STARTED),
                TransitionStep(GONE, DOZING, 0f, RUNNING),
                TransitionStep(GONE, DOZING, 1f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
                true,
        ))
    }

    @Test
    fun isInTransitionFromStateWhere() = testScope.runTest {
        val results by collectValues(underTest.isInTransitionFromStateWhere {
            it == DOZING
        })

        sendSteps(
                TransitionStep(AOD, DOZING, 0f, STARTED),
                TransitionStep(AOD, DOZING, 0.5f, RUNNING),
                TransitionStep(AOD, DOZING, 1f, FINISHED),
        )


        assertThat(results).isEqualTo(listOf(
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(GONE, DOZING, 0f, STARTED),
                TransitionStep(GONE, DOZING, 0f, RUNNING),
                TransitionStep(GONE, DOZING, 1f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
                true,
        ))
    }

    @Test
    fun isInTransitionWhere() = testScope.runTest {
        val results by collectValues(underTest.isInTransitionWhere(
            fromStatePredicate = { it == DOZING },
            toStatePredicate = { it == GONE },
        ))

        sendSteps(
                TransitionStep(AOD, DOZING, 0f, STARTED),
                TransitionStep(AOD, DOZING, 0.5f, RUNNING),
                TransitionStep(AOD, DOZING, 1f, FINISHED),
        )


        assertThat(results).isEqualTo(listOf(
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(GONE, DOZING, 0f, STARTED),
                TransitionStep(GONE, DOZING, 0f, RUNNING),
                TransitionStep(GONE, DOZING, 1f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
                true,
        ))
    }

    @Test
    fun isFinishedInStateWhere() = testScope.runTest {
        val results by collectValues(underTest.isFinishedInStateWhere { it == GONE } )

        sendSteps(
                TransitionStep(AOD, DOZING, 0f, STARTED),
                TransitionStep(AOD, DOZING, 0.5f, RUNNING),
                TransitionStep(AOD, DOZING, 1f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false, // Finished in DOZING, not GONE.
        ))

        sendSteps(TransitionStep(DOZING, GONE, 0f, STARTED))

        assertThat(results).isEqualTo(listOf(
                false,
        ))

        sendSteps(TransitionStep(DOZING, GONE, 0f, RUNNING))

        assertThat(results).isEqualTo(listOf(
                false,
        ))

        sendSteps(TransitionStep(DOZING, GONE, 1f, FINISHED))

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(GONE, DOZING, 0f, STARTED),
                TransitionStep(GONE, DOZING, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(TransitionStep(GONE, DOZING, 1f, FINISHED))

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(TransitionStep(DOZING, GONE, 1f, FINISHED))

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
                true,
        ))
    }

    @Test
    fun isFinishedInState() = testScope.runTest {
        val results by collectValues(underTest.isFinishedInState(GONE))

        sendSteps(
                TransitionStep(AOD, DOZING, 0f, STARTED),
                TransitionStep(AOD, DOZING, 0.5f, RUNNING),
                TransitionStep(AOD, DOZING, 1f, FINISHED),
        )

        assertThat(results).isEqualTo(listOf(
                false, // Finished in DOZING, not GONE.
        ))

        sendSteps(TransitionStep(DOZING, GONE, 0f, STARTED))

        assertThat(results).isEqualTo(listOf(
                false,
        ))

        sendSteps(TransitionStep(DOZING, GONE, 0f, RUNNING))

        assertThat(results).isEqualTo(listOf(
                false,
        ))

        sendSteps(TransitionStep(DOZING, GONE, 1f, FINISHED))

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(
                TransitionStep(GONE, DOZING, 0f, STARTED),
                TransitionStep(GONE, DOZING, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
        ))

        sendSteps(TransitionStep(GONE, DOZING, 1f, FINISHED))

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(
                TransitionStep(DOZING, GONE, 0f, STARTED),
                TransitionStep(DOZING, GONE, 0f, RUNNING),
        )

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
        ))

        sendSteps(TransitionStep(DOZING, GONE, 1f, FINISHED))

        assertThat(results).isEqualTo(listOf(
                false,
                true,
                false,
                true,
        ))
    }

    private suspend fun sendSteps(vararg steps: TransitionStep) {
        steps.forEach {
            repository.sendTransitionStep(it)
            testScope.runCurrent()
        }
    }
}