Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 12ea3831 authored by Evan Laird's avatar Evan Laird
Browse files

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
parent 717f0992
Loading
Loading
Loading
Loading
+15 −14
Original line number Diff line number Diff line
@@ -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)
+7 −6
Original line number Diff line number Diff line
@@ -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
+6 −0
Original line number Diff line number Diff line
@@ -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)
    }
}