tawasuyu

sergio/humanoid

HTML 13TOML 10 Definiciones

Trazo: fix crash "ViewTreeLifecycleOwner not found" al abrir el teclado

La ventana del InputMethodService es internamente un Dialog; Compose resuelve el
ViewTreeLifecycleOwner desde el hijo de android.R.id.content (el parentPanel del
decor) hacia arriba, nunca a través del ComposeView. Se fijan los owners
(Lifecycle/ViewModelStore/SavedState) en el decorView de la ventana.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

efc233ed86b31f83fb34050dd8d13e82c2d64cd3 · por sergio · (hace 4 meses) · padre 8ab12b680 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +8 −0

diff --git a/keyboard/src/main/java/com/rizoma/trazo/TrazoImeService.kt b/keyboard/src/main/java/com/rizoma/trazo/TrazoImeService.kt
index 07ef2c7..3d2c656 100644
--- a/keyboard/src/main/java/com/rizoma/trazo/TrazoImeService.kt
+++ b/keyboard/src/main/java/com/rizoma/trazo/TrazoImeService.kt
@@ -106,6 +106,14 @@ class TrazoImeService : InputMethodService(), LifecycleOwner, ViewModelStoreOwne
     }
 
     override fun onCreateInputView(): View {
+        // La ventana del IME es internamente un Dialog. Compose resuelve el
+        // ViewTreeLifecycleOwner desde el hijo de android.R.id.content y hacia arriba,
+        // así que los owners DEBEN estar en el decorView de la ventana (no basta el ComposeView).
+        window.window?.decorView?.let { decor ->
+            decor.setViewTreeLifecycleOwner(this)
+            decor.setViewTreeViewModelStoreOwner(this)
+            decor.setViewTreeSavedStateRegistryOwner(this)
+        }
         return ComposeView(this).apply {
             setViewTreeLifecycleOwner(this@TrazoImeService)
             setViewTreeViewModelStoreOwner(this@TrazoImeService)