Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarMoveFromCenterAnimationController.kt +22 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading Loading @@ -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) } Loading @@ -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) Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarMoveFromCenterAnimationControllerTest.kt +39 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) Loading @@ -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 Loading @@ -47,7 +51,12 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() { scopedProvider.setReadyToHandleTransition(true) controller = StatusBarMoveFromCenterAnimationController(scopedProvider, windowManager) controller = StatusBarMoveFromCenterAnimationController( scopedProvider, currentActivityTypeProvider, windowManager ) } @Test Loading Loading @@ -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)) Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarMoveFromCenterAnimationController.kt +22 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading Loading @@ -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) } Loading @@ -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) Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarMoveFromCenterAnimationControllerTest.kt +39 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) Loading @@ -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 Loading @@ -47,7 +51,12 @@ class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() { scopedProvider.setReadyToHandleTransition(true) controller = StatusBarMoveFromCenterAnimationController(scopedProvider, windowManager) controller = StatusBarMoveFromCenterAnimationController( scopedProvider, currentActivityTypeProvider, windowManager ) } @Test Loading Loading @@ -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)) Loading