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

Commit d4a5a208 authored by Robert Snoeberger's avatar Robert Snoeberger
Browse files

Remove OnPreDrawListener when detached from window

Fixes: 169066295
Test: manual - Perform repro steps in bug and verify that number of view
objects isn't increasing in dumpsys meminfo

Change-Id: I94dc98a542239bc2255e416fc085d755c8e1d6a9
parent 993254c8
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ class TransitionLayout @JvmOverloads constructor(
    private var measureAsConstraint: Boolean = false
    private var currentState: TransitionViewState = TransitionViewState()
    private var updateScheduled = false
    private var isPreDrawApplicatorRegistered = false

    private var desiredMeasureWidth = 0
    private var desiredMeasureHeight = 0
@@ -74,6 +75,7 @@ class TransitionLayout @JvmOverloads constructor(
        override fun onPreDraw(): Boolean {
            updateScheduled = false
            viewTreeObserver.removeOnPreDrawListener(this)
            isPreDrawApplicatorRegistered = false
            applyCurrentState()
            return true
        }
@@ -94,6 +96,14 @@ class TransitionLayout @JvmOverloads constructor(
        }
    }

    override fun onDetachedFromWindow() {
        super.onDetachedFromWindow()
        if (isPreDrawApplicatorRegistered) {
            viewTreeObserver.removeOnPreDrawListener(preDrawApplicator)
            isPreDrawApplicatorRegistered = false
        }
    }

    /**
     * Apply the current state to the view and its widgets
     */
@@ -158,7 +168,10 @@ class TransitionLayout @JvmOverloads constructor(
    private fun applyCurrentStateOnPredraw() {
        if (!updateScheduled) {
            updateScheduled = true
            if (!isPreDrawApplicatorRegistered) {
                viewTreeObserver.addOnPreDrawListener(preDrawApplicator)
                isPreDrawApplicatorRegistered = true
            }
        }
    }