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>
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)