diff options
| author | 2024-08-26 03:14:50 +0000 | |
|---|---|---|
| committer | 2024-08-27 00:04:36 +0000 | |
| commit | 217fd878f458a6322bfa62014a1cc8fcee8f79f6 (patch) | |
| tree | 4c715dcde109e7745afdcdabb9120a4bf2c9af56 | |
| parent | 8ac907f2a219f06d34aebe2bc2dbba9f8e98b560 (diff) | |
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
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/dreams/homecontrols/TaskFragmentComponent.kt | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/TaskFragmentComponent.kt b/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/TaskFragmentComponent.kt index befd822e14cd..d547de24beb5 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/TaskFragmentComponent.kt +++ b/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/TaskFragmentComponent.kt @@ -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) { - override fun onTransactionReady(transaction: TaskFragmentTransaction) { - handleTransactionReady(transaction) - } - } - .apply { registerOrganizer(true /* isSystemOrganizer */) } + class Organizer(val component: WeakReference<TaskFragmentComponent>, executor: Executor) : + TaskFragmentOrganizer(executor) { + override fun onTransactionReady(transaction: TaskFragmentTransaction) { + component.get()?.handleTransactionReady(transaction) + } + } + + private val organizer: TaskFragmentOrganizer = + Organizer(WeakReference(this), executor).apply { + registerOrganizer(true /* isSystemOrganizer */) + } private fun handleTransactionReady(transaction: TaskFragmentTransaction) { val resultT = WindowContainerTransaction() |