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

Commit bb0a0b80 authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Don't apply alpha to statusbar during unfold anim on launcher

The alpha changes to statusbar were introduced to to hide it during the unfold animation while on apps, as the ounds of the app "collapse" to the center, but the statusbar doesn't.
While on launcher, this alpha is not needed.

Bug: 271413648
Test: StatusBarMoveFromCenterAnimationControllerTest + manual
Change-Id: I01389402515582038f872957ee6f9049a00100d7
parent d08e90b9
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator.AlphaP
import com.android.systemui.statusbar.phone.PhoneStatusBarViewController.StatusBarViewsCenterProvider
import com.android.systemui.unfold.SysUIUnfoldScope
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import com.android.systemui.unfold.util.CurrentActivityTypeProvider
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import javax.inject.Inject
import kotlin.math.max
@@ -29,9 +30,13 @@ import kotlin.math.max
@SysUIUnfoldScope
class StatusBarMoveFromCenterAnimationController @Inject constructor(
    private val progressProvider: ScopedUnfoldTransitionProgressProvider,
    private val currentActivityTypeProvider: CurrentActivityTypeProvider,
    windowManager: WindowManager
) {

    // Whether we're on home activity. Updated only when the animation starts.
    private var isOnHomeActivity: Boolean? = null

    private val transitionListener = TransitionListener()
    private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator(
        windowManager,
@@ -60,6 +65,10 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor(
    }

    private inner class TransitionListener : TransitionProgressListener {
        override fun onTransitionStarted() {
            isOnHomeActivity = currentActivityTypeProvider.isHomeActivity
        }

        override fun onTransitionProgress(progress: Float) {
            moveFromCenterAnimator.onTransitionProgress(progress)
        }
@@ -68,11 +77,23 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor(
            // Reset translations when transition is stopped/cancelled
            // (e.g. the transition could be cancelled mid-way when rotating the screen)
            moveFromCenterAnimator.onTransitionProgress(1f)
            isOnHomeActivity = null
        }
    }

    private class StatusBarIconsAlphaProvider : AlphaProvider {

    /**
     * In certain cases, an alpha is applied based on the progress.
     *
     * This mainly happens to hide the statusbar during the unfold animation while on apps, as the
     * bounds of the app "collapse" to the center, but the statusbar doesn't.
     * While on launcher, this alpha is not applied.
     */
    private inner class StatusBarIconsAlphaProvider : AlphaProvider {
        override fun getAlpha(progress: Float): Float {
            if (isOnHomeActivity == true) {
                return 1.0f
            }
            return max(
                0f,
                (progress - ICONS_START_APPEARING_PROGRESS) / (1 - ICONS_START_APPEARING_PROGRESS)
+39 −5
Original line number Diff line number Diff line
@@ -8,13 +8,14 @@ import android.view.WindowManager
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.unfold.TestUnfoldTransitionProvider
import com.android.systemui.unfold.util.CurrentActivityTypeProvider
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.mockito.ArgumentMatchers.any
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations

@SmallTest
@@ -26,6 +27,9 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {
    @Mock
    private lateinit var display: Display

    @Mock
    private lateinit var currentActivityTypeProvider: CurrentActivityTypeProvider

    private val view: View = View(context)
    private val progressProvider = TestUnfoldTransitionProvider()
    private val scopedProvider = ScopedUnfoldTransitionProgressProvider(progressProvider)
@@ -36,9 +40,9 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        `when`(windowManager.defaultDisplay).thenReturn(display)
        `when`(display.rotation).thenReturn(Surface.ROTATION_0)
        `when`(display.getSize(any())).thenAnswer {
        whenever(windowManager.defaultDisplay).thenReturn(display)
        whenever(display.rotation).thenReturn(Surface.ROTATION_0)
        whenever(display.getSize(any())).thenAnswer {
            val point = it.arguments[0] as Point
            point.x = 100
            point.y = 100
@@ -47,7 +51,12 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {

        scopedProvider.setReadyToHandleTransition(true)

        controller = StatusBarMoveFromCenterAnimationController(scopedProvider, windowManager)
        controller =
            StatusBarMoveFromCenterAnimationController(
                scopedProvider,
                currentActivityTypeProvider,
                windowManager
            )
    }

    @Test
@@ -98,6 +107,31 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {
        assertThat(view.translationX).isZero()
    }

    @Test
    fun alpha_onLauncher_alphaDoesNotChange() {
        whenever(currentActivityTypeProvider.isHomeActivity).thenReturn(true)
        controller.onViewsReady(arrayOf(view))
        progressProvider.onTransitionStarted()
        progressProvider.onTransitionProgress(0.0f)
        assertThat(view.alpha).isEqualTo(1.0f)

        progressProvider.onTransitionProgress(1.0f)

        assertThat(view.alpha).isEqualTo(1.0f)
    }

    @Test
    fun alpha_NotOnLauncher_alphaChanges() {
        whenever(currentActivityTypeProvider.isHomeActivity).thenReturn(false)
        controller.onViewsReady(arrayOf(view))
        progressProvider.onTransitionStarted()
        assertThat(view.alpha).isEqualTo(1.0f)

        progressProvider.onTransitionProgress(0.5f)

        assertThat(view.alpha).isNotEqualTo(1.0f)
    }

    @Test
    fun transitionFinished_viewReAttached_noChangesToTranslation() {
        controller.onViewsReady(arrayOf(view))