diff options
| author | 2025-01-27 18:35:18 +0000 | |
|---|---|---|
| committer | 2025-01-27 11:30:49 -0800 | |
| commit | 966b854d5a73d562d1e3c506294990f7f99e37cc (patch) | |
| tree | d045b6b49a565c3d4c3dd4267a4e44c47baf4937 | |
| parent | 6c61285f87734c51ca333bbc636c27e3d6aed83c (diff) | |
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
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt | 86 |
1 files changed, 49 insertions, 37 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt b/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt index 11ce168b9bcb..da90239195e9 100644 --- a/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt +++ b/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt @@ -110,51 +110,63 @@ class FaceScanningOverlay( } cameraProtectionAnimator?.cancel() - cameraProtectionAnimator = ValueAnimator.ofFloat(cameraProtectionProgress, - if (showScanningAnimationNow) SHOW_CAMERA_PROTECTION_SCALE - else HIDDEN_CAMERA_PROTECTION_SCALE).apply { - startDelay = - if (showScanningAnim) 0 - else if (faceAuthSucceeded) PULSE_SUCCESS_DISAPPEAR_DURATION - else PULSE_ERROR_DISAPPEAR_DURATION - duration = - if (showScanningAnim) CAMERA_PROTECTION_APPEAR_DURATION - else if (faceAuthSucceeded) CAMERA_PROTECTION_SUCCESS_DISAPPEAR_DURATION - else CAMERA_PROTECTION_ERROR_DISAPPEAR_DURATION - interpolator = - if (showScanningAnim) Interpolators.STANDARD_ACCELERATE - else if (faceAuthSucceeded) Interpolators.STANDARD - else Interpolators.STANDARD_DECELERATE - addUpdateListener(this@FaceScanningOverlay::updateCameraProtectionProgress) + 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) { - cameraProtectionAnimator = null + rimAnimator = null if (!showScanningAnim) { - hide() + requestLayout() } } }) } + } - rimAnimator?.cancel() - rimAnimator = if (showScanningAnim) { - createFaceScanningRimAnimator() - } else if (faceAuthSucceeded) { - createFaceSuccessRimAnimator() - } else { - createFaceNotSuccessRimAnimator() - } - rimAnimator?.apply { + 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 + else PULSE_ERROR_DISAPPEAR_DURATION + duration = + if (showScanningAnim) CAMERA_PROTECTION_APPEAR_DURATION + else if (faceAuthSucceeded) CAMERA_PROTECTION_SUCCESS_DISAPPEAR_DURATION + else CAMERA_PROTECTION_ERROR_DISAPPEAR_DURATION + interpolator = + if (showScanningAnim) Interpolators.STANDARD_ACCELERATE + else if (faceAuthSucceeded) Interpolators.STANDARD + else Interpolators.STANDARD_DECELERATE + addUpdateListener(this@FaceScanningOverlay::updateCameraProtectionProgress) addListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator) { - rimAnimator = null + cameraProtectionAnimator = null if (!showScanningAnim) { - requestLayout() + hide() } } }) } - 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,11 +291,11 @@ class FaceScanningOverlay( } } - private fun createFaceScanningRimAnimator(): AnimatorSet { + private fun createFaceScanningRimAnimator(cameraProtectAnimator: ValueAnimator?): AnimatorSet { return AnimatorSet().apply { playSequentially( - cameraProtectionAnimator, - createRimAppearAnimator(), + cameraProtectAnimator, + createRimAppearAnimator(), ) } } |