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

Commit b5c84e3a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Don't apply alpha to statusbar during unfold anim on launcher" into tm-qpr-dev

parents 4e0e3b70 bb0a0b80
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))