615 Commits

Author SHA1 Message Date
callebtc
b8d606d3b4 Polish persistent private conversations 2026-07-29 13:46:21 +02:00
callebtc
bf87a80617 Honor private message admission during panic 2026-07-29 11:00:24 +02:00
callebtc
c8153c0d18 Keep Wear shared state compatible 2026-07-29 03:57:28 +02:00
callebtc
e4f0713121 Merge remote-tracking branch 'origin/main' into codex/persistent-conversations 2026-07-29 03:53:34 +02:00
callebtc
c5ff1ca59a Complete persistent conversation lifecycle 2026-07-29 03:53:29 +02:00
callebtc
d3f01f27c6 persistent 2026-07-29 03:41:24 +02:00
callebtc
7fad2f2202 persist 2026-07-29 03:41:16 +02:00
callebtc
3b53b9bdcc
Merge pull request #805 from permissionlesstech/wear-os-1
Wear OS app: standalone bitchat client for Pixel Watch
2026-07-29 03:02:46 +02:00
callebtc
e4ad09830b wear: address PR review - (1) DM send no longer echoes 'Sent' pre-handshake: session-gated echo stays 'Sending' and retries for 15s after initiating Noise handshake; (2) minSdk 33 (Wear OS 4): API 30 lacks the S+ Bluetooth permissions and would require location for scan, which the app refuses; (3) recreate BluetoothConnectionManager when !isReusable() so stop->start cycles don't leave a zombie mesh 2026-07-29 02:54:11 +02:00
callebtc
120cc8e901 docs: wear screenshots for PR - onboarding, chat, people, voice notes, recording overlay 2026-07-29 02:39:29 +02:00
callebtc
9998e7ae3f wear: fluid magnetic slide-to-cancel - cancel button leans toward the approaching finger and blushes green-to-red continuously with proximity (finger-driven), soft springy scale bloom on activation; rotation wobble removed 2026-07-29 02:28:07 +02:00
callebtc
18831c20fa wear: slide-to-cancel voice recording - global finger tracking while recording, mic button morphs into red cancel target on approach (tick haptic in/out, double-click reject on cancel), release anywhere sends; PTT release no longer owned by the small mic button; haptics: knock on record start/incoming message, click on stop/send, tick on text send 2026-07-29 02:22:40 +02:00
callebtc
2e3f7bf827 voice improvments 2026-07-29 02:12:55 +02:00
callebtc
b3b478be10 wear: copy polish - compact notification-permission and nickname-edit descriptions, sentence-case labels across all screens (buttons, placeholders, empty states, prompts) 2026-07-29 02:07:08 +02:00
callebtc
c1e6204686 wear: rename from People screen - 'you' row first opens nickname editor; nickname field auto-focuses with cursor at end, IME Done only closes keyboard for review, confirm button is the single commit path, trim while typing 2026-07-29 02:04:09 +02:00
callebtc
86a04bc8a2 wear: chat header fits round screen with unread (title yields to people+mail icons with counts, whole header taps to People); People screen: capitalized title, Noise lock icon instead of 'noise ✓' text, RSSI removed, unread senders float to top with mail icon + count 2026-07-29 01:43:04 +02:00
callebtc
28261af55c wear: add DM notifications and refresh launcher assets 2026-07-29 01:23:17 +02:00
callebtc
2e8f6ffc35 wear: shrink header to dense form on scroll-up instead of hiding it - overlay-only size animation, list geometry untouched 2026-07-29 01:08:11 +02:00
callebtc
92f60bd02f wear: simplify chat scrolling to the classic messenger pattern - constant list padding with header/action bar as floating overlays driven by one scroll-direction state; removes the animated bottom clearance and in-layout header resizing that shifted content mid-gesture 2026-07-29 01:04:44 +02:00
callebtc
f5915c4c31
Merge pull request #804 from permissionlesstech/codex/fix-private-media-contact-routing
Fix private media sending from contact conversations
2026-07-29 00:54:47 +02:00
callebtc
80342a74e8 wear: fix dock/undock flapping when scrolling up from bottom - undocking collapsed the 48dp bottom clearance which clamped scroll back to the end and re-docked in a loop; buttons now toggle on a fast 12dp overlay-only channel while the geometry-changing docked state requires 60dp of upward scroll (> 48dp padding delta) 2026-07-29 00:52:07 +02:00
callebtc
c7720d3847 Fix private media routing for contact conversations 2026-07-29 00:43:39 +02:00
callebtc
8f4c937e92 wear: fix action bar disappearing at bottom - replace fragile distance-to-last-item geometry (dead-zoned by expanded padding, skewed by edge-scaling) with scroll-intent logic: canScrollForward=false always docks + shows buttons, any downward scroll reveals them, upward scroll hides 2026-07-29 00:32:45 +02:00
callebtc
c06fa67ccc wear: fix header size flip-flopping - drive header from the debounced dockedAtNewest state instead of raw per-frame layout geometry; header is full-size at the newest, compacts when browsing history 2026-07-28 22:24:35 +02:00
callebtc
156a5f3218 wear: perf - debug-signed R8 release build for on-device testing, Gson keep rules, cache time formatter, memoize file chip stat 2026-07-28 22:16:32 +02:00
callebtc
fb93d2d85f wear: TransformingLazyColumn chat lists - native center-scaling/rotary/scrollbar, exact scroll-to-end autoscroll, Arrangement.Bottom anchoring, consolidated ChatScaffold 2026-07-28 22:06:51 +02:00
callebtc
d4aa9b1644 wear: fix padding oscillation with hysteresis (expand <40, collapse >120) - padding delta can no longer retrigger itself 2026-07-28 21:40:51 +02:00
callebtc
f64338a3b8 wear: dynamic bottom padding - last message clears floating buttons at newest, text flows behind them when scrolled up 2026-07-28 21:38:15 +02:00
callebtc
5e937fa816 wear: action buttons float over chat text instead of reserving space; empty-state lifted clear of buttons 2026-07-28 21:34:14 +02:00
callebtc
5797ee18c0 wear: fix inverted scroll direction and restore scrollbar - normal top-down scrollable bottom-anchored via Box alignment, ScreenScaffold scroll indicator, standard rotaryScrollable defaults 2026-07-28 21:30:08 +02:00
callebtc
e03e373caa plan 2026-07-28 20:58:17 +02:00
callebtc
71c257669a watch works 2026-07-28 20:55:15 +02:00
callebtc
32a04b69b0
Merge pull request #801 from permissionlesstech/codex/share-local-arm64-apk
Support sharing the installed ARM64 APK
2026-07-28 19:46:33 +02:00
callebtc
57b002917f Check updates for cached universal APK 2026-07-28 18:50:15 +02:00
callebtc
9800927b59 Support sharing installed ARM64 APK 2026-07-28 18:42:01 +02:00
callebtc
bd3bb8c774 wear: M7 - black splash theme, final design review, build/run/test docs; all milestones except deferred M5 done 2026-07-28 18:41:22 +02:00
callebtc
6340976e1c wear: M2/M3/M4/M6 verified on hardware - mesh discovery, chat, Noise DMs, ambient survival, full mesh_lab suite green; composer UX fixes 2026-07-28 18:31:45 +02:00
callebtc
bd29257b73
Merge pull request #799 from permissionlesstech/codex/fix-hotspot-local-network-permission
Fix Android 17 local network permission for hotspot sharing
2026-07-28 17:32:46 +02:00
callebtc
4640d8479c docs: M7 status in wear plan 2026-07-28 16:52:36 +02:00
callebtc
ecad00c854 wear: M7 code - message appear animations, screen transitions, auto-scroll, unread DM badge 2026-07-28 16:52:14 +02:00
callebtc
43a88808a5 wear: M2/M3/M4/M6 code - BLE mesh service, chat/DM/people UI, test hook, mesh_lab watch support (hardware verification pending) 2026-07-28 16:43:49 +02:00
callebtc
711c73bbe7 wear: M1 - compile shared bitchat stack (protocol/noise/mesh) into :wear via synced sourcesets, 172 shared tests green 2026-07-28 16:19:56 +02:00
callebtc
42a8edf8ed fix: request local network access for hotspot sharing 2026-07-28 16:06:12 +02:00
callebtc
a355ed79d0 wear: M0 - scaffold :wear module with bitchat theme, verified on Pixel Watch 3 2026-07-28 15:54:41 +02:00
callebtc
11d0bd794e
Merge pull request #797 from permissionlesstech/feature/mesh-test-hooks
ADB-driven mesh test hooks + two-device lab; fix undeliverable oversized broadcast files
2026-07-28 15:27:24 +02:00
callebtc
11f39c27f4 docs: complete mesh lab guide (prereqs, device prep, scenarios, troubleshooting)
Expands the release-gate runbook appendix into a fresh-clone walkthrough
and points AGENTS.md at the ADB device mesh tests, noting they are
deliberately separate from Gradle/CI.
2026-07-28 15:24:03 +02:00
callebtc
8827a07b11 mesh_lab: add session_recovery and identity_reset churn scenarios
- session_recovery: force-stop B mid-session; assert identity persists,
  mesh rejoins, re-handshake completes, DMs flow again
