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
This commit is contained in:
@@ -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