Merge "Don't apply alpha to statusbar during unfold anim on launcher" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b5c84e3ae1
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user