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

Commit 217fd878 authored by Bryce Lee's avatar Bryce Lee
Browse files

Refer to outer components in TaskFragmentOrganizer via WeakReference.

TaskFragmentOrganizer is handed over a binder when registered. As a
result, any references to outer components should be done via a
WeakReference. This changelist makes these adjustments.

Test: manual. Monitored heap usage
Flag: EXEMPT bugfix
Fixes: 360088321
Change-Id: Ia920df9359105ad928c45cbdeaaa4edbe9af3b2e
parent 8ac907f2
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import com.android.systemui.util.concurrency.DelayableExecutor
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import java.lang.ref.WeakReference
import java.util.concurrent.Executor

typealias FragmentInfoCallback = (TaskFragmentInfo) -> Unit

@@ -68,14 +70,18 @@ constructor(
    }

    private val fragmentToken = Binder()
    private val organizer: TaskFragmentOrganizer =
        object : TaskFragmentOrganizer(executor) {

    class Organizer(val component: WeakReference<TaskFragmentComponent>, executor: Executor) :
        TaskFragmentOrganizer(executor) {
        override fun onTransactionReady(transaction: TaskFragmentTransaction) {
                    handleTransactionReady(transaction)
            component.get()?.handleTransactionReady(transaction)
        }
    }

    private val organizer: TaskFragmentOrganizer =
        Organizer(WeakReference(this), executor).apply {
            registerOrganizer(true /* isSystemOrganizer */)
        }
            .apply { registerOrganizer(true /* isSystemOrganizer */) }

    private fun handleTransactionReady(transaction: TaskFragmentTransaction) {
        val resultT = WindowContainerTransaction()