Commit Graph
6 Commits
Author SHA1 Message Date
pj 123cbf06e7 fix(sdk-android): post frame callbacks via main looper
Choreographer.getInstance() is per-thread and throws on threads
without a Looper. The previous impl called it from the SocketClient
reader thread, which surfaced as snapshot failures with empty
state during the sample-app round trip. Now the reader thread
posts a Runnable to the main Handler that, on the main thread,
gets the Choreographer and posts the frame callback.
2026-04-17 23:39:11 +07:00
pj 1700160077 feat(sdk-android): Uatu public API over SocketClient + Pauser
Uatu singleton owns an internal UatuRuntime that wires the socket
client, pauser, and extractor registry. start() sends HELLO on
connect, responds to PAUSE by running extractors inside the pause
window and replying with STATE, and releases the gate on RESUME.

LinkedHashMap preserves extractor registration order so trace
output is deterministic. Failed extractors log a warning and
record null rather than aborting the whole snapshot.
2026-04-17 22:57:12 +07:00
pj 52944b1aa6 feat(sdk-android): Pauser with frame-callback-gated extractors
Worker thread calls pauseAndSnapshot with an extractor closure;
the Pauser posts a frame callback that runs extractors on the
main thread and then blocks that thread on a semaphore until
release() fires. FrameCallbackPoster abstracts Choreographer so
JVM unit tests drive it with a single-thread executor, while the
Android runtime uses ChoreographerPoster.
2026-04-17 22:55:06 +07:00
pj ac49818283 feat(sdk-android): SocketClient with reconnect + LocalSocket transport
SocketClient owns a background reader thread, dispatches incoming
messages to a handler, and auto-reconnects with exponential backoff
when the transport drops. AgentTransport abstracts the socket so
JVM unit tests drive the client through piped streams while the
Android runtime uses LocalSocket over the abstract namespace.

Send is exposed to consumers via a MessageSender passed to
onConnected. Writes are serialized under the output stream lock.
2026-04-17 22:53:13 +07:00
pj 2cc7617590 feat(sdk-android): Kotlin wire protocol matching the Go encoder
Uses org.json (already on Android; org.json:json test dep for JVM
unit tests). Field names and framing mirror internal/agent/protocol.go
so Go-encoded frames decode on the SDK without a shared schema file.
2026-04-17 22:48:10 +07:00
pj 9cea3b66f0 feat(sdk-android): scaffold Android library module
AGP 8.11.0, Kotlin 2.1.21, minSdk 24, compileSdk 35, JDK 17
bytecode, no Compose dep. Uatu object exposes start/extract as
stubs; real implementation in tasks #6–8.
2026-04-17 22:38:04 +07:00