diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-12-27 11:49:15 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-12-27 11:49:15 +0000 |
commit | 4308e6a266c4abe2ac5a9173feb77219cee0265b (patch) | |
tree | e9b789a31e60e2ecf548981e469bd046bf562400 | |
parent | 270111058a78cf69934e24c6e75576fd0f642025 (diff) | |
parent | 23238a446486854388559b837674c76b11ab21cf (diff) | |
download | platform_testing-4308e6a266c4abe2ac5a9173feb77219cee0265b.tar.gz |
Merge "Improve FoldableDeviceController logging and initialization" into tm-qpr-dev
3 files changed, 19 insertions, 6 deletions
diff --git a/libraries/health/rules/src/android/platform/test/rule/DeviceTypeRule.kt b/libraries/health/rules/src/android/platform/test/rule/DeviceTypeRule.kt index 8426f19cf..72c7dde40 100644 --- a/libraries/health/rules/src/android/platform/test/rule/DeviceTypeRule.kt +++ b/libraries/health/rules/src/android/platform/test/rule/DeviceTypeRule.kt @@ -78,7 +78,8 @@ internal fun isFoldable(): Boolean { .isNotEmpty() } -internal fun isLargeScreen(): Boolean { +/** Returns whether the device default display is currently considered large screen. */ +fun isLargeScreen(): Boolean { val sizeDp = getUiDevice().displaySizeDp return sizeDp.x >= LARGE_SCREEN_DP_THRESHOLD && sizeDp.y >= LARGE_SCREEN_DP_THRESHOLD } diff --git a/libraries/systemui-helper/src/android/platform/helpers/foldable/FoldableDeviceController.kt b/libraries/systemui-helper/src/android/platform/helpers/foldable/FoldableDeviceController.kt index 06825f6cf..dce2d892d 100644 --- a/libraries/systemui-helper/src/android/platform/helpers/foldable/FoldableDeviceController.kt +++ b/libraries/systemui-helper/src/android/platform/helpers/foldable/FoldableDeviceController.kt @@ -18,6 +18,7 @@ package android.platform.helpers.foldable import android.hardware.Sensor import android.hardware.devicestate.DeviceStateManager import android.hardware.devicestate.DeviceStateRequest +import android.platform.test.rule.isLargeScreen import android.platform.uiautomator_helpers.DeviceHelpers.isScreenOnSettled import android.platform.uiautomator_helpers.DeviceHelpers.printInstrumentationStatus import android.platform.uiautomator_helpers.DeviceHelpers.uiDevice @@ -68,15 +69,15 @@ internal class FoldableDeviceController { // This might cause the screen to turn off if the default state is folded. if (!uiDevice.isScreenOnSettled) { uiDevice.wakeUp() - ensureThat("screen is on") { uiDevice.isScreenOn } + ensureThat("screen is on after cancelling base state override.") { uiDevice.isScreenOn } } } /** Fetches folded and unfolded state identifier from the device. */ fun init() { findFoldedUnfoldedStates() - /* There is no way to know the initial device state, so it is set to unfolded. */ - setDeviceState(unfoldedState) + currentState = if (isLargeScreen()) unfoldedState else foldedState + Log.d(TAG, "Initial state. Folded=$isFolded") hingeAngleSensor.init() } @@ -114,15 +115,25 @@ internal class FoldableDeviceController { deviceStateLatch = CountDownLatch(1) val request = DeviceStateRequest.newBuilder(state).build() pendingRequest = request + Log.d(TAG, "Requesting base state override to ${state.desc()}") deviceStateManager.requestBaseStateOverride( request, context.mainExecutor, deviceStateRequestCallback ) deviceStateLatch.await { "Device state didn't change within the timeout" } + ensureStateSet(state) Log.d(TAG, "Device state set to ${state.desc()}") } + private fun ensureStateSet(state: Int) { + when (state) { + foldedState -> ensureThat("Device folded") { !isLargeScreen() } + unfoldedState -> ensureThat("Device unfolded") { isLargeScreen() } + else -> TODO("Implement a way to know if states other than un/folded are set.") + } + } + private fun Int.desc() = when (this) { foldedState -> "Folded" @@ -137,6 +148,7 @@ internal class FoldableDeviceController { private val deviceStateRequestCallback = object : DeviceStateRequest.Callback { override fun onRequestActivated(request: DeviceStateRequest) { + Log.d(TAG, "Request activated: ${request.state.desc()}") if (request == pendingRequest) { deviceStateLatch.countDown() } @@ -144,12 +156,14 @@ internal class FoldableDeviceController { } override fun onRequestCanceled(request: DeviceStateRequest) { + Log.d(TAG, "Request cancelled: ${request.state.desc()}") if (currentState == request.state) { currentState = null } } override fun onRequestSuspended(request: DeviceStateRequest) { + Log.d(TAG, "Request suspended: ${request.state.desc()}") if (currentState == request.state) { currentState = null } diff --git a/libraries/systemui-helper/src/android/platform/helpers/foldable/FoldableRule.kt b/libraries/systemui-helper/src/android/platform/helpers/foldable/FoldableRule.kt index dff066934..c0161b111 100644 --- a/libraries/systemui-helper/src/android/platform/helpers/foldable/FoldableRule.kt +++ b/libraries/systemui-helper/src/android/platform/helpers/foldable/FoldableRule.kt @@ -67,7 +67,6 @@ class FoldableRule(private val ensureScreenOn: Boolean = false) : TestWatcher() SystemClock.sleep(ANIMATION_TIMEOUT) // Let's wait for the unfold animation to finish. ensureThat("screen is off after folding") { !screenOn } - ensureThat("is folded") { controller.isFolded } ensureThat("screen surface decreases after folding") { displaySurface < initialScreenSurface } @@ -84,7 +83,6 @@ class FoldableRule(private val ensureScreenOn: Boolean = false) : TestWatcher() SystemClock.sleep(ANIMATION_TIMEOUT) // Let's wait for the unfold animation to finish. ensureThat("screen is on after unfolding") { screenOn } - ensureThat("is unfolded") { !controller.isFolded } ensureThat("screen surface increases after unfolding") { displaySurface > initialScreenSurface } |