diff options
| author | 2024-04-26 11:36:58 +0000 | |
|---|---|---|
| committer | 2024-04-26 11:57:50 +0000 | |
| commit | a326efd404b0b780daae6dfb637fe24eaeea87ce (patch) | |
| tree | ad0d670d5e865baae89f71738c2a34235c86f97b | |
| parent | 5e899586fa7687045b70c5920cad7afce7600520 (diff) | |
Fix flickering notifs...
... and leaking animator. The smartspace view animator could be
leaked when going to/from AOD while the clock transition was
running. This left a predraw listener attached forever, and was
most noticeably causing flicker on notifications.
It turns out there's no guarantee that an animator underlying a
transition will end, which left the predraw listener attached.
Using a TransitionListener instead seems to be more reliable.
Fixes: 334528077
Fixes: 332979277
Test: Repeatedly switch between large and small clocks with
and without media. Observe traces to ensure no predraw
listener remains attached.
Flag: N/A
Change-Id: Iac51bdde8de524a8ad95bfd116e2eeb55cd47eeb
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt index 0bc60c4b9543..7c29b39ad12c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt @@ -21,6 +21,7 @@ import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.graphics.Rect import android.transition.Transition +import android.transition.TransitionListenerAdapter import android.transition.TransitionSet import android.transition.TransitionValues import android.util.Log @@ -169,6 +170,18 @@ class ClockSizeTransition( return@OnPreDrawListener true } + this@VisibilityBoundsTransition.addListener( + object : TransitionListenerAdapter() { + override fun onTransitionStart(t: Transition) { + toView.viewTreeObserver.addOnPreDrawListener(predrawCallback) + } + + override fun onTransitionEnd(t: Transition) { + toView.viewTreeObserver.removeOnPreDrawListener(predrawCallback) + } + } + ) + val listener = object : AnimatorListenerAdapter() { override fun onAnimationStart(anim: Animator) { @@ -178,26 +191,11 @@ class ClockSizeTransition( override fun onAnimationEnd(anim: Animator) { assignAnimValues("end", 1f, toVis) if (sendToBack) toView.translationZ = 0f - toView.viewTreeObserver.removeOnPreDrawListener(predrawCallback) - } - - override fun onAnimationPause(anim: Animator) { - toView.viewTreeObserver.removeOnPreDrawListener(predrawCallback) - } - - override fun onAnimationResume(anim: Animator) { - toView.viewTreeObserver.addOnPreDrawListener(predrawCallback) } } - anim.duration = duration - anim.startDelay = startDelay - anim.interpolator = interpolator anim.addListener(listener) - anim.addPauseListener(listener) - assignAnimValues("init", 0f, fromVis) - toView.viewTreeObserver.addOnPreDrawListener(predrawCallback) } } |