En fin de compte, j'ai découvert qu'il existe plusieurs façons de remplacer l'IME par défaut dans AOSP.
Les approches que j'ai envisagées comprennent :
- Modifier le code source par défaut de LatinIME.
- Modifier le code source de InputMethodManagerService pour sélectionner l'IME personnalisé.
- Mettr à jour les propriétés de System.Secure de sorte que InputMethodManagerService sélectionne l'IME personnalisé.
- D'autres approches possibles dont je pourrais ne pas être au courant.
J'ai choisi de mettre à jour les propriétés de System.Secure au démarrage, en particulier enabled_input_methods et default_input_method. Cette méthode permet de définir l'IME personnalisé comme celui par défaut sans modifier le code principal de l'AOSP, ce qui facilite la maintenance.
Pour mettre en œuvre cela, j'ai utilisé la commande settings put secure dans le script init.rc du dispositif, qui exécute un script bash au démarrage pour exécuter les commandes de réglages nécessaires.
Voici à quoi ressemble le fichier 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
Le fichier init.rc est situé dans le dossier du dispositif spécifique pour lequel vous compilez.
Un exemple de fichier init.rc
pour dragonboard se trouve ici.
Ce script init.rc déclenche le script boot_start.sh au démarrage :
#!/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
Ces changements garantissent que les réglages sont initialisés afin qu'InputMethodManagerService les lise et sélectionne l'IME personnalisé au lieu de s'appuyer sur sa logique intégrée.
Si quelqu'un a de l'expérience avec d'autres méthodes ou des suggestions pour améliorer cette approche, j'aimerais entendre vos pensées !