From b680365e1f648f6a091d34fdfbd8e7941567d1c6 Mon Sep 17 00:00:00 2001 From: Nicolo' Mazzucato Date: Thu, 6 Jan 2022 11:00:45 +0100 Subject: [PATCH] Replace aborted with half_open in FoldStateProvider All FOLD_UPDATE_ABORTED emissions were due to device stuck in half opened state. This will allow us to log FULL_OPEN, HALF_OPEN and FULL_CLOSED states easily. + Removed some unused states. + DeviceFoldStateProviderTest.kt formatted with ktfmt Bug: 198305865 Test: atest DeviceFoldStateProviderTest Change-Id: Iadbe4bdc4cbdf2720efb46fbd69cfadf0b8357a8 --- ...csBasedUnfoldTransitionProgressProvider.kt | 4 +- .../unfold/updates/DeviceFoldStateProvider.kt | 14 ++-- .../unfold/updates/FoldStateProvider.kt | 14 ++-- .../updates/DeviceFoldStateProviderTest.kt | 75 +++++++++---------- 4 files changed, 48 insertions(+), 59 deletions(-) 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 51eae573f0409..d94ebd4f6af6b 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 @@ -23,7 +23,7 @@ import androidx.dynamicanimation.animation.SpringAnimation import androidx.dynamicanimation.animation.SpringForce import com.android.systemui.unfold.UnfoldTransitionProgressProvider import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener -import com.android.systemui.unfold.updates.FOLD_UPDATE_ABORTED +import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_HALF_OPEN import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_CLOSED import com.android.systemui.unfold.updates.FOLD_UPDATE_START_CLOSING import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_FULL_OPEN @@ -89,7 +89,7 @@ internal class PhysicsBasedUnfoldTransitionProgressProvider( cancelTransition(endValue = 1f, animate = true) } } - FOLD_UPDATE_FINISH_FULL_OPEN, FOLD_UPDATE_ABORTED -> { + FOLD_UPDATE_FINISH_FULL_OPEN, FOLD_UPDATE_FINISH_HALF_OPEN -> { // Do not cancel if we haven't started the transition yet. // This could happen when we fully unfolded the device before the screen // became available. In this case we start and immediately cancel the animation 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 6d9631c124300..cd1ea215ccdd5 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 @@ -138,7 +138,7 @@ class DeviceFoldStateProvider( if (isTransitionInProgess) { cancelTimeout() } - handler.postDelayed(timeoutRunnable, ABORT_CLOSING_MILLIS) + handler.postDelayed(timeoutRunnable, HALF_OPENED_TIMEOUT_MILLIS) } private fun cancelTimeout() { @@ -163,16 +163,14 @@ class DeviceFoldStateProvider( } private inner class HingeAngleListener : Consumer { - override fun accept(angle: Float) { onHingeAngle(angle) } } private inner class TimeoutRunnable : Runnable { - override fun run() { - notifyFoldUpdate(FOLD_UPDATE_ABORTED) + notifyFoldUpdate(FOLD_UPDATE_FINISH_HALF_OPEN) } } } @@ -180,9 +178,7 @@ class DeviceFoldStateProvider( private fun stateToString(@FoldUpdate update: Int): String { return when (update) { FOLD_UPDATE_START_OPENING -> "START_OPENING" - FOLD_UPDATE_HALF_OPEN -> "HALF_OPEN" FOLD_UPDATE_START_CLOSING -> "START_CLOSING" - FOLD_UPDATE_ABORTED -> "ABORTED" FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE -> "UNFOLDED_SCREEN_AVAILABLE" FOLD_UPDATE_FINISH_HALF_OPEN -> "FINISH_HALF_OPEN" FOLD_UPDATE_FINISH_FULL_OPEN -> "FINISH_FULL_OPEN" @@ -195,11 +191,11 @@ private const val TAG = "DeviceFoldProvider" private const val DEBUG = false /** - * Time after which [FOLD_UPDATE_ABORTED] is emitted following a [FOLD_UPDATE_START_CLOSING] or - * [FOLD_UPDATE_START_OPENING] event, if an end state is not reached. + * Time after which [FOLD_UPDATE_FINISH_HALF_OPEN] is emitted following a + * [FOLD_UPDATE_START_CLOSING] or [FOLD_UPDATE_START_OPENING] event, if an end state is not reached. */ @VisibleForTesting -const val ABORT_CLOSING_MILLIS = 1000L +const val HALF_OPENED_TIMEOUT_MILLIS = 1000L /** Threshold after which we consider the device fully unfolded. */ @VisibleForTesting 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 bffebcd4512be..df3563df5fc63 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 @@ -37,9 +37,7 @@ interface FoldStateProvider : CallbackController { @IntDef(prefix = ["FOLD_UPDATE_"], value = [ FOLD_UPDATE_START_OPENING, - FOLD_UPDATE_HALF_OPEN, FOLD_UPDATE_START_CLOSING, - FOLD_UPDATE_ABORTED, FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE, FOLD_UPDATE_FINISH_HALF_OPEN, FOLD_UPDATE_FINISH_FULL_OPEN, @@ -50,10 +48,8 @@ interface FoldStateProvider : CallbackController { } const val FOLD_UPDATE_START_OPENING = 0 -const val FOLD_UPDATE_HALF_OPEN = 1 -const val FOLD_UPDATE_START_CLOSING = 2 -const val FOLD_UPDATE_ABORTED = 3 -const val FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE = 4 -const val FOLD_UPDATE_FINISH_HALF_OPEN = 5 -const val FOLD_UPDATE_FINISH_FULL_OPEN = 6 -const val FOLD_UPDATE_FINISH_CLOSED = 7 +const val FOLD_UPDATE_START_CLOSING = 1 +const val FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE = 2 +const val FOLD_UPDATE_FINISH_HALF_OPEN = 3 +const val FOLD_UPDATE_FINISH_FULL_OPEN = 4 +const val FOLD_UPDATE_FINISH_CLOSED = 5 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 46e0b1238013b..f43dc6c5bc832 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 @@ -30,6 +30,7 @@ import com.android.systemui.unfold.util.FoldableDeviceStates import com.android.systemui.unfold.util.FoldableTestUtils import com.android.systemui.util.mockito.any import com.google.common.truth.Truth.assertThat +import java.lang.Exception import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -39,32 +40,24 @@ import org.mockito.Mock import org.mockito.Mockito.verify import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations -import java.lang.Exception @RunWith(AndroidTestingRunner::class) @SmallTest class DeviceFoldStateProviderTest : SysuiTestCase() { - @Mock - private lateinit var hingeAngleProvider: HingeAngleProvider + @Mock private lateinit var hingeAngleProvider: HingeAngleProvider - @Mock - private lateinit var screenStatusProvider: ScreenStatusProvider + @Mock private lateinit var screenStatusProvider: ScreenStatusProvider - @Mock - private lateinit var deviceStateManager: DeviceStateManager + @Mock private lateinit var deviceStateManager: DeviceStateManager - @Mock - private lateinit var handler: Handler + @Mock private lateinit var handler: Handler - @Captor - private lateinit var foldStateListenerCaptor: ArgumentCaptor + @Captor private lateinit var foldStateListenerCaptor: ArgumentCaptor - @Captor - private lateinit var screenOnListenerCaptor: ArgumentCaptor + @Captor private lateinit var screenOnListenerCaptor: ArgumentCaptor - @Captor - private lateinit var hingeAngleCaptor: ArgumentCaptor> + @Captor private lateinit var hingeAngleCaptor: ArgumentCaptor> private lateinit var foldStateProvider: DeviceFoldStateProvider @@ -81,24 +74,25 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { MockitoAnnotations.initMocks(this) deviceStates = FoldableTestUtils.findDeviceStates(context) - foldStateProvider = DeviceFoldStateProvider( - context, - hingeAngleProvider, - screenStatusProvider, - deviceStateManager, - context.mainExecutor, - handler - ) + foldStateProvider = + DeviceFoldStateProvider( + context, + hingeAngleProvider, + screenStatusProvider, + deviceStateManager, + context.mainExecutor, + handler) - foldStateProvider.addCallback(object : FoldStateProvider.FoldUpdatesListener { - override fun onHingeAngleUpdate(angle: Float) { - hingeAngleUpdates.add(angle) - } + foldStateProvider.addCallback( + object : FoldStateProvider.FoldUpdatesListener { + override fun onHingeAngleUpdate(angle: Float) { + hingeAngleUpdates.add(angle) + } - override fun onFoldUpdate(update: Int) { - foldUpdates.add(update) - } - }) + override fun onFoldUpdate(update: Int) { + foldUpdates.add(update) + } + }) foldStateProvider.start() verify(deviceStateManager).registerCallback(any(), foldStateListenerCaptor.capture()) @@ -200,9 +194,10 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { sendHingeAngleEvent(90) sendHingeAngleEvent(80) - simulateTimeout(ABORT_CLOSING_MILLIS) + simulateTimeout(HALF_OPENED_TIMEOUT_MILLIS) - assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING, FOLD_UPDATE_ABORTED) + assertThat(foldUpdates) + .containsExactly(FOLD_UPDATE_START_CLOSING, FOLD_UPDATE_FINISH_HALF_OPEN) } @Test @@ -210,7 +205,7 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { sendHingeAngleEvent(90) sendHingeAngleEvent(80) - simulateTimeout(ABORT_CLOSING_MILLIS - 1) + simulateTimeout(HALF_OPENED_TIMEOUT_MILLIS - 1) assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING) } @@ -220,7 +215,7 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { sendHingeAngleEvent(180) sendHingeAngleEvent(90) - simulateTimeout(ABORT_CLOSING_MILLIS - 1) + simulateTimeout(HALF_OPENED_TIMEOUT_MILLIS - 1) sendHingeAngleEvent(80) assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING) @@ -231,11 +226,13 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { sendHingeAngleEvent(180) sendHingeAngleEvent(90) - simulateTimeout(ABORT_CLOSING_MILLIS - 1) // The timeout should not trigger here. + // The timeout should not trigger here. + simulateTimeout(HALF_OPENED_TIMEOUT_MILLIS - 1) sendHingeAngleEvent(80) - simulateTimeout(ABORT_CLOSING_MILLIS) // The timeout should trigger here. + simulateTimeout(HALF_OPENED_TIMEOUT_MILLIS) // The timeout should trigger here. - assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING, FOLD_UPDATE_ABORTED) + assertThat(foldUpdates) + .containsExactly(FOLD_UPDATE_START_CLOSING, FOLD_UPDATE_FINISH_HALF_OPEN) } @Test @@ -261,7 +258,7 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { } } - private fun simulateTimeout(waitTime: Long = ABORT_CLOSING_MILLIS) { + private fun simulateTimeout(waitTime: Long = HALF_OPENED_TIMEOUT_MILLIS) { val runnableDelay = scheduledRunnableDelay ?: throw Exception("No runnable scheduled.") if (waitTime >= runnableDelay) { scheduledRunnable?.run()