Summary
com.offlineinc.dumbtt9 (the bundled/rebranded TT9 keyboard) reverts to the stock feature-phone keyboard (com.iqqijni.dvt912key) on every reboot. This isn't just "not selected as default" — the package drops out of the enabled-IME list entirely (ime list -s no longer shows it after reboot), which is why the system falls back to another keyboard.
Root cause found
The launcher installs/enables/grants permissions to/sets-default com.offlineinc.dumbtt9 exactly once, gated by a permanent migration flag:
shared_prefs/voice_engine_setup.xml:
<boolean name="old_install_migrated_v1" value="true" />
Confirmed via the built APK (decompiled classes.dex from the installed v5.33.0-beta10): the relevant strings (ime set com.offlineinc.dumbtt9/..., ime enable com.offlineinc.dumbtt9/..., pm grant com.offlineinc.dumbtt9 android.permission.RECORD_AUDIO) are all present, run as part of this one-time setup.
Since the flag never resets, that setup step never runs again on subsequent boots. Meanwhile, something (still unclear exactly what — possibly related to how com.offlineinc.dumbtt9 is packaged/installed vs. a stock TT9 build, or a signing/verification quirk) causes Android to drop that specific package's IME-enabled registration on every boot.
Evidence it's package-specific, not a general OS reset
Sideloading the unmodified, stock TT9 (io.github.sspanak.tt9, from F-Droid) alongside com.offlineinc.dumbtt9 and enabling both: after a reboot, io.github.sspanak.tt9 stays enabled, while com.offlineinc.dumbtt9 drops out of the enabled list entirely. Same reboot, same device, different outcome — so this isn't Android broadly resetting IME state at boot, it's specific to this package.
Repro
- Fresh setup:
com.offlineinc.dumbtt9 gets installed/enabled/set as default (the one-time old_install_migrated_v1 migration).
- Reboot.
settings get secure default_input_method → reverted to com.iqqijni.dvt912key/.keyboard_service.view.HDKeyboardService.
ime list -s → com.offlineinc.dumbtt9 is no longer listed as enabled at all.
Suggested fix
Either:
- Find and fix whatever makes Android drop this specific package's IME-enabled registration at boot (worth checking how
com.offlineinc.dumbtt9 is installed/signed relative to the stock TT9 build, and whether its manifest/IME service declaration differs in a way that matters across a fresh process/boot), or
- At minimum, don't gate the enable+set-default step behind a permanent one-time flag — re-check/re-apply it on every boot (or at least verify current IME state matches expectation and re-apply if not), so it self-heals regardless of the underlying cause.
Workaround in use
A Magisk service.d boot script that waits for sys.boot_completed=1, then re-runs ime enable + settings put secure default_input_method for com.offlineinc.dumbtt9 on every boot. Confirmed this restores the keyboard correctly immediately when run manually; a full reboot test is in progress to confirm it also fires correctly as an actual boot script.
Summary
com.offlineinc.dumbtt9(the bundled/rebranded TT9 keyboard) reverts to the stock feature-phone keyboard (com.iqqijni.dvt912key) on every reboot. This isn't just "not selected as default" — the package drops out of the enabled-IME list entirely (ime list -sno longer shows it after reboot), which is why the system falls back to another keyboard.Root cause found
The launcher installs/enables/grants permissions to/sets-default
com.offlineinc.dumbtt9exactly once, gated by a permanent migration flag:Confirmed via the built APK (decompiled
classes.dexfrom the installedv5.33.0-beta10): the relevant strings (ime set com.offlineinc.dumbtt9/...,ime enable com.offlineinc.dumbtt9/...,pm grant com.offlineinc.dumbtt9 android.permission.RECORD_AUDIO) are all present, run as part of this one-time setup.Since the flag never resets, that setup step never runs again on subsequent boots. Meanwhile, something (still unclear exactly what — possibly related to how
com.offlineinc.dumbtt9is packaged/installed vs. a stock TT9 build, or a signing/verification quirk) causes Android to drop that specific package's IME-enabled registration on every boot.Evidence it's package-specific, not a general OS reset
Sideloading the unmodified, stock TT9 (
io.github.sspanak.tt9, from F-Droid) alongsidecom.offlineinc.dumbtt9and enabling both: after a reboot,io.github.sspanak.tt9stays enabled, whilecom.offlineinc.dumbtt9drops out of the enabled list entirely. Same reboot, same device, different outcome — so this isn't Android broadly resetting IME state at boot, it's specific to this package.Repro
com.offlineinc.dumbtt9gets installed/enabled/set as default (the one-timeold_install_migrated_v1migration).settings get secure default_input_method→ reverted tocom.iqqijni.dvt912key/.keyboard_service.view.HDKeyboardService.ime list -s→com.offlineinc.dumbtt9is no longer listed as enabled at all.Suggested fix
Either:
com.offlineinc.dumbtt9is installed/signed relative to the stock TT9 build, and whether its manifest/IME service declaration differs in a way that matters across a fresh process/boot), orWorkaround in use
A Magisk
service.dboot script that waits forsys.boot_completed=1, then re-runsime enable+settings put secure default_input_methodforcom.offlineinc.dumbtt9on every boot. Confirmed this restores the keyboard correctly immediately when run manually; a full reboot test is in progress to confirm it also fires correctly as an actual boot script.