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
diff --git a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionWallpaperController.kt b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionWallpaperController.kt
index 8dd3d6b..4f45aaf 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 @@
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 0000000..c316402
--- /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<TransitionProgressListener>()
+
+ 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 0000000..6ec0251
--- /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))
+ }
+}