Finalmente, descubrí que hay varias formas de reemplazar el IME predeterminado en AOSP.
Los enfoques que consideré incluyen:
- Cambiar el código fuente predeterminado de LatinIME.
- Modificar el código fuente de InputMethodManagerService para seleccionar el IME personalizado.
- Actualizar las propiedades de System.Secure para que InputMethodManagerService seleccione el IME personalizado.
- Otros enfoques posibles de los que puede que no esté al tanto.
Elegí actualizar las propiedades de System.Secure al inicio, específicamente enabled_input_methods y default_input_method. Este método permite que el IME personalizado se establezca como predeterminado sin alterar el código principal de AOSP, lo que facilita su mantenimiento.
Para implementar esto, utilicé el comando settings put secure dentro del script init.rc del dispositivo, que ejecuta un script bash al inicio para ejecutar los comandos de configuración necesarios.
Así es como se ve el init.rc:
on property:sys.boot_completed=1
...
start vendor.boot_start_sh
service vendor.boot_start_sh /vendor/bin/boot_start.sh
class main
user root
group root system
disabled
oneshot
El archivo init.rc se encuentra en la carpeta del dispositivo específico para el que estás creando.
Un ejemplo de init.rc
para dragonboard se encuentra aquí.
Este script init.rc activa un script boot_start.sh al completarse el inicio:
#!/system/bin/sh
settings put secure enabled_input_methods com.my_custom_ime.package/.CustomIMEService
settings put secure default_input_method com.my_custom_ime.package/.CustomIMEService
Estos cambios aseguran que las configuraciones se inicialicen para que InputMethodManagerService las lea y seleccione el IME personalizado en lugar de depender de su lógica integrada.
Si alguien tiene experiencia con otros métodos o sugerencias para mejorar este enfoque, ¡me encantaría escuchar sus opiniones!