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
// 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)
}
}

View File

@@ -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())

View File

@@ -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)

View File

@@ -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)

View File

@@ -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) }
}