summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Pietal <mpietal@google.com> 2024-04-26 11:36:58 +0000
committer Matt Pietal <mpietal@google.com> 2024-04-26 11:57:50 +0000
commita326efd404b0b780daae6dfb637fe24eaeea87ce (patch)
treead0d670d5e865baae89f71738c2a34235c86f97b
parent5e899586fa7687045b70c5920cad7afce7600520 (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.kt28
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)
}
}