aa3d11471fdc0f330e4422aae9e4c75d2bb07c99
Extends the existing tabs demo shell (I2/E5's Gradle project, JNI registration) with a second, mutually-exclusive AndroidAppState rather than building a third shell -- it already has the working IrisView/MainActivity Java and the register_view_class wiring, and the only thing a transcript screen needs on top is a different Client type (the same axis tabs_ui::build vs. transcript_ui::build already varies along on winit). `--no-default-features --features transcript-screen` builds transcript_client::TranscriptClient instead of the plain tabs Client: fetches the sandbox's session list, opens the first one, and follows it live, reusing desktop-app's app.rs shape (fold_event/group_tool_runs/ fold_page/raw_seq, a generation counter) almost verbatim. The one real difference is the redraw path -- android-view has no winit::EventLoopProxy, so Tasks gained redraw_handle() (iris/src/task.rs) to let a caller request a frame after each TaskCtx::update from inside a still-running task, not just once when the whole future completes. Deliberate simplification, not a template: there is no session list or enrollment UI here. build.rs bakes the sandbox's host/port/token plus the pinned CA in at build time from AI_APP_TRANSCRIPT_HOST/_PORT/_TOKEN and AI_APP_CA, the same trust-boundary reasoning as the Compose app's GeneratePinnedCert Gradle task, extended to also bake the enrollment since building a real one (Keystore-sealed storage, a QR/link scanner) is E3's scope, not this box's. Recorded in RUST.md's I5 box. tabs-ui and the transcript-screen deps are now both optional, gated by mutually exclusive tabs-screen (default) / transcript-screen features -- building one screen with the other's default deps still active tripped Cargo's unused_dependencies lint. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Languages
Rust
53%
Kotlin
44.4%
Shell
2.6%