From 52d705a8c4d81046d85e7dfb95bb1b2597ff8b0f Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Wed, 10 May 2023 14:49:11 +0200 Subject: [PATCH 1/2] Fix ComposeInitializerImpl to work with new lifecycle libraries Change-Id: Ie142cac242f2aca3793ed3b522919c79b4025c18 Merged-In: Ie142cac242f2aca3793ed3b522919c79b4025c18 Bug: 274722427 Test: SYSTEMUI_USE_COMPOSE=true m SystemUICompose --- .../systemui/compose/ComposeInitializerImpl.kt | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeInitializerImpl.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeInitializerImpl.kt index fbd7f83ad350d..b84f71a0e68c5 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeInitializerImpl.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeInitializerImpl.kt @@ -17,9 +17,8 @@ package com.android.systemui.compose import android.view.View -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.ViewTreeLifecycleOwner -import androidx.savedstate.SavedStateRegistry +import androidx.lifecycle.findViewTreeLifecycleOwner +import androidx.lifecycle.setViewTreeLifecycleOwner import androidx.savedstate.SavedStateRegistryController import androidx.savedstate.SavedStateRegistryOwner import com.android.compose.animation.ViewTreeSavedStateRegistryOwner @@ -27,7 +26,7 @@ import com.android.systemui.lifecycle.ViewLifecycleOwner internal object ComposeInitializerImpl : ComposeInitializer { override fun onAttachedToWindow(root: View) { - if (ViewTreeLifecycleOwner.get(root) != null) { + if (root.findViewTreeLifecycleOwner() != null) { error("root $root already has a LifecycleOwner") } @@ -54,7 +53,7 @@ internal object ComposeInitializerImpl : ComposeInitializer { override val savedStateRegistry = savedStateRegistryController.savedStateRegistry - override fun getLifecycle(): Lifecycle = lifecycleOwner.lifecycle + override val lifecycle = lifecycleOwner.lifecycle } // We must call [ViewLifecycleOwner.onCreate] after creating the [SavedStateRegistryOwner] @@ -64,13 +63,13 @@ internal object ComposeInitializerImpl : ComposeInitializer { // Set the owners on the root. They will be reused by any ComposeView inside the root // hierarchy. - ViewTreeLifecycleOwner.set(root, lifecycleOwner) + root.setViewTreeLifecycleOwner(lifecycleOwner) ViewTreeSavedStateRegistryOwner.set(root, savedStateRegistryOwner) } override fun onDetachedFromWindow(root: View) { - (ViewTreeLifecycleOwner.get(root) as ViewLifecycleOwner).onDestroy() - ViewTreeLifecycleOwner.set(root, null) + (root.findViewTreeLifecycleOwner() as ViewLifecycleOwner).onDestroy() + root.setViewTreeLifecycleOwner(null) ViewTreeSavedStateRegistryOwner.set(root, null) } } From 4b87b5784e1a1634cda0eec95a799afc2bc5eb4b Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Wed, 10 May 2023 21:40:40 +0000 Subject: [PATCH 2/2] Fix ComposeInitializerImpl Bug: 274722427 Change-Id: I7ae7dac97b0a148264075a942c77995a5a097d61 Merged-In: I7ae7dac97b0a148264075a942c77995a5a097d61 Test: SYSTEMUI_USE_COMPOSE=true m SystemUICompose and start SystemUI --- .../com/android/systemui/compose/ComposeInitializerImpl.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeInitializerImpl.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeInitializerImpl.kt index b84f71a0e68c5..1674591c30b56 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeInitializerImpl.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeInitializerImpl.kt @@ -19,6 +19,7 @@ package com.android.systemui.compose import android.view.View import androidx.lifecycle.findViewTreeLifecycleOwner import androidx.lifecycle.setViewTreeLifecycleOwner +import androidx.lifecycle.Lifecycle import androidx.savedstate.SavedStateRegistryController import androidx.savedstate.SavedStateRegistryOwner import com.android.compose.animation.ViewTreeSavedStateRegistryOwner @@ -53,7 +54,8 @@ internal object ComposeInitializerImpl : ComposeInitializer { override val savedStateRegistry = savedStateRegistryController.savedStateRegistry - override val lifecycle = lifecycleOwner.lifecycle + override val lifecycle: Lifecycle + get() = lifecycleOwner.lifecycle } // We must call [ViewLifecycleOwner.onCreate] after creating the [SavedStateRegistryOwner]