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

Commit 6da0c2fc authored by Nick Chameyev's avatar Nick Chameyev Committed by Android (Google) Code Review
Browse files

Merge "Finish unfold transition when screen turns on after half-folded" into tm-dev

parents ef1cc885 fd355c09
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ class PhysicsBasedUnfoldTransitionProgressProvider(

                // Stop the animation if the device has already opened by the time when
                // the display is available as we won't receive the full open event anymore
                if (foldStateProvider.isFullyOpened) {
                if (foldStateProvider.isFinishedOpening) {
                    cancelTransition(endValue = 1f, animate = true)
                }
            }
+7 −5
Original line number Diff line number Diff line
@@ -90,10 +90,12 @@ constructor(
        outputListeners.remove(listener)
    }

    override val isFullyOpened: Boolean
        get() = !isFolded && lastFoldUpdate == FOLD_UPDATE_FINISH_FULL_OPEN
    override val isFinishedOpening: Boolean
        get() = !isFolded &&
            (lastFoldUpdate == FOLD_UPDATE_FINISH_FULL_OPEN ||
                lastFoldUpdate == FOLD_UPDATE_FINISH_HALF_OPEN)

    private val isTransitionInProgess: Boolean
    private val isTransitionInProgress: Boolean
        get() =
            lastFoldUpdate == FOLD_UPDATE_START_OPENING ||
                lastFoldUpdate == FOLD_UPDATE_START_CLOSING
@@ -113,7 +115,7 @@ constructor(
            notifyFoldUpdate(FOLD_UPDATE_START_CLOSING)
        }

        if (isTransitionInProgess) {
        if (isTransitionInProgress) {
            if (isFullyOpened) {
                notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN)
                cancelTimeout()
@@ -177,7 +179,7 @@ constructor(
    }

    private fun rescheduleAbortAnimationTimeout() {
        if (isTransitionInProgess) {
        if (isTransitionInProgress) {
            cancelTimeout()
        }
        handler.postDelayed(timeoutRunnable, halfOpenedTimeoutMillis.toLong())
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ interface FoldStateProvider : CallbackController<FoldUpdatesListener> {
    fun start()
    fun stop()

    val isFullyOpened: Boolean
    val isFinishedOpening: Boolean

    interface FoldUpdatesListener {
        fun onHingeAngleUpdate(@FloatRange(from = 0.0, to = 180.0) angle: Float)
+37 −0
Original line number Diff line number Diff line
@@ -202,6 +202,43 @@ class DeviceFoldStateProviderTest : SysuiTestCase() {
        assertThat(foldUpdates).isEmpty()
    }

    @Test
    fun testUnfoldedOpenedHingeAngleEmitted_isFinishedOpeningIsFalse() {
        setFoldState(folded = false)

        sendHingeAngleEvent(10)

        assertThat(foldStateProvider.isFinishedOpening).isFalse()
    }

    @Test
    fun testFoldedHalfOpenHingeAngleEmitted_isFinishedOpeningIsFalse() {
        setFoldState(folded = true)

        sendHingeAngleEvent(10)

        assertThat(foldStateProvider.isFinishedOpening).isFalse()
    }

    @Test
    fun testFoldedFullyOpenHingeAngleEmitted_isFinishedOpeningIsTrue() {
        setFoldState(folded = false)

        sendHingeAngleEvent(180)

        assertThat(foldStateProvider.isFinishedOpening).isTrue()
    }

    @Test
    fun testUnfoldedHalfOpenOpened_afterTimeout_isFinishedOpeningIsTrue() {
        setFoldState(folded = false)

        sendHingeAngleEvent(10)
        simulateTimeout(HALF_OPENED_TIMEOUT_MILLIS)

        assertThat(foldStateProvider.isFinishedOpening).isTrue()
    }

    @Test
    fun startClosingEvent_afterTimeout_abortEmitted() {
        sendHingeAngleEvent(90)
+6 −5
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.systemui.unfold.util

import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_FULL_OPEN
import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_HALF_OPEN
import com.android.systemui.unfold.updates.FoldStateProvider
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
@@ -31,10 +32,10 @@ class TestFoldStateProvider : FoldStateProvider {
        listeners.clear()
    }

    private var _isFullyOpened: Boolean = false
    private var _isFinishedOpening: Boolean = false

    override val isFullyOpened: Boolean
        get() = _isFullyOpened
    override val isFinishedOpening: Boolean
        get() = _isFinishedOpening

    override fun addCallback(listener: FoldUpdatesListener) {
        listeners += listener
@@ -45,8 +46,8 @@ class TestFoldStateProvider : FoldStateProvider {
    }

    fun sendFoldUpdate(@FoldUpdate update: Int) {
        if (update == FOLD_UPDATE_FINISH_FULL_OPEN) {
            _isFullyOpened = true
        if (update == FOLD_UPDATE_FINISH_FULL_OPEN || update == FOLD_UPDATE_FINISH_HALF_OPEN) {
            _isFinishedOpening = true
        }
        listeners.forEach { it.onFoldUpdate(update) }
    }