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.statusbar.phone.PhoneStatusBarViewController.StatusBarViewsCenterProvider
|
||||||
import com.android.systemui.unfold.SysUIUnfoldScope
|
import com.android.systemui.unfold.SysUIUnfoldScope
|
||||||
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
|
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
|
||||||
|
import com.android.systemui.unfold.util.CurrentActivityTypeProvider
|
||||||
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
|
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
@@ -29,9 +30,13 @@ import kotlin.math.max
|
|||||||
@SysUIUnfoldScope
|
@SysUIUnfoldScope
|
||||||
class StatusBarMoveFromCenterAnimationController @Inject constructor(
|
class StatusBarMoveFromCenterAnimationController @Inject constructor(
|
||||||
private val progressProvider: ScopedUnfoldTransitionProgressProvider,
|
private val progressProvider: ScopedUnfoldTransitionProgressProvider,
|
||||||
|
private val currentActivityTypeProvider: CurrentActivityTypeProvider,
|
||||||
windowManager: WindowManager
|
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 transitionListener = TransitionListener()
|
||||||
private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator(
|
private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator(
|
||||||
windowManager,
|
windowManager,
|
||||||
@@ -60,6 +65,10 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private inner class TransitionListener : TransitionProgressListener {
|
private inner class TransitionListener : TransitionProgressListener {
|
||||||
|
override fun onTransitionStarted() {
|
||||||
|
isOnHomeActivity = currentActivityTypeProvider.isHomeActivity
|
||||||
|
}
|
||||||
|
|
||||||
override fun onTransitionProgress(progress: Float) {
|
override fun onTransitionProgress(progress: Float) {
|
||||||
moveFromCenterAnimator.onTransitionProgress(progress)
|
moveFromCenterAnimator.onTransitionProgress(progress)
|
||||||
}
|
}
|
||||||
@@ -68,11 +77,23 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor(
|
|||||||
// Reset translations when transition is stopped/cancelled
|
// Reset translations when transition is stopped/cancelled
|
||||||
// (e.g. the transition could be cancelled mid-way when rotating the screen)
|
// (e.g. the transition could be cancelled mid-way when rotating the screen)
|
||||||
moveFromCenterAnimator.onTransitionProgress(1f)
|
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 {
|
override fun getAlpha(progress: Float): Float {
|
||||||
|
if (isOnHomeActivity == true) {
|
||||||
|
return 1.0f
|
||||||
|
}
|
||||||
return max(
|
return max(
|
||||||
0f,
|
0f,
|
||||||
(progress - ICONS_START_APPEARING_PROGRESS) / (1 - ICONS_START_APPEARING_PROGRESS)
|
(progress - ICONS_START_APPEARING_PROGRESS) / (1 - ICONS_START_APPEARING_PROGRESS)
|
||||||
|
|||||||
@@ -8,13 +8,14 @@ import android.view.WindowManager
|
|||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.unfold.TestUnfoldTransitionProvider
|
import com.android.systemui.unfold.TestUnfoldTransitionProvider
|
||||||
|
import com.android.systemui.unfold.util.CurrentActivityTypeProvider
|
||||||
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
|
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
|
||||||
|
import com.android.systemui.util.mockito.whenever
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.mockito.ArgumentMatchers.any
|
import org.mockito.ArgumentMatchers.any
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.`when`
|
|
||||||
import org.mockito.MockitoAnnotations
|
import org.mockito.MockitoAnnotations
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@@ -26,6 +27,9 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {
|
|||||||
@Mock
|
@Mock
|
||||||
private lateinit var display: Display
|
private lateinit var display: Display
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var currentActivityTypeProvider: CurrentActivityTypeProvider
|
||||||
|
|
||||||
private val view: View = View(context)
|
private val view: View = View(context)
|
||||||
private val progressProvider = TestUnfoldTransitionProvider()
|
private val progressProvider = TestUnfoldTransitionProvider()
|
||||||
private val scopedProvider = ScopedUnfoldTransitionProgressProvider(progressProvider)
|
private val scopedProvider = ScopedUnfoldTransitionProgressProvider(progressProvider)
|
||||||
@@ -36,9 +40,9 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {
|
|||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
|
||||||
`when`(windowManager.defaultDisplay).thenReturn(display)
|
whenever(windowManager.defaultDisplay).thenReturn(display)
|
||||||
`when`(display.rotation).thenReturn(Surface.ROTATION_0)
|
whenever(display.rotation).thenReturn(Surface.ROTATION_0)
|
||||||
`when`(display.getSize(any())).thenAnswer {
|
whenever(display.getSize(any())).thenAnswer {
|
||||||
val point = it.arguments[0] as Point
|
val point = it.arguments[0] as Point
|
||||||
point.x = 100
|
point.x = 100
|
||||||
point.y = 100
|
point.y = 100
|
||||||
@@ -47,7 +51,12 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {
|
|||||||
|
|
||||||
scopedProvider.setReadyToHandleTransition(true)
|
scopedProvider.setReadyToHandleTransition(true)
|
||||||
|
|
||||||
controller = StatusBarMoveFromCenterAnimationController(scopedProvider, windowManager)
|
controller =
|
||||||
|
StatusBarMoveFromCenterAnimationController(
|
||||||
|
scopedProvider,
|
||||||
|
currentActivityTypeProvider,
|
||||||
|
windowManager
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -98,6 +107,31 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() {
|
|||||||
assertThat(view.translationX).isZero()
|
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
|
@Test
|
||||||
fun transitionFinished_viewReAttached_noChangesToTranslation() {
|
fun transitionFinished_viewReAttached_noChangesToTranslation() {
|
||||||
controller.onViewsReady(arrayOf(view))
|
controller.onViewsReady(arrayOf(view))
|
||||||
|
|||||||
Reference in New Issue
Block a user