diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/ScreenSizeFoldProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/ScreenSizeFoldProvider.kt index 380c1fcbf732e..156d2fc2cb3a9 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/ScreenSizeFoldProvider.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/ScreenSizeFoldProvider.kt @@ -25,14 +25,18 @@ import java.util.concurrent.Executor * It could be used when no activity context is available * TODO(b/232369816): use Jetpack WM library when non-activity contexts supported b/169740873 */ -class ScreenSizeFoldProvider(private val context: Context) : FoldProvider { +class ScreenSizeFoldProvider(context: Context) : FoldProvider { + private var isFolded: Boolean = false private var callbacks: MutableList = arrayListOf() - private var lastWidth: Int = 0 + + init { + onConfigurationChange(context.resources.configuration) + } override fun registerCallback(callback: FoldCallback, executor: Executor) { callbacks += callback - onConfigurationChange(context.resources.configuration) + callback.onFoldUpdated(isFolded) } override fun unregisterCallback(callback: FoldCallback) { @@ -40,16 +44,14 @@ class ScreenSizeFoldProvider(private val context: Context) : FoldProvider { } fun onConfigurationChange(newConfig: Configuration) { - if (lastWidth == newConfig.smallestScreenWidthDp) { + val newIsFolded = + newConfig.smallestScreenWidthDp < INNER_SCREEN_SMALLEST_SCREEN_WIDTH_THRESHOLD_DP + if (newIsFolded == isFolded) { return } - if (newConfig.smallestScreenWidthDp > INNER_SCREEN_SMALLEST_SCREEN_WIDTH_THRESHOLD_DP) { - callbacks.forEach { it.onFoldUpdated(false) } - } else { - callbacks.forEach { it.onFoldUpdated(true) } - } - lastWidth = newConfig.smallestScreenWidthDp + isFolded = newIsFolded + callbacks.forEach { it.onFoldUpdated(isFolded) } } } diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt index a633a5e418828..46001a73e5184 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt @@ -256,6 +256,12 @@ constructor( } } + override fun markScreenAsTurnedOn() { + if (!isFolded) { + isUnfoldHandled = true + } + } + override fun onScreenTurningOn() { isScreenOn = true updateHingeAngleProviderState() diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt index f09b53dc8436b..2ee2940fa2a69 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt @@ -35,5 +35,12 @@ interface ScreenStatusProvider : CallbackController { * Called when the screen is starting to be turned on. */ fun onScreenTurningOn() + + /** + * Called when the screen is already turned on but it happened before the creation + * of the unfold progress provider, so we won't play the actual animation but we treat + * the current state of the screen as 'turned on' + */ + fun markScreenAsTurnedOn() } }