Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimatorTest.kt +6 −1 Original line number Diff line number Diff line Loading @@ -15,19 +15,22 @@ */ package com.android.systemui.statusbar.notification import android.animation.AnimatorTestRule import android.util.FloatProperty import android.util.Property import android.view.View import androidx.dynamicanimation.animation.DynamicAnimation import androidx.test.annotation.UiThreadTest import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.dynamicanimation.animation.DynamicAnimation import com.android.systemui.SysuiTestCase import com.android.systemui.res.R import com.android.systemui.statusbar.notification.stack.AnimationProperties import com.android.systemui.statusbar.notification.stack.ViewState import org.junit.Assert import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito Loading @@ -50,6 +53,8 @@ class PhysicsPropertyAnimatorTest : SysuiTestCase() { return _value } } @get:Rule val animatorTestRule = AnimatorTestRule(this) private val property: PhysicsProperty = PhysicsProperty(R.id.scale_x_animator_tag, effectiveProperty) private var finishListener: DynamicAnimation.OnAnimationEndListener? = null Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt +34 −2 Original line number Diff line number Diff line Loading @@ -18,9 +18,11 @@ package com.android.systemui.statusbar.notification.stack import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.SetFlagsRule import android.testing.TestableLooper.RunWithLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags import com.android.systemui.SysuiTestCase import com.android.systemui.animation.AnimatorTestRule import com.android.systemui.res.R Loading @@ -44,6 +46,7 @@ import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.description import org.mockito.Mockito.eq import org.mockito.Mockito.verify import org.mockito.kotlin.doNothing private const val VIEW_HEIGHT = 100 private const val FULL_SHADE_APPEAR_TRANSLATION = 300 Loading @@ -53,18 +56,20 @@ private const val HEADS_UP_ABOVE_SCREEN = 80 @RunWith(AndroidJUnit4::class) @RunWithLooper class StackStateAnimatorTest : SysuiTestCase() { @get:Rule val setFlagsRule = SetFlagsRule() @get:Rule val animatorTestRule = AnimatorTestRule(this) private lateinit var stackStateAnimator: StackStateAnimator private lateinit var headsUpAnimator: HeadsUpAnimator private val stackScroller: NotificationStackScrollLayout = mock() private val view: ExpandableView = mock() private val viewState: ExpandableViewState = ExpandableViewState().apply { height = VIEW_HEIGHT } private lateinit var viewState: ExpandableViewState private val runnableCaptor: ArgumentCaptor<Runnable> = argumentCaptor() @Before fun setUp() { viewState = ExpandableViewState().apply { height = VIEW_HEIGHT } overrideResource( R.dimen.go_to_full_shade_appearing_translation, FULL_SHADE_APPEAR_TRANSLATION, Loading Loading @@ -153,6 +158,7 @@ class StackStateAnimatorTest : SysuiTestCase() { ) } @DisableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT) @Test @EnableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME) fun startAnimationForEvents_headsUpFromBottom_startsHeadsUpAppearAnim_flagOn() { Loading Loading @@ -238,6 +244,32 @@ class StackStateAnimatorTest : SysuiTestCase() { .removeFromTransientContainer() } @EnableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT) @Test fun startAnimationForEvents_startsHeadsUpDisappearAnim_physical() { val disappearDuration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR.toLong() val event = AnimationEvent(view, AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR) clearInvocations(view) stackStateAnimator.startAnimationForEvents(arrayListOf(event), 0) verify(view) .performRemoveAnimation( /* duration= */ eq(disappearDuration), /* delay= */ eq(0L), /* translationDirection= */ eq(0f), /* isHeadsUpAnimation= */ eq(true), /* isHeadsUpCycling= */ eq(false), /* onStartedRunnable= */ any(), /* onFinishedRunnable= */ runnableCaptor.capture(), /* animationListener= */ any(), /* clipSide= */ eq(ExpandableView.ClipSide.BOTTOM), ) runnableCaptor.value.run() // execute the end runnable verify(view, description("should be called at the end of the disappear animation")) .removeFromTransientContainer() } @Test fun initView_updatesResources() { // Given: the resource values are initialized in the SSA Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ViewStateTest.kt +4 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.notification.stack import android.animation.AnimatorTestRule import android.animation.ValueAnimator import android.view.View import androidx.test.annotation.UiThreadTest Loading @@ -28,6 +29,7 @@ import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.TAG_ANIMATOR_TRANSLATION_Y import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.Y_TRANSLATION import org.junit.Assert import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import kotlin.math.log2 Loading @@ -38,6 +40,8 @@ import kotlin.math.sqrt @UiThreadTest class ViewStateTest : SysuiTestCase() { private val viewState = ViewState(true /* usePhysicsForMovement */) @get:Rule val animatorTestRule = AnimatorTestRule(this) @Suppress("DIVISION_BY_ZERO") @Test Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimator.kt +6 −6 Original line number Diff line number Diff line Loading @@ -15,12 +15,12 @@ */ package com.android.systemui.statusbar.notification import android.util.FloatProperty import android.util.Property import android.view.View import androidx.dynamicanimation.animation.DynamicAnimation import androidx.dynamicanimation.animation.FloatPropertyCompat import androidx.dynamicanimation.animation.SpringAnimation import androidx.dynamicanimation.animation.SpringForce import com.android.internal.dynamicanimation.animation.DynamicAnimation import com.android.internal.dynamicanimation.animation.SpringAnimation import com.android.internal.dynamicanimation.animation.SpringForce import com.android.systemui.res.R import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.createDefaultSpring import com.android.systemui.statusbar.notification.stack.AnimationProperties Loading @@ -33,8 +33,8 @@ import com.android.systemui.statusbar.notification.stack.AnimationProperties */ data class PhysicsProperty(val tag: Int, val property: Property<View, Float>) { val offsetProperty = object : FloatPropertyCompat<View>(property.name) { override fun getValue(view: View): Float { object : FloatProperty<View>(property.name) { override fun get(view: View): Float { return property.get(view) } Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java +1 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import android.util.Property; import android.view.View; import android.view.animation.Interpolator; import androidx.dynamicanimation.animation.DynamicAnimation; import com.android.internal.dynamicanimation.animation.DynamicAnimation; import java.util.function.Consumer; Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimatorTest.kt +6 −1 Original line number Diff line number Diff line Loading @@ -15,19 +15,22 @@ */ package com.android.systemui.statusbar.notification import android.animation.AnimatorTestRule import android.util.FloatProperty import android.util.Property import android.view.View import androidx.dynamicanimation.animation.DynamicAnimation import androidx.test.annotation.UiThreadTest import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.dynamicanimation.animation.DynamicAnimation import com.android.systemui.SysuiTestCase import com.android.systemui.res.R import com.android.systemui.statusbar.notification.stack.AnimationProperties import com.android.systemui.statusbar.notification.stack.ViewState import org.junit.Assert import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito Loading @@ -50,6 +53,8 @@ class PhysicsPropertyAnimatorTest : SysuiTestCase() { return _value } } @get:Rule val animatorTestRule = AnimatorTestRule(this) private val property: PhysicsProperty = PhysicsProperty(R.id.scale_x_animator_tag, effectiveProperty) private var finishListener: DynamicAnimation.OnAnimationEndListener? = null Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt +34 −2 Original line number Diff line number Diff line Loading @@ -18,9 +18,11 @@ package com.android.systemui.statusbar.notification.stack import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.SetFlagsRule import android.testing.TestableLooper.RunWithLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags import com.android.systemui.SysuiTestCase import com.android.systemui.animation.AnimatorTestRule import com.android.systemui.res.R Loading @@ -44,6 +46,7 @@ import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.description import org.mockito.Mockito.eq import org.mockito.Mockito.verify import org.mockito.kotlin.doNothing private const val VIEW_HEIGHT = 100 private const val FULL_SHADE_APPEAR_TRANSLATION = 300 Loading @@ -53,18 +56,20 @@ private const val HEADS_UP_ABOVE_SCREEN = 80 @RunWith(AndroidJUnit4::class) @RunWithLooper class StackStateAnimatorTest : SysuiTestCase() { @get:Rule val setFlagsRule = SetFlagsRule() @get:Rule val animatorTestRule = AnimatorTestRule(this) private lateinit var stackStateAnimator: StackStateAnimator private lateinit var headsUpAnimator: HeadsUpAnimator private val stackScroller: NotificationStackScrollLayout = mock() private val view: ExpandableView = mock() private val viewState: ExpandableViewState = ExpandableViewState().apply { height = VIEW_HEIGHT } private lateinit var viewState: ExpandableViewState private val runnableCaptor: ArgumentCaptor<Runnable> = argumentCaptor() @Before fun setUp() { viewState = ExpandableViewState().apply { height = VIEW_HEIGHT } overrideResource( R.dimen.go_to_full_shade_appearing_translation, FULL_SHADE_APPEAR_TRANSLATION, Loading Loading @@ -153,6 +158,7 @@ class StackStateAnimatorTest : SysuiTestCase() { ) } @DisableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT) @Test @EnableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME) fun startAnimationForEvents_headsUpFromBottom_startsHeadsUpAppearAnim_flagOn() { Loading Loading @@ -238,6 +244,32 @@ class StackStateAnimatorTest : SysuiTestCase() { .removeFromTransientContainer() } @EnableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT) @Test fun startAnimationForEvents_startsHeadsUpDisappearAnim_physical() { val disappearDuration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR.toLong() val event = AnimationEvent(view, AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR) clearInvocations(view) stackStateAnimator.startAnimationForEvents(arrayListOf(event), 0) verify(view) .performRemoveAnimation( /* duration= */ eq(disappearDuration), /* delay= */ eq(0L), /* translationDirection= */ eq(0f), /* isHeadsUpAnimation= */ eq(true), /* isHeadsUpCycling= */ eq(false), /* onStartedRunnable= */ any(), /* onFinishedRunnable= */ runnableCaptor.capture(), /* animationListener= */ any(), /* clipSide= */ eq(ExpandableView.ClipSide.BOTTOM), ) runnableCaptor.value.run() // execute the end runnable verify(view, description("should be called at the end of the disappear animation")) .removeFromTransientContainer() } @Test fun initView_updatesResources() { // Given: the resource values are initialized in the SSA Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ViewStateTest.kt +4 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.notification.stack import android.animation.AnimatorTestRule import android.animation.ValueAnimator import android.view.View import androidx.test.annotation.UiThreadTest Loading @@ -28,6 +29,7 @@ import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.TAG_ANIMATOR_TRANSLATION_Y import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.Y_TRANSLATION import org.junit.Assert import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import kotlin.math.log2 Loading @@ -38,6 +40,8 @@ import kotlin.math.sqrt @UiThreadTest class ViewStateTest : SysuiTestCase() { private val viewState = ViewState(true /* usePhysicsForMovement */) @get:Rule val animatorTestRule = AnimatorTestRule(this) @Suppress("DIVISION_BY_ZERO") @Test Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimator.kt +6 −6 Original line number Diff line number Diff line Loading @@ -15,12 +15,12 @@ */ package com.android.systemui.statusbar.notification import android.util.FloatProperty import android.util.Property import android.view.View import androidx.dynamicanimation.animation.DynamicAnimation import androidx.dynamicanimation.animation.FloatPropertyCompat import androidx.dynamicanimation.animation.SpringAnimation import androidx.dynamicanimation.animation.SpringForce import com.android.internal.dynamicanimation.animation.DynamicAnimation import com.android.internal.dynamicanimation.animation.SpringAnimation import com.android.internal.dynamicanimation.animation.SpringForce import com.android.systemui.res.R import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.createDefaultSpring import com.android.systemui.statusbar.notification.stack.AnimationProperties Loading @@ -33,8 +33,8 @@ import com.android.systemui.statusbar.notification.stack.AnimationProperties */ data class PhysicsProperty(val tag: Int, val property: Property<View, Float>) { val offsetProperty = object : FloatPropertyCompat<View>(property.name) { override fun getValue(view: View): Float { object : FloatProperty<View>(property.name) { override fun get(view: View): Float { return property.get(view) } Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java +1 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import android.util.Property; import android.view.View; import android.view.animation.Interpolator; import androidx.dynamicanimation.animation.DynamicAnimation; import com.android.internal.dynamicanimation.animation.DynamicAnimation; import java.util.function.Consumer; Loading