gioser

sergio/humanoid

HTML 38Markdown 1TOML 10 Sutichaykuna

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 · ruwaq sergio · (4 killa ñawpaq) · tayta 8ab12b680 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

1 qillqakuna · +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)