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

Commit 2367ce39 authored by Nick Chameyev's avatar Nick Chameyev Committed by Automerger Merge Worker
Browse files

Merge "Fix narrow statusbar when folding" into sc-v2-dev am: 4003a0d7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16330812

Change-Id: I10a4dfc9a899df15ab36fec685146a7d4a6d593b
parents 339e7e50 4003a0d7
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ class PhoneStatusBarViewController private constructor(
            val statusBarLeftSide: View = mView.findViewById(R.id.status_bar_left_side)
            val systemIconArea: ViewGroup = mView.findViewById(R.id.system_icon_area)

            val viewCenterProvider = StatusBarViewsCenterProvider()
            val viewsToAnimate = arrayOf(
                statusBarLeftSide,
                systemIconArea
@@ -52,7 +51,7 @@ class PhoneStatusBarViewController private constructor(
            mView.viewTreeObserver.addOnPreDrawListener(object :
                ViewTreeObserver.OnPreDrawListener {
                override fun onPreDraw(): Boolean {
                    animationController.onViewsReady(viewsToAnimate, viewCenterProvider)
                    animationController.onViewsReady(viewsToAnimate)
                    mView.viewTreeObserver.removeOnPreDrawListener(this)
                    return true
                }
@@ -82,7 +81,7 @@ class PhoneStatusBarViewController private constructor(
        mView.importantForAccessibility = mode
    }

    private class StatusBarViewsCenterProvider : UnfoldMoveFromCenterAnimator.ViewCenterProvider {
    class StatusBarViewsCenterProvider : UnfoldMoveFromCenterAnimator.ViewCenterProvider {
        override fun getViewCenter(view: View, outPoint: Point) =
            when (view.id) {
                R.id.status_bar_left_side -> {
+12 −15
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ package com.android.systemui.statusbar.phone
import android.view.View
import android.view.WindowManager
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator.ViewCenterProvider
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.ScopedUnfoldTransitionProgressProvider
@@ -27,20 +27,18 @@ import javax.inject.Inject
@SysUIUnfoldScope
class StatusBarMoveFromCenterAnimationController @Inject constructor(
    private val progressProvider: ScopedUnfoldTransitionProgressProvider,
    private val windowManager: WindowManager
    windowManager: WindowManager
) {

    private val transitionListener = TransitionListener()
    private var moveFromCenterAnimator: UnfoldMoveFromCenterAnimator? = null
    private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator(windowManager,
        viewCenterProvider = StatusBarViewsCenterProvider())

    fun onViewsReady(viewsToAnimate: Array<View>, viewCenterProvider: ViewCenterProvider) {
        moveFromCenterAnimator = UnfoldMoveFromCenterAnimator(windowManager,
            viewCenterProvider = viewCenterProvider)

        moveFromCenterAnimator?.updateDisplayProperties()
    fun onViewsReady(viewsToAnimate: Array<View>) {
        moveFromCenterAnimator.updateDisplayProperties()

        viewsToAnimate.forEach {
            moveFromCenterAnimator?.registerViewForAnimation(it)
            moveFromCenterAnimator.registerViewForAnimation(it)
        }

        progressProvider.addCallback(transitionListener)
@@ -48,24 +46,23 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor(

    fun onViewDetached() {
        progressProvider.removeCallback(transitionListener)
        moveFromCenterAnimator?.clearRegisteredViews()
        moveFromCenterAnimator = null
        moveFromCenterAnimator.clearRegisteredViews()
    }

    fun onStatusBarWidthChanged() {
        moveFromCenterAnimator?.updateDisplayProperties()
        moveFromCenterAnimator?.updateViewPositions()
        moveFromCenterAnimator.updateDisplayProperties()
        moveFromCenterAnimator.updateViewPositions()
    }

    private inner class TransitionListener : TransitionProgressListener {
        override fun onTransitionProgress(progress: Float) {
            moveFromCenterAnimator?.onTransitionProgress(progress)
            moveFromCenterAnimator.onTransitionProgress(progress)
        }

        override fun onTransitionFinished() {
            // Reset translations when transition is stopped/cancelled
            // (e.g. the transition could be cancelled mid-way when rotating the screen)
            moveFromCenterAnimator?.onTransitionProgress(1f)
            moveFromCenterAnimator.onTransitionProgress(1f)
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -102,7 +102,7 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
        verify(view.viewTreeObserver).addOnPreDrawListener(argumentCaptor.capture())
        argumentCaptor.value.onPreDraw()

        verify(moveFromCenterAnimation).onViewsReady(any(), any())
        verify(moveFromCenterAnimation).onViewsReady(any())
    }

    private fun createViewMock(): PhoneStatusBarView {
+104 −0
Original line number Diff line number Diff line
package com.android.systemui.statusbar.phone

import android.graphics.Point
import android.view.Display
import android.view.Surface
import android.view.View
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.ScopedUnfoldTransitionProgressProvider
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
class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {

    @Mock
    private lateinit var windowManager: WindowManager

    @Mock
    private lateinit var display: Display

    private val view: View = View(context)
    private val progressProvider = TestUnfoldTransitionProvider()
    private val scopedProvider = ScopedUnfoldTransitionProgressProvider(progressProvider)

    private lateinit var controller: StatusBarMoveFromCenterAnimationController

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        `when`(windowManager.defaultDisplay).thenReturn(display)
        `when`(display.rotation).thenReturn(Surface.ROTATION_0)
        `when`(display.getSize(any())).thenAnswer {
            val point = it.arguments[0] as Point
            point.x = 100
            point.y = 100
            Unit
        }

        scopedProvider.setReadyToHandleTransition(true)

        controller = StatusBarMoveFromCenterAnimationController(scopedProvider, windowManager)
    }

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

        progressProvider.onTransitionProgress(0.5f)
        progressProvider.onTransitionFinished()

        assertThat(view.translationX).isZero()
    }

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

        progressProvider.onTransitionProgress(0.5f)

        assertThat(view.translationX).isNonZero()
    }

    @Test
    fun onTransitionProgress_whenDetached_doesNotUpdateTranslations() {
        controller.onViewsReady(arrayOf(view))
        controller.onViewDetached()

        progressProvider.onTransitionProgress(0.5f)

        assertThat(view.translationX).isZero()
    }

    @Test
    fun detachedAfterProgress_resetsTranslations() {
        controller.onViewsReady(arrayOf(view))
        progressProvider.onTransitionProgress(0.5f)

        controller.onViewDetached()

        assertThat(view.translationX).isZero()
    }

    @Test
    fun transitionFinished_viewReAttached_noChangesToTranslation() {
        controller.onViewsReady(arrayOf(view))
        progressProvider.onTransitionProgress(0.5f)
        progressProvider.onTransitionFinished()
        controller.onViewDetached()

        controller.onViewsReady(arrayOf(view))
        controller.onStatusBarWidthChanged()

        assertThat(view.translationX).isZero()
    }
}