Use 60Hz frame calculations instead of magic numbers
Create an Int.frames extension function and use it instead of magic numbers for the status bar animations. Test: manual Fixes: 224544607 Change-Id: I11fc1feb2840985375f326e0ba32076307801e94
This commit is contained in:
@@ -32,6 +32,7 @@ import android.widget.FrameLayout
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider
|
||||
import com.android.systemui.statusbar.window.StatusBarWindowController
|
||||
import com.android.systemui.util.animation.AnimationUtil.Companion.frames
|
||||
import javax.inject.Inject
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
@@ -109,14 +110,14 @@ class SystemEventChipAnimationController @Inject constructor(
|
||||
initializeAnimRect()
|
||||
|
||||
val alphaIn = ValueAnimator.ofFloat(0f, 1f).apply {
|
||||
startDelay = 117
|
||||
duration = 83
|
||||
startDelay = 7.frames
|
||||
duration = 5.frames
|
||||
interpolator = null
|
||||
addUpdateListener { currentAnimatedView?.view?.alpha = animatedValue as Float }
|
||||
}
|
||||
val moveIn = ValueAnimator.ofInt(chipMinWidth, chipWidth).apply {
|
||||
startDelay = 117
|
||||
duration = 383
|
||||
startDelay = 7.frames
|
||||
duration = 23.frames
|
||||
interpolator = STATUS_BAR_X_MOVE_IN
|
||||
addUpdateListener {
|
||||
updateAnimatedViewBoundsWidth(animatedValue as Int)
|
||||
@@ -146,7 +147,7 @@ class SystemEventChipAnimationController @Inject constructor(
|
||||
|
||||
private fun createMoveOutAnimationForDot(): Animator {
|
||||
val width1 = ValueAnimator.ofInt(chipWidth, chipMinWidth).apply {
|
||||
duration = 150
|
||||
duration = 9.frames
|
||||
interpolator = STATUS_CHIP_WIDTH_TO_DOT_KEYFRAME_1
|
||||
addUpdateListener {
|
||||
updateAnimatedViewBoundsWidth(it.animatedValue as Int)
|
||||
@@ -154,8 +155,8 @@ class SystemEventChipAnimationController @Inject constructor(
|
||||
}
|
||||
|
||||
val width2 = ValueAnimator.ofInt(chipMinWidth, dotSize).apply {
|
||||
startDelay = 150
|
||||
duration = 333
|
||||
startDelay = 9.frames
|
||||
duration = 20.frames
|
||||
interpolator = STATUS_CHIP_WIDTH_TO_DOT_KEYFRAME_2
|
||||
addUpdateListener {
|
||||
updateAnimatedViewBoundsWidth(it.animatedValue as Int)
|
||||
@@ -167,8 +168,8 @@ class SystemEventChipAnimationController @Inject constructor(
|
||||
val chipVerticalCenter = v.top + v.measuredHeight / 2
|
||||
val height1 = ValueAnimator.ofInt(
|
||||
currentAnimatedView!!.view.measuredHeight, keyFrame1Height).apply {
|
||||
startDelay = 133
|
||||
duration = 100
|
||||
startDelay = 8.frames
|
||||
duration = 6.frames
|
||||
interpolator = STATUS_CHIP_HEIGHT_TO_DOT_KEYFRAME_1
|
||||
addUpdateListener {
|
||||
updateAnimatedViewBoundsHeight(it.animatedValue as Int, chipVerticalCenter)
|
||||
@@ -176,8 +177,8 @@ class SystemEventChipAnimationController @Inject constructor(
|
||||
}
|
||||
|
||||
val height2 = ValueAnimator.ofInt(keyFrame1Height, dotSize).apply {
|
||||
startDelay = 233
|
||||
duration = 250
|
||||
startDelay = 14.frames
|
||||
duration = 15.frames
|
||||
interpolator = STATUS_CHIP_HEIGHT_TO_DOT_KEYFRAME_2
|
||||
addUpdateListener {
|
||||
updateAnimatedViewBoundsHeight(it.animatedValue as Int, chipVerticalCenter)
|
||||
@@ -187,8 +188,8 @@ class SystemEventChipAnimationController @Inject constructor(
|
||||
// Move the chip view to overlap exactly with the privacy dot. The chip displays by default
|
||||
// exactly adjacent to the dot, so we can just move over by the diameter of the dot itself
|
||||
val moveOut = ValueAnimator.ofInt(0, dotSize).apply {
|
||||
startDelay = 50
|
||||
duration = 183
|
||||
startDelay = 3.frames
|
||||
duration = 11.frames
|
||||
interpolator = STATUS_CHIP_MOVE_TO_DOT
|
||||
addUpdateListener {
|
||||
// If RTL, we can just invert the move
|
||||
@@ -208,7 +209,7 @@ class SystemEventChipAnimationController @Inject constructor(
|
||||
|
||||
private fun createMoveOutAnimationDefault(): Animator {
|
||||
val moveOut = ValueAnimator.ofInt(chipWidth, chipMinWidth).apply {
|
||||
duration = 383
|
||||
duration = 23.frames
|
||||
addUpdateListener {
|
||||
currentAnimatedView?.apply {
|
||||
updateAnimatedViewBoundsWidth(it.animatedValue as Int)
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.android.systemui.R
|
||||
import com.android.systemui.statusbar.events.STATUS_BAR_X_MOVE_IN
|
||||
import com.android.systemui.statusbar.events.STATUS_BAR_X_MOVE_OUT
|
||||
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback
|
||||
import com.android.systemui.util.animation.AnimationUtil.Companion.frames
|
||||
|
||||
/**
|
||||
* Tied directly to [SystemStatusAnimationScheduler]. Any StatusBar-like thing (keyguard, collapsed
|
||||
@@ -45,12 +46,12 @@ class StatusBarSystemEventAnimator(
|
||||
R.dimen.ongoing_appops_chip_animation_out_status_bar_translation_x)
|
||||
|
||||
override fun onSystemEventAnimationBegin(): Animator {
|
||||
val moveOut = ValueAnimator.ofFloat(0f, 1f).setDuration(383)
|
||||
val moveOut = ValueAnimator.ofFloat(0f, 1f).setDuration(23.frames)
|
||||
moveOut.interpolator = STATUS_BAR_X_MOVE_OUT
|
||||
moveOut.addUpdateListener { animation: ValueAnimator ->
|
||||
animatedView.translationX = -(translationXIn * animation.animatedValue as Float)
|
||||
}
|
||||
val alphaOut = ValueAnimator.ofFloat(1f, 0f).setDuration(133)
|
||||
val alphaOut = ValueAnimator.ofFloat(1f, 0f).setDuration(8.frames)
|
||||
alphaOut.interpolator = null
|
||||
alphaOut.addUpdateListener { animation: ValueAnimator ->
|
||||
animatedView.alpha = animation.animatedValue as Float
|
||||
@@ -63,14 +64,14 @@ class StatusBarSystemEventAnimator(
|
||||
|
||||
override fun onSystemEventAnimationFinish(hasPersistentDot: Boolean): Animator {
|
||||
animatedView.translationX = translationXOut.toFloat()
|
||||
val moveIn = ValueAnimator.ofFloat(1f, 0f).setDuration(467)
|
||||
moveIn.startDelay = 33
|
||||
val moveIn = ValueAnimator.ofFloat(1f, 0f).setDuration(28.frames)
|
||||
moveIn.startDelay = 2.frames
|
||||
moveIn.interpolator = STATUS_BAR_X_MOVE_IN
|
||||
moveIn.addUpdateListener { animation: ValueAnimator ->
|
||||
animatedView.translationX = translationXOut * animation.animatedValue as Float
|
||||
}
|
||||
val alphaIn = ValueAnimator.ofFloat(0f, 1f).setDuration(167)
|
||||
alphaIn.startDelay = 67
|
||||
val alphaIn = ValueAnimator.ofFloat(0f, 1f).setDuration(10.frames)
|
||||
alphaIn.startDelay = 4.frames
|
||||
alphaIn.interpolator = null
|
||||
alphaIn.addUpdateListener { animation: ValueAnimator ->
|
||||
animatedView.alpha = animation.animatedValue as Float
|
||||
|
||||
@@ -37,5 +37,11 @@ class AnimationUtil {
|
||||
}
|
||||
return (numFrames * 1000f / 60f).roundToLong()
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience extension function for [getMsForFrames], so that we can write `23.frames`
|
||||
*/
|
||||
val Int.frames: Long
|
||||
get() = getMsForFrames(this)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user