Merge "Finish unfold transition when screen turns on after half-folded" into tm-dev am: 6da0c2fce2
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17757965 Change-Id: Ide5e32b6b3e1fbb04091f3e66f534a2392b62b43 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user