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