fix(android): device-feedback round 1

- decode fs.stat-derived epoch fields leniently (fractional mtimeMs from
  real hubs broke machines/files decode and pinned the offline banner)
- offline banner: only a failed sessions fetch counts; machines/baseline
  failures are advisory; live SSE emission clears it and seeds the unread
  baseline (all-rows-unread gray dot cascade)
- session row: single weighted title (short names no longer truncated at
  half width), unread dot moved beside the timestamp
- composer restyle: borderless input pill with inline mic, hand-drawn
  vector glyphs replacing emoji icons, 42dp round actions, park-draft
  relocated to the session overflow menu
This commit is contained in:
weishu
2026-08-18 16:27:32 +08:00
parent c4832f37e0
commit b9d5f803b2
12 changed files with 330 additions and 103 deletions
@@ -214,6 +214,7 @@
<string name="sessions_error_rename">Rename failed</string>
<string name="sessions_error_delete">Delete failed</string>
<string name="sessions_error_reopen">Reopen failed</string>
<string name="sessions_error_machines">Could not load machines</string>
<string name="sessions_error_delete_active">Session is still active — archive it first</string>
<string name="sessions_reopen_failed_fallback">Failed to reopen session</string>
<string name="sessions_rename_title">Rename session</string>
@@ -270,6 +271,11 @@
<string name="chat_recording">● Recording… %1$s</string>
<string name="chat_cancel">Cancel</string>
<string name="chat_park_draft">Park draft to scratchlist</string>
<string name="chat_composer_add_attachment">Add attachment</string>
<string name="chat_composer_mic">Start dictation</string>
<string name="chat_composer_stop_recording">Stop recording</string>
<string name="chat_composer_send">Send</string>
<string name="chat_composer_abort">Stop the current turn</string>
<string name="chat_send_steer">Send &amp; steer into current turn</string>
<string name="chat_queued_one">1 queued message</string>
<string name="chat_queued_many">%1$d queued messages</string>