feat(android): simulate an incoming call or SMS on an emulator

Merged
MI
6h ago
+1343-32

Summary

Adds a telephony command that simulates an incoming call or SMS on an Android emulator. For example, to check that video playback pauses when a call comes in.

agent-device telephony call 5551234
agent-device telephony cancel 5551234
agent-device telephony sms 5551234 "Your code is 1234"

Node: client.command.telephony({ action, number, text }).

Android sends each event through the emulator console (adb emu gsm …, adb emu sms send …). adb exits 0 even when the console answers KO, so a refusal fails with COMMAND_FAILED and reason: telephony-console-refused. Physical Android devices refuse with unsupported-device-kind. Every other platform and provider, Appium and Limrun included, refuses. Fold now shares the same runEmulatorConsole call, so its console calls get the same 10 s timeout.

63 files, +1342/-32. Over the 1,000-line budget; most of it is tests and per-platform refusals.

Validation

  • pnpm check:affected --run passes on ec046fd9e with a local, unpushed fix for main's broken typecheck (declarations.ts:558).
  • Live run on a Pixel 9 Pro XL AVD (Android 17), local adb executor only: call shows the incoming-call UI, cancel ends it, accept with no call is refused, and a two-line SMS with backslashes arrives verbatim. Output is in this comment.

Open risks:

  • Not run on a remote or provider ADB executor, or on a physical device.
  • The emulator drops emoji and other non-BMP SMS characters. This is documented, not refused.
  • iOS Smoke Tests failed on 6f1807b13 with the same APP_NOT_RUNNING as t3/limrun-ios-alert-actions.