From 46f1300bec6237b021b3aafe419cc988220b2dac Mon Sep 17 00:00:00 2001 From: Nick Chameyev Date: Thu, 14 Oct 2021 18:19:35 +0100 Subject: [PATCH] Zoom-in wallpaper instead of zoom-out when unfolding Fixes broken zoom-out effect when on unfolded screen. It is caused by the unfold progress which is = 1.0f when fully unfolded so the wallpaper always gets zoom-out level equal to max(1f, [shade zoom/other zoom])). Fixes: 202980082 Test: check that wallpaper zooms out on folded/unfolded screens pulling notification shade/opening all apps, when folding/unfolding Test: atest com.android.systemui.unfold.UnfoldTransitionWallpaperControllerTest Change-Id: I216739195818c3a385392d5a1172bd85939a039e --- .../UnfoldTransitionWallpaperController.kt | 9 +++- .../unfold/TestUnfoldTransitionProvider.kt | 32 ++++++++++++ ...UnfoldTransitionWallpaperControllerTest.kt | 51 +++++++++++++++++++ 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 packages/SystemUI/tests/src/com/android/systemui/unfold/TestUnfoldTransitionProvider.kt create mode 100644 packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldTransitionWallpaperControllerTest.kt diff --git a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionWallpaperController.kt b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionWallpaperController.kt index 8dd3d6beb9c3f..4f45aafce416d 100644 --- a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionWallpaperController.kt +++ b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionWallpaperController.kt @@ -33,7 +33,14 @@ class UnfoldTransitionWallpaperController @Inject constructor( private inner class TransitionListener : TransitionProgressListener { override fun onTransitionProgress(progress: Float) { - wallpaperController.setUnfoldTransitionZoom(progress) + // Fully zoomed in when fully unfolded + wallpaperController.setUnfoldTransitionZoom(1 - progress) + } + + override fun onTransitionFinished() { + // Resets wallpaper zoom-out to 0f when fully folded + // When fully unfolded it is set to 0f by onTransitionProgress + wallpaperController.setUnfoldTransitionZoom(0f) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/TestUnfoldTransitionProvider.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/TestUnfoldTransitionProvider.kt new file mode 100644 index 0000000000000..c31640279305f --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/TestUnfoldTransitionProvider.kt @@ -0,0 +1,32 @@ +package com.android.systemui.unfold + +import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener + +class TestUnfoldTransitionProvider : UnfoldTransitionProgressProvider, TransitionProgressListener { + + private val listeners = arrayListOf() + + override fun destroy() { + listeners.clear() + } + + override fun addCallback(listener: TransitionProgressListener) { + listeners.add(listener) + } + + override fun removeCallback(listener: TransitionProgressListener) { + listeners.remove(listener) + } + + override fun onTransitionStarted() { + listeners.forEach { it.onTransitionStarted() } + } + + override fun onTransitionFinished() { + listeners.forEach { it.onTransitionFinished() } + } + + override fun onTransitionProgress(progress: Float) { + listeners.forEach { it.onTransitionProgress(progress) } + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldTransitionWallpaperControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldTransitionWallpaperControllerTest.kt new file mode 100644 index 0000000000000..6ec0251d41a58 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldTransitionWallpaperControllerTest.kt @@ -0,0 +1,51 @@ +package com.android.systemui.unfold + +import android.testing.AndroidTestingRunner +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.util.WallpaperController +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.AdditionalMatchers.eq +import org.mockito.Mock +import org.mockito.Mockito.verify +import org.mockito.junit.MockitoJUnit + +@RunWith(AndroidTestingRunner::class) +@SmallTest +class UnfoldTransitionWallpaperControllerTest : SysuiTestCase() { + + @Mock + private lateinit var wallpaperController: WallpaperController + + private val progressProvider = TestUnfoldTransitionProvider() + + @JvmField + @Rule + val mockitoRule = MockitoJUnit.rule() + + private lateinit var unfoldWallpaperController: UnfoldTransitionWallpaperController + + @Before + fun setup() { + unfoldWallpaperController = UnfoldTransitionWallpaperController(progressProvider, + wallpaperController) + unfoldWallpaperController.init() + } + + @Test + fun onTransitionProgress_zoomsIn() { + progressProvider.onTransitionProgress(0.8f) + + verify(wallpaperController).setUnfoldTransitionZoom(eq(0.2f, 0.001f)) + } + + @Test + fun onTransitionFinished_resetsZoom() { + progressProvider.onTransitionFinished() + + verify(wallpaperController).setUnfoldTransitionZoom(eq(0f, 0.001f)) + } +}