- NAT-survival account settings (sipnat=outbound;natpinhole=yes) so INVITE
replies are not dropped (was going straight to voicemail).
- Native event_handler emits 'incoming call' (BEVENT_SIPSESS_CONN) carrying
the SIP msg pointer and 'call incoming' (BEVENT_CALL_INCOMING) carrying the
real struct call*; passes ua/call as separate jlong args (no lossy string
parse). uaEvent(String, Long, Long) signature updated.
- Answer flow: ua_accept on 'incoming call' (caller hears ringing) then
ua_answer deferred to the baresip main loop via a one-shot timer
(ua_answer_async) so the UI-thread Answer tap does not crash in sip_treplyf.
- FGS started from Application.onCreate (decoupled from Activity) holding
WifiLock + WakeLock so SIP survives screen-off / task removal.
- Ring: vibration + screen wake + high-priority full-screen-intent
notification; stopRinging() on established/closed + 30s watchdog so the
ring never loops forever on remote hang-up.
- Lock-screen presentation: manifest showWhenLocked/turnScreenOn +
USE_FULL_SCREEN_INTENT permission + InCallScreen launch. (Still unreliable
when fully asleep + backgrounded — tracked in README.)
- wear/README.md: project overview, how answering works, build/install,
known gaps, and roadmap (SIP MESSAGE, contacts, start-at-boot, UI).
Co-Authored-By: Claude <noreply@anthropic.com>