- identity_reset: pm clear B mid-session; assert new identity,
  rediscovery, handshake and DM round trip
- Helpers: wake() (foreground the app so BLE leaves POWER_SAVER),
  reset_bluetooth() (clear zombie GATT links), ensure_direct_link()
  (explicit GATT connect instead of waiting out duty cycles),
  force_handshake() with retries
2026-07-28 15:18:31 +02:00
callebtc
3eb9ac20b0 mesh_lab: clear receiver incoming dirs before file scenarios
Incoming files are name-uniquified on receipt (e.g. 'small_1k (1).bin'),
so repeated runs broke the name-based file_recv matcher.
2026-07-28 14:01:21 +02:00
callebtc
fbb13a33d5 Reject broadcast sends exceeding the receiver fragment cap
Receivers hard-cap reassembly at MAX_FRAGMENTS_PER_ID (256), but the
generic send path fragmented packets with no caller cap (0xFFFF), so
broadcast file transfers above ~120 KB were fully transmitted yet
undeliverable. FragmentingPacketSender now caps fragmentation at
MAX_FRAGMENTS_PER_ID and reports failure via a new
TransferProgressEvent.failed flag, which surfaces as
DeliveryStatus.Failed in the UI and as a file_send error in the debug
test hook instead of an indefinite wait.

Adds FragmentingPacketSenderTest and a file_oversize mesh-lab scenario
asserting sender-side rejection.
2026-07-28 13:17:35 +02:00
callebtc
41494d7c16 Add ADB-driven mesh test-hook framework and two-device mesh lab
Debug-only broadcast receiver (app/src/debug) exposes mesh operations over
ADB: scan, connect, Noise handshake, DMs, broadcast, announce, file
send/receive with SHA-256 verification, BLE toggle, state dumps, and raw
packet injection. tools/release_gate/mesh_lab.py orchestrates scenarios
(dm, broadcast, file, file_private, raw) on two live devices and emits
evidence JSON.
2026-07-28 13:05:49 +02:00