Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46f1300b authored by Nick Chameyev's avatar Nick Chameyev
Browse files

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
parent 3aef7134
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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)
        }
    }
}
+32 −0
Original line number Diff line number Diff line
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) }
    }
}
+51 −0
Original line number Diff line number Diff line
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))
    }
}