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:
Nicolo' Mazzucato
2023-03-06 08:12:01 +00:00
parent d08e90b90a
commit bb0a0b80ab
2 changed files with 61 additions and 6 deletions

View File

@@ -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)

View File

@@ -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))