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

Commit 6a9ede75 authored by Chandru's avatar Chandru
Browse files

Extract duplicated code into methods in FaceScanningOverlay

Bug: 254814998
Test: NA
Test: verified manually, camera protection ring and face scanning overlay drawn correctly on keyguard.
Change-Id: If0bef65653394169a05b5633f8706a7707900c52
parent 1dd959d6
Loading
Loading
Loading
Loading
+42 −41
Original line number Diff line number Diff line
@@ -151,19 +151,12 @@ class FaceScanningOverlay(
                    if (showScanningAnim) Interpolators.STANDARD_ACCELERATE
                    else if (faceAuthSucceeded) Interpolators.STANDARD
                    else Interpolators.STANDARD_DECELERATE
            addUpdateListener(ValueAnimator.AnimatorUpdateListener {
                animation: ValueAnimator ->
                cameraProtectionProgress = animation.animatedValue as Float
                invalidate()
            })
            addUpdateListener(this@FaceScanningOverlay::updateCameraProtectionProgress)
            addListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator) {
                    cameraProtectionAnimator = null
                    if (!showScanningAnim) {
                        visibility = View.INVISIBLE
                        hideOverlayRunnable?.run()
                        hideOverlayRunnable = null
                        requestLayout()
                        hide()
                    }
                }
            })
@@ -172,19 +165,10 @@ class FaceScanningOverlay(
        rimAnimator?.cancel()
        rimAnimator = AnimatorSet().apply {
            if (showScanningAnim) {
                val rimAppearAnimator = ValueAnimator.ofFloat(SHOW_CAMERA_PROTECTION_SCALE,
                        PULSE_RADIUS_OUT).apply {
                    duration = PULSE_APPEAR_DURATION
                    interpolator = Interpolators.STANDARD_DECELERATE
                    addUpdateListener(ValueAnimator.AnimatorUpdateListener {
                        animation: ValueAnimator ->
                        rimProgress = animation.animatedValue as Float
                        invalidate()
                    })
                }

                // animate in camera protection, rim, and then pulse in/out
                playSequentially(cameraProtectionAnimator, rimAppearAnimator,
                playSequentially(
                    cameraProtectionAnimator,
                    createRimAppearAnimator(),
                        createPulseAnimator(), createPulseAnimator(),
                        createPulseAnimator(), createPulseAnimator(),
                        createPulseAnimator(), createPulseAnimator())
@@ -200,11 +184,7 @@ class FaceScanningOverlay(
                    interpolator =
                            if (faceAuthSucceeded) Interpolators.STANDARD_DECELERATE
                            else Interpolators.STANDARD
                    addUpdateListener(ValueAnimator.AnimatorUpdateListener {
                        animation: ValueAnimator ->
                        rimProgress = animation.animatedValue as Float
                        invalidate()
                    })
                    addUpdateListener(this@FaceScanningOverlay::updateRimProgress)
                    addListener(object : AnimatorListenerAdapter() {
                        override fun onAnimationEnd(animation: Animator) {
                            rimProgress = HIDDEN_RIM_SCALE
@@ -216,11 +196,7 @@ class FaceScanningOverlay(
                    val successOpacityAnimator = ValueAnimator.ofInt(255, 0).apply {
                        duration = PULSE_SUCCESS_DISAPPEAR_DURATION
                        interpolator = Interpolators.LINEAR
                        addUpdateListener(ValueAnimator.AnimatorUpdateListener {
                            animation: ValueAnimator ->
                            rimPaint.alpha = animation.animatedValue as Int
                            invalidate()
                        })
                        addUpdateListener(this@FaceScanningOverlay::updateRimAlpha)
                        addListener(object : AnimatorListenerAdapter() {
                            override fun onAnimationEnd(animation: Animator) {
                                rimPaint.alpha = 255
@@ -248,27 +224,52 @@ class FaceScanningOverlay(
        }
    }

    private fun createRimAppearAnimator(): ValueAnimator {
        return ValueAnimator.ofFloat(
            SHOW_CAMERA_PROTECTION_SCALE,
            PULSE_RADIUS_OUT
        ).apply {
            duration = PULSE_APPEAR_DURATION
            interpolator = Interpolators.STANDARD_DECELERATE
            addUpdateListener(this@FaceScanningOverlay::updateRimProgress)
        }
    }

    private fun hide() {
        visibility = INVISIBLE
        hideOverlayRunnable?.run()
        hideOverlayRunnable = null
        requestLayout()
    }

    private fun updateRimProgress(animator: ValueAnimator) {
        rimProgress = animator.animatedValue as Float
        invalidate()
    }

    private fun updateCameraProtectionProgress(animator: ValueAnimator) {
        cameraProtectionProgress = animator.animatedValue as Float
        invalidate()
    }

    private fun updateRimAlpha(animator: ValueAnimator) {
        rimPaint.alpha = animator.animatedValue as Int
        invalidate()
    }

    fun createPulseAnimator(): AnimatorSet {
        return AnimatorSet().apply {
            val pulseInwards = ValueAnimator.ofFloat(
                    PULSE_RADIUS_OUT, PULSE_RADIUS_IN).apply {
                duration = PULSE_DURATION_INWARDS
                interpolator = Interpolators.STANDARD
                addUpdateListener(ValueAnimator.AnimatorUpdateListener {
                    animation: ValueAnimator ->
                    rimProgress = animation.animatedValue as Float
                    invalidate()
                })
                addUpdateListener(this@FaceScanningOverlay::updateRimProgress)
            }
            val pulseOutwards = ValueAnimator.ofFloat(
                    PULSE_RADIUS_IN, PULSE_RADIUS_OUT).apply {
                duration = PULSE_DURATION_OUTWARDS
                interpolator = Interpolators.STANDARD
                addUpdateListener(ValueAnimator.AnimatorUpdateListener {
                    animation: ValueAnimator ->
                    rimProgress = animation.animatedValue as Float
                    invalidate()
                })
                addUpdateListener(this@FaceScanningOverlay::updateRimProgress)
            }
            playSequentially(pulseInwards, pulseOutwards)
        }