Merge "Don't apply alpha to statusbar during unfold anim on launcher" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2023-03-06 11:49:04 +00:00
committed by Android (Google) Code Review
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))