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

Commit 966b854d authored by Chandru S's avatar Chandru S
Browse files

Extract animators into separate methods

The plan to fix the NPE is to not store the animators as fields, store only the combined animator set, cancel and re-instantiate and start it every time.
This CL extracts all usages of the cameraProtectionAnimator field to be a parameter for all methods that use it.

Bug: 392032258
Test: NA
Flag: EXEMPT extracting code into separate methods.
Change-Id: Ib0ce136d0d6c1dff8623cf6ddb217f4b249ccdbd
parent 6c61285f
Loading
Loading
Loading
Loading
+49 −37
Original line number Diff line number Diff line
@@ -110,9 +110,41 @@ class FaceScanningOverlay(
        }

        cameraProtectionAnimator?.cancel()
        cameraProtectionAnimator = ValueAnimator.ofFloat(cameraProtectionProgress,
                if (showScanningAnimationNow) SHOW_CAMERA_PROTECTION_SCALE
                else HIDDEN_CAMERA_PROTECTION_SCALE).apply {
        cameraProtectionAnimator = cameraProtectionAnimator(faceAuthSucceeded)

        rimAnimator?.cancel()
        rimAnimator = faceScanningRimAnimator(faceAuthSucceeded, cameraProtectionAnimator)
        rimAnimator?.start()
    }

    private fun faceScanningRimAnimator(
        faceAuthSucceeded: Boolean,
        cameraProtectAnimator: ValueAnimator?
    ): AnimatorSet {
        return if (showScanningAnim) {
            createFaceScanningRimAnimator(cameraProtectAnimator)
        } else if (faceAuthSucceeded) {
            createFaceSuccessRimAnimator(cameraProtectAnimator)
        } else {
            createFaceNotSuccessRimAnimator(cameraProtectAnimator)
        }.apply {
            addListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator) {
                    rimAnimator = null
                    if (!showScanningAnim) {
                        requestLayout()
                    }
                }
            })
        }
    }

    private fun cameraProtectionAnimator(faceAuthSucceeded: Boolean): ValueAnimator {
        return ValueAnimator.ofFloat(
            cameraProtectionProgress,
            if (showScanningAnim) SHOW_CAMERA_PROTECTION_SCALE
            else HIDDEN_CAMERA_PROTECTION_SCALE
        ).apply {
            startDelay =
                if (showScanningAnim) 0
                else if (faceAuthSucceeded) PULSE_SUCCESS_DISAPPEAR_DURATION
@@ -135,26 +167,6 @@ class FaceScanningOverlay(
                }
            })
        }

        rimAnimator?.cancel()
        rimAnimator = if (showScanningAnim) {
            createFaceScanningRimAnimator()
        } else if (faceAuthSucceeded) {
            createFaceSuccessRimAnimator()
        } else {
            createFaceNotSuccessRimAnimator()
        }
        rimAnimator?.apply {
            addListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator) {
                    rimAnimator = null
                    if (!showScanningAnim) {
                        requestLayout()
                    }
                }
            })
        }
        rimAnimator?.start()
    }

    override fun updateVisOnUpdateCutout(): Boolean {
@@ -219,7 +231,7 @@ class FaceScanningOverlay(
        canvas.drawPath(scaledProtectionPath, paint)
    }

    private fun createFaceSuccessRimAnimator(): AnimatorSet {
    private fun createFaceSuccessRimAnimator(cameraProtectAnimator: ValueAnimator?): AnimatorSet {
        val rimSuccessAnimator = AnimatorSet()
        rimSuccessAnimator.playTogether(
            createRimDisappearAnimator(
@@ -230,11 +242,11 @@ class FaceScanningOverlay(
            createSuccessOpacityAnimator(),
        )
        return AnimatorSet().apply {
            playTogether(rimSuccessAnimator, cameraProtectionAnimator)
            playTogether(rimSuccessAnimator, cameraProtectAnimator)
        }
    }

    private fun createFaceNotSuccessRimAnimator(): AnimatorSet {
    private fun createFaceNotSuccessRimAnimator(cameraProtectAnimator: ValueAnimator?): AnimatorSet {
        return AnimatorSet().apply {
            playTogether(
                createRimDisappearAnimator(
@@ -242,7 +254,7 @@ class FaceScanningOverlay(
                    PULSE_ERROR_DISAPPEAR_DURATION,
                    Interpolators.STANDARD
                ),
                cameraProtectionAnimator,
                cameraProtectAnimator,
            )
        }
    }
@@ -279,10 +291,10 @@ class FaceScanningOverlay(
        }
    }

    private fun createFaceScanningRimAnimator(): AnimatorSet {
    private fun createFaceScanningRimAnimator(cameraProtectAnimator: ValueAnimator?): AnimatorSet {
        return AnimatorSet().apply {
            playSequentially(
                    cameraProtectionAnimator,
                cameraProtectAnimator,
                createRimAppearAnimator(),
            )
        }