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

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

Merge "[Unfold animation] Do not send start closing event before the inner...

Merge "[Unfold animation] Do not send start closing event before the inner display turned on" into tm-qpr-dev
parents 8a283d04 244d112a
Loading
Loading
Loading
Loading
+36 −2
Original line number Diff line number Diff line
@@ -139,6 +139,40 @@ class DeviceFoldStateProviderTest : SysuiTestCase() {
        assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_OPENING)
    }

    @Test
    fun testOnUnfold_hingeAngleDecreasesBeforeInnerScreenAvailable_emitsOnlyStartAndInnerScreenAvailableEvents() {
        setFoldState(folded = true)
        foldUpdates.clear()

        setFoldState(folded = false)
        screenOnStatusProvider.notifyScreenTurningOn()
        sendHingeAngleEvent(10)
        sendHingeAngleEvent(20)
        sendHingeAngleEvent(10)
        screenOnStatusProvider.notifyScreenTurnedOn()

        assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_OPENING,
                FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE)
    }

    @Test
    fun testOnUnfold_hingeAngleDecreasesAfterInnerScreenAvailable_emitsStartInnerScreenAvailableAndStartClosingEvents() {
        setFoldState(folded = true)
        foldUpdates.clear()

        setFoldState(folded = false)
        screenOnStatusProvider.notifyScreenTurningOn()
        sendHingeAngleEvent(10)
        sendHingeAngleEvent(20)
        screenOnStatusProvider.notifyScreenTurnedOn()
        sendHingeAngleEvent(30)
        sendHingeAngleEvent(40)
        sendHingeAngleEvent(10)

        assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_OPENING,
                FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE, FOLD_UPDATE_START_CLOSING)
    }

    @Test
    fun testOnFolded_stopsHingeAngleProvider() {
        setFoldState(folded = true)
@@ -237,7 +271,7 @@ class DeviceFoldStateProviderTest : SysuiTestCase() {
    }

    @Test
    fun startClosingEvent_afterTimeout_abortEmitted() {
    fun startClosingEvent_afterTimeout_finishHalfOpenEventEmitted() {
        sendHingeAngleEvent(90)
        sendHingeAngleEvent(80)

@@ -269,7 +303,7 @@ class DeviceFoldStateProviderTest : SysuiTestCase() {
    }

    @Test
    fun startClosingEvent_timeoutAfterTimeoutRescheduled_abortEmitted() {
    fun startClosingEvent_timeoutAfterTimeoutRescheduled_finishHalfOpenStateEmitted() {
        sendHingeAngleEvent(180)
        sendHingeAngleEvent(90)

+2 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.systemui.unfold.progress

import android.os.Trace
import android.util.Log
import androidx.dynamicanimation.animation.DynamicAnimation
import androidx.dynamicanimation.animation.FloatPropertyCompat
@@ -117,6 +118,7 @@ class PhysicsBasedUnfoldTransitionProgressProvider(

        if (DEBUG) {
            Log.d(TAG, "onFoldUpdate = $update")
            Trace.traceCounter(Trace.TRACE_TAG_APP, "fold_update", update)
        }
    }

+12 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.systemui.unfold.updates

import android.os.Handler
import android.os.Trace
import android.util.Log
import androidx.annotation.FloatRange
import androidx.annotation.VisibleForTesting
@@ -108,6 +109,7 @@ constructor(
    private fun onHingeAngle(angle: Float) {
        if (DEBUG) {
            Log.d(TAG, "Hinge angle: $angle, lastHingeAngle: $lastHingeAngle")
            Trace.traceCounter(Trace.TRACE_TAG_APP, "hinge_angle", angle.toInt())
        }

        val isClosing = angle < lastHingeAngle
@@ -115,8 +117,16 @@ constructor(
        val closingThresholdMet = closingThreshold == null || angle < closingThreshold
        val isFullyOpened = FULLY_OPEN_DEGREES - angle < FULLY_OPEN_THRESHOLD_DEGREES
        val closingEventDispatched = lastFoldUpdate == FOLD_UPDATE_START_CLOSING

        if (isClosing && closingThresholdMet && !closingEventDispatched && !isFullyOpened) {
        val screenAvailableEventSent = isUnfoldHandled

        if (isClosing // hinge angle should be decreasing since last update
                && closingThresholdMet // hinge angle is below certain threshold
                && !closingEventDispatched  // we haven't sent closing event already
                && !isFullyOpened // do not send closing event if we are in fully opened hinge
                                  // angle range as closing threshold could overlap this range
                && screenAvailableEventSent // do not send closing event if we are still in
                                            // the process of turning on the inner display
        ) {
            notifyFoldUpdate(FOLD_UPDATE_START_CLOSING)
        }