diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/DialogLaunchAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/DialogLaunchAnimator.kt index f7a7603944f6e..3051d8056a89e 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/DialogLaunchAnimator.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/DialogLaunchAnimator.kt @@ -19,6 +19,7 @@ package com.android.systemui.animation import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator +import android.app.ActivityManager import android.app.Dialog import android.graphics.Color import android.graphics.Rect @@ -45,7 +46,8 @@ private const val TAG = "DialogLaunchAnimator" class DialogLaunchAnimator @JvmOverloads constructor( private val dreamManager: IDreamManager, private val launchAnimator: LaunchAnimator = LaunchAnimator(TIMINGS, INTERPOLATORS), - private var isForTesting: Boolean = false + // TODO(b/217621394): Remove special handling for low-RAM devices after animation sync is fixed + private var forceDisableSynchronization: Boolean = ActivityManager.isLowRamDeviceStatic() ) { private companion object { private val TIMINGS = ActivityLaunchAnimator.TIMINGS @@ -111,7 +113,7 @@ class DialogLaunchAnimator @JvmOverloads constructor( dialog = dialog, animateBackgroundBoundsChange, animatedParent, - isForTesting + forceDisableSynchronization ) openedDialogs.add(animatedDialog) @@ -187,10 +189,9 @@ private class AnimatedDialog( private val parentAnimatedDialog: AnimatedDialog? = null, /** - * Whether we are currently running in a test, in which case we need to disable - * synchronization. + * Whether synchronization should be disabled, which can be useful if we are running in a test. */ - private val isForTesting: Boolean + private val forceDisableSynchronization: Boolean ) { /** * The DecorView of this dialog window. @@ -420,8 +421,9 @@ private class AnimatedDialog( * (or inversely, removed from the UI when the touch surface is made visible). */ private fun synchronizeNextDraw(then: () -> Unit) { - if (isForTesting || !touchSurface.isAttachedToWindow || touchSurface.viewRootImpl == null || - !decorView.isAttachedToWindow || decorView.viewRootImpl == null) { + if (forceDisableSynchronization || + !touchSurface.isAttachedToWindow || touchSurface.viewRootImpl == null || + !decorView.isAttachedToWindow || decorView.viewRootImpl == null) { // No need to synchronize if either the touch surface or dialog view is not attached // to a window. then() diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/DialogLaunchAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/DialogLaunchAnimatorTest.kt index b951345a145bf..61e78f5cb2fce 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/animation/DialogLaunchAnimatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/animation/DialogLaunchAnimatorTest.kt @@ -43,7 +43,7 @@ class DialogLaunchAnimatorTest : SysuiTestCase() { @Before fun setUp() { dialogLaunchAnimator = DialogLaunchAnimator( - dreamManager, launchAnimator, isForTesting = true) + dreamManager, launchAnimator, forceDisableSynchronization = true) } @After