Merge "Fix narrow statusbar when folding" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4003a0d744
@@ -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 -> {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user