Merge "Finish unfold transition when screen turns on after half-folded" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6da0c2fce2
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user