Loading packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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) } } Loading packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt +7 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -113,7 +115,7 @@ constructor( notifyFoldUpdate(FOLD_UPDATE_START_CLOSING) } if (isTransitionInProgess) { if (isTransitionInProgress) { if (isFullyOpened) { notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN) cancelTimeout() Loading Loading @@ -177,7 +179,7 @@ constructor( } private fun rescheduleAbortAnimationTimeout() { if (isTransitionInProgess) { if (isTransitionInProgress) { cancelTimeout() } handler.postDelayed(timeoutRunnable, halfOpenedTimeoutMillis.toLong()) Loading packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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) Loading packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt +37 −0 Original line number Diff line number Diff line Loading @@ -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) Loading packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt +6 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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) } } Loading Loading
packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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) } } Loading
packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt +7 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -113,7 +115,7 @@ constructor( notifyFoldUpdate(FOLD_UPDATE_START_CLOSING) } if (isTransitionInProgess) { if (isTransitionInProgress) { if (isFullyOpened) { notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN) cancelTimeout() Loading Loading @@ -177,7 +179,7 @@ constructor( } private fun rescheduleAbortAnimationTimeout() { if (isTransitionInProgess) { if (isTransitionInProgress) { cancelTimeout() } handler.postDelayed(timeoutRunnable, halfOpenedTimeoutMillis.toLong()) Loading
packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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) Loading
packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt +37 −0 Original line number Diff line number Diff line Loading @@ -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) Loading
packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt +6 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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) } } Loading