summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Bryce Lee <brycelee@google.com> 2024-08-26 03:14:50 +0000
committer Bryce Lee <brycelee@google.com> 2024-08-27 00:04:36 +0000
commit217fd878f458a6322bfa62014a1cc8fcee8f79f6 (patch)
tree4c715dcde109e7745afdcdabb9120a4bf2c9af56
parent8ac907f2a219f06d34aebe2bc2dbba9f8e98b560 (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.kt20
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()