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

Commit 31da217d authored by Jordan Demeulenaere's avatar Jordan Demeulenaere
Browse files

Fix NPE in DialogLaunchAnimator

This CL fixes a NPE happening in DialogLaunchAnimator if it tried to
synchronize the 2 view roots at the start/end of the animation and that
the view that triggered the animation was detached from the hierarchy.
This regression was caused by the refactoring in http://ag/20139844.

Bug: 256194999
Test: Manual
Change-Id: Id264ddfa6365bfdc952d512c2c182b6cbf4906e4
parent 7ab95c84
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ constructor(
     */
    interface Controller {
        /** The [ViewRootImpl] of this controller. */
        val viewRoot: ViewRootImpl
        val viewRoot: ViewRootImpl?

        /**
         * The identity object of the source animated by this controller. This animator will ensure
@@ -807,15 +807,17 @@ private class AnimatedDialog(
     * inversely, removed from the overlay when the source is moved back to its original position).
     */
    private fun synchronizeNextDraw(then: () -> Unit) {
        if (forceDisableSynchronization) {
            // Don't synchronize when inside an automated test.
        val controllerRootView = controller.viewRoot?.view
        if (forceDisableSynchronization || controllerRootView == null) {
            // Don't synchronize when inside an automated test or if the controller root view is
            // detached.
            then()
            return
        }

        ViewRootSync.synchronizeNextDraw(controller.viewRoot.view, decorView, then)
        ViewRootSync.synchronizeNextDraw(controllerRootView, decorView, then)
        decorView.invalidate()
        controller.viewRoot.view.invalidate()
        controllerRootView.invalidate()
    }

    private fun findFirstViewGroupWithBackground(view: View): ViewGroup? {
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ internal constructor(
    private val source: View,
    override val cuj: DialogCuj?,
) : DialogLaunchAnimator.Controller {
    override val viewRoot: ViewRootImpl
    override val viewRoot: ViewRootImpl?
        get() = source.viewRootImpl

    override val sourceIdentity: Any = source
+1 −1
Original line number Diff line number Diff line
@@ -262,7 +262,7 @@ internal class ExpandableControllerImpl(

    private fun dialogController(cuj: DialogCuj?): DialogLaunchAnimator.Controller {
        return object : DialogLaunchAnimator.Controller {
            override val viewRoot: ViewRootImpl = composeViewRoot.viewRootImpl
            override val viewRoot: ViewRootImpl? = composeViewRoot.viewRootImpl
            override val sourceIdentity: Any = this@ExpandableControllerImpl
            override val cuj: DialogCuj? = cuj