Merge "Finish unfold transition when screen turns on after half-folded" into tm-dev am: 6da0c2fce2 am: 82e49aafcb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17757965
Change-Id: I86827b9b83672c081b76895395ccce04a4900cf1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt
index 3daae75..04d920c 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt
@@ -77,7 +77,7 @@
// 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)
}
}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
index 83b72e8..14581cc 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
@@ -90,10 +90,12 @@
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 @@
notifyFoldUpdate(FOLD_UPDATE_START_CLOSING)
}
- if (isTransitionInProgess) {
+ if (isTransitionInProgress) {
if (isFullyOpened) {
notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN)
cancelTimeout()
@@ -177,7 +179,7 @@
}
private fun rescheduleAbortAnimationTimeout() {
- if (isTransitionInProgess) {
+ if (isTransitionInProgress) {
cancelTimeout()
}
handler.postDelayed(timeoutRunnable, halfOpenedTimeoutMillis.toLong())
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt
index 5495316..14a3a70 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt
@@ -28,7 +28,7 @@
fun start()
fun stop()
- val isFullyOpened: Boolean
+ val isFinishedOpening: Boolean
interface FoldUpdatesListener {
fun onHingeAngleUpdate(@FloatRange(from = 0.0, to = 180.0) angle: Float)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt
index 05a8f0a..1f1f88b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt
@@ -203,6 +203,43 @@
}
@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)
sendHingeAngleEvent(80)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt
index dd307b4..8f851ec 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt
@@ -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 @@
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 @@
}
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) }
}