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

This commit is contained in:
Nick Chameyev
2022-04-19 17:10:27 +00:00
committed by Android (Google) Code Review
5 changed files with 52 additions and 12 deletions

View File

@@ -77,7 +77,7 @@ class PhysicsBasedUnfoldTransitionProgressProvider(
// Stop the animation if the device has already opened by the time when // 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 // 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) cancelTransition(endValue = 1f, animate = true)
} }
} }

View File

@@ -90,10 +90,12 @@ constructor(
outputListeners.remove(listener) outputListeners.remove(listener)
} }
override val isFullyOpened: Boolean override val isFinishedOpening: Boolean
get() = !isFolded && lastFoldUpdate == FOLD_UPDATE_FINISH_FULL_OPEN get() = !isFolded &&
(lastFoldUpdate == FOLD_UPDATE_FINISH_FULL_OPEN ||
lastFoldUpdate == FOLD_UPDATE_FINISH_HALF_OPEN)
private val isTransitionInProgess: Boolean private val isTransitionInProgress: Boolean
get() = get() =
lastFoldUpdate == FOLD_UPDATE_START_OPENING || lastFoldUpdate == FOLD_UPDATE_START_OPENING ||
lastFoldUpdate == FOLD_UPDATE_START_CLOSING lastFoldUpdate == FOLD_UPDATE_START_CLOSING
@@ -113,7 +115,7 @@ constructor(
notifyFoldUpdate(FOLD_UPDATE_START_CLOSING) notifyFoldUpdate(FOLD_UPDATE_START_CLOSING)
} }
if (isTransitionInProgess) { if (isTransitionInProgress) {
if (isFullyOpened) { if (isFullyOpened) {
notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN) notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN)
cancelTimeout() cancelTimeout()
@@ -177,7 +179,7 @@ constructor(
} }
private fun rescheduleAbortAnimationTimeout() { private fun rescheduleAbortAnimationTimeout() {
if (isTransitionInProgess) { if (isTransitionInProgress) {
cancelTimeout() cancelTimeout()
} }
handler.postDelayed(timeoutRunnable, halfOpenedTimeoutMillis.toLong()) handler.postDelayed(timeoutRunnable, halfOpenedTimeoutMillis.toLong())

View File

@@ -28,7 +28,7 @@ interface FoldStateProvider : CallbackController<FoldUpdatesListener> {
fun start() fun start()
fun stop() fun stop()
val isFullyOpened: Boolean val isFinishedOpening: Boolean
interface FoldUpdatesListener { interface FoldUpdatesListener {
fun onHingeAngleUpdate(@FloatRange(from = 0.0, to = 180.0) angle: Float) fun onHingeAngleUpdate(@FloatRange(from = 0.0, to = 180.0) angle: Float)

View File

@@ -202,6 +202,43 @@ class DeviceFoldStateProviderTest : SysuiTestCase() {
assertThat(foldUpdates).isEmpty() 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 @Test
fun startClosingEvent_afterTimeout_abortEmitted() { fun startClosingEvent_afterTimeout_abortEmitted() {
sendHingeAngleEvent(90) sendHingeAngleEvent(90)

View File

@@ -16,6 +16,7 @@
package com.android.systemui.unfold.util 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_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
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
@@ -31,10 +32,10 @@ class TestFoldStateProvider : FoldStateProvider {
listeners.clear() listeners.clear()
} }
private var _isFullyOpened: Boolean = false private var _isFinishedOpening: Boolean = false
override val isFullyOpened: Boolean override val isFinishedOpening: Boolean
get() = _isFullyOpened get() = _isFinishedOpening
override fun addCallback(listener: FoldUpdatesListener) { override fun addCallback(listener: FoldUpdatesListener) {
listeners += listener listeners += listener
@@ -45,8 +46,8 @@ class TestFoldStateProvider : FoldStateProvider {
} }
fun sendFoldUpdate(@FoldUpdate update: Int) { fun sendFoldUpdate(@FoldUpdate update: Int) {
if (update == FOLD_UPDATE_FINISH_FULL_OPEN) { if (update == FOLD_UPDATE_FINISH_FULL_OPEN || update == FOLD_UPDATE_FINISH_HALF_OPEN) {
_isFullyOpened = true _isFinishedOpening = true
} }
listeners.forEach { it.onFoldUpdate(update) } listeners.forEach { it.onFoldUpdate(update) }
} }