diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt index 3daae75aaed7d..04d920cb15d5f 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt @@ -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) } } diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt index ed973d6a68544..959c97ba6ee46 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt @@ -81,10 +81,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 @@ -104,7 +106,7 @@ constructor( notifyFoldUpdate(FOLD_UPDATE_START_CLOSING) } - if (isTransitionInProgess) { + if (isTransitionInProgress) { if (isFullyOpened) { notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN) cancelTimeout() @@ -168,7 +170,7 @@ constructor( } private fun rescheduleAbortAnimationTimeout() { - if (isTransitionInProgess) { + if (isTransitionInProgress) { cancelTimeout() } handler.postDelayed(timeoutRunnable, HALF_OPENED_TIMEOUT_MILLIS) diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt index 5495316cd5b22..14a3a70fc6b0d 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt @@ -28,7 +28,7 @@ interface FoldStateProvider : CallbackController { fun start() fun stop() - val isFullyOpened: Boolean + val isFinishedOpening: Boolean interface FoldUpdatesListener { fun onHingeAngleUpdate(@FloatRange(from = 0.0, to = 180.0) angle: Float) diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt index 7ac243452222c..f2ec3acbc765b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt @@ -199,6 +199,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) diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt index dd307b4b21e99..8f851ec60981a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt @@ -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) } }