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

Commit 6b34e2b0 authored by Joshua Tsuji's avatar Joshua Tsuji
Browse files

Adds currentlyResolvingConflicts to the coordinator.

This allows users to call onContentMoved with impunity, simplifying code.

Test: atest SystemUITests
Change-Id: Ica8f9ecc79c1a452cbcb004a1089538b23eb0603
parent dc68d926
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -97,6 +97,14 @@ class FloatingContentCoordinator @Inject constructor() {
    /** The bounds of all pieces of floating content added to the coordinator. */
    private val allContentBounds: MutableMap<FloatingContent, Rect> = HashMap()

    /**
     * Whether we are currently resolving conflicts by asking content to move. If we are, we'll
     * temporarily ignore calls to [onContentMoved] - those calls are from the content that is
     * moving to new, conflict-free bounds, so we don't need to perform conflict detection
     * calculations in response.
     */
    private var currentlyResolvingConflicts = false

    /**
     * Makes the coordinator aware of a new piece of floating content, and moves any existing
     * content out of the way, if necessary.
@@ -126,6 +134,13 @@ class FloatingContentCoordinator @Inject constructor() {
     */
    @JvmOverloads
    fun onContentMoved(content: FloatingContent) {

        // Ignore calls when we are currently resolving conflicts, since those calls are from
        // content that is moving to new, conflict-free bounds.
        if (currentlyResolvingConflicts) {
            return
        }

        if (!allContentBounds.containsKey(content)) {
            Log.wtf(TAG, "Received onContentMoved call before onContentAdded! " +
                    "This should never happen.")
@@ -162,6 +177,8 @@ class FloatingContentCoordinator @Inject constructor() {
     * them to move out of the way.
     */
    private fun maybeMoveConflictingContent(fromContent: FloatingContent) {
        currentlyResolvingConflicts = true

        val conflictingNewBounds = allContentBounds[fromContent]!!
        allContentBounds
                // Filter to content that intersects with the new bounds. That's content that needs
@@ -182,6 +199,8 @@ class FloatingContentCoordinator @Inject constructor() {
                                            .minus(conflictingNewBounds)))
                    allContentBounds[content] = content.getFloatingBoundsOnScreen()
                }

        currentlyResolvingConflicts = false
    }

    /**