Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Android: open leaves the real keyboard active when the test IME helper disappears while the daemon is alive

Open Beginner friendly
#3,407 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
74/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
android, typescript
Domain
mobile, testing

Research direction

Start by reading dist/src/ime-state.js, especially ensureHelperInstalled and its module-level cache; trace where open calls it and check the related tests. Reproduce by opening an Android app, uninstalling the test IME helper while the daemon stays alive, then opening again. Done when the missing helper is rechecked and reinstalled, or open warns or fails instead of reporting success with the real keyboard active.

Written by the indexing model from the issue text.

Description

Summary

On Android, the daemon remembers per device that the test IME helper (com.callstack.agentdevice.imehelper) is installed, and never re-checks it during its lifetime. If the helper disappears from the device while the daemon is still alive, the next open leaves the real keyboard active and reports success, with no warning.

Reproduction

agent-device 0.21.24, Android emulator API 32, single daemon started by the first command.

npx agent-device open com.android.settings --platform android
adb shell settings get secure default_input_method   # com.callstack.agentdevice.imehelper/.TestInputMethodService
npx agent-device close

adb uninstall com.callstack.agentdevice.imehelper    # Success

npx agent-device open com.android.settings --platform android   # "Opened: com.android.settings", rc 0
adb shell settings get secure default_input_method   # com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

With a field focused after the second open:

  • keyboard status: Keyboard visible: yes, Input method: com.google.android.inputmethod.latin
  • snapshot --json: keyboard.kind is visible

After daemon stop, the same open reinstalls the helper and selects it (TestInputMethodService, Keyboard visible: no, kind: absent).

Expected

open either reinstalls the helper when it is missing, or fails / warns that the test IME could not be selected.

Likely cause

dist/src/ime-state.js: ensureHelperInstalled is called with a module-level cache: new Set(). Once a device id is in the set, the installation is not checked again.

When it happens in practice

An AVD wiped (-wipe-data) or recreated under the same serial (emulator-5554), or the helper uninstalled, then reopened within the daemon's idle timeout (~5 min after the last close). A plain emulator restart with the helper still installed does not trigger it.

Dominant language
TypeScript
Stars
5k
Forks
334
Avg merge
11h 48m
Merged PRs (30d)
605

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from callstack/agent-device

All issues in callstack/agent-device

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.