572 Commits

Author SHA1 Message Date
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
callebtc
96340a35aa fix string 2026-07-28 00:57:30 +02:00
callebtc
57d11299da
Merge pull request #781 from permissionlesstech/codex/background-power-optimization
Centralize adaptive background power scheduling
2026-07-28 00:15:08 +02:00
callebtc
4658a3961f
Merge pull request #795 from permissionlesstech/fix/onboarding-skip-button-alignment
Fix onboarding skip-button jump between permission screens
2026-07-28 00:14:23 +02:00
callebtc
15a580aeef
Merge pull request #796 from permissionlesstech/codex/private-message-arrival-order
Fix private message ordering across clock skew
2026-07-27 23:50:05 +02:00
callebtc
c54fdcd9fb Merge remote-tracking branch 'origin/main' into codex/background-power-optimization
# Conflicts:
#	app/src/main/java/com/bitchat/android/mesh/MeshCore.kt
#	app/src/main/java/com/bitchat/android/ui/PrivateChatManager.kt
#	app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareMeshService.kt
2026-07-27 23:29:56 +02:00
callebtc
62926f88d5 fix: preserve arrival order across aliases 2026-07-27 23:29:01 +02:00
callebtc
80f774dd0b update 2026-07-27 23:20:57 +02:00
callebtc
79a44ba546 update 2026-07-27 23:20:32 +02:00
callebtc
5fd4067ba4 readme 2026-07-27 23:19:51 +02:00
callebtc
3484ff5ccf readme 2026-07-27 23:18:15 +02:00
callebtc
5b13598bd0
Merge pull request #794 from permissionlesstech/kimi/dm-outbox-retry-scheduler
Retry scheduler for queued DMs and Noise session re-establishment
2026-07-27 23:13:23 +02:00
callebtc
dfe4fba212 fix: preserve private message arrival order 2026-07-27 22:50:27 +02:00
callebtc
3c150d91e0 fix: unify outbox locking and tie retry scheduler to service lifecycle 2026-07-27 22:48:10 +02:00
callebtc
b79276f236 Tweak KDoc for onboarding footer alignment note.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 22:42:22 +02:00
callebtc
673f65d052 Fix onboarding skip-button jump between permission screens.
Align the background location footer with the battery optimization layout so primary, check-again, and skip stay at the same height when navigating between them.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 22:42:15 +02:00
callebtc
7f2e684572 feat: retry scheduler for queued private messages and session re-establishment 2026-07-27 22:33:28 +02:00
callebtc
d814ac7f80
Merge pull request #729 from permissionlesstech/codex/bound-compressed-payload-expansion
Bound pre-auth compressed payload expansion
2026-07-27 22:28:26 +02:00
callebtc
3f6ac31262
Merge pull request #793 from permissionlesstech/ui/theme-aware-peer-colors
ui: theme-aware muted peer colors
2026-07-27 22:26:48 +02:00
callebtc
ea1c64d2b3
Merge pull request #784 from permissionlesstech/codex/unread-dm-rows
Keep unread DM senders visible in the people sheet
2026-07-27 22:26:31 +02:00
callebtc
0721c39f89 Route oversize send failure to the active conversation
Addresses review feedback: the size-cap error was posted to the main
mesh timeline, so a user sending from a private chat or channel never
saw it. rejectIfOversized now posts to the private conversation
(addPrivateMessageNoUnread) or channel (addChannelMessage) the send
originated from, falling back to the main timeline for public sends.

Adds regression tests for both routings.
2026-07-27 22:24:02 +02:00
callebtc
d5cef681e4 Merge remote-tracking branch 'origin/main' into codex/unread-dm-rows
# Conflicts:
#	app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt
#	app/src/test/kotlin/com/bitchat/android/ui/PrivateChatManagerTest.kt
2026-07-27 22:16:13 +02:00
callebtc
773b21500f Merge remote-tracking branch 'origin/main' into codex/unread-dm-rows
# Conflicts:
#	app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt
#	app/src/test/kotlin/com/bitchat/android/ui/PrivateChatManagerTest.kt
2026-07-27 22:12:03 +02:00
callebtc
c3bc911bcd Finish rollout: user-visible size-cap failure, OOM-safe decode catch
- MediaSendingManager: surface a chat system message when a picked file
  exceeds the ~10 MiB send cap instead of silently dropping the send
  (voice/image/file paths), completing the 'user-visible failure'
  requirement of the rollout gate
- BinaryProtocol: catch Exception instead of Throwable in decodeCore so
  OutOfMemoryError is never swallowed and masked as a parse failure
- docs/file_transfer.md: mark the compressed-expansion rollout gate
  resolved; support for legacy >10 MiB compressed transfers is
  explicitly ended
2026-07-27 22:11:19 +02:00
callebtc
35a916a3a5
Merge pull request #789 from permissionlesstech/codex/fix-read-receipt-reliability
fix: make read receipts reliable
2026-07-27 22:11:04 +02:00
a1denvalu3
b251812b9e Align compressed payload send and receive bounds (#736)
* Align compressed payload send and receive bounds

* Preserve ambiguous raw deflate compatibility

* Pool decompression by memory budget
2026-07-27 22:10:27 +02:00
jack
e9bdf8aefc Bound pre-auth compressed payload expansion 2026-07-27 22:10:27 +02:00
callebtc
7dbd65b4d0 fix: honor receipt transport acceptance 2026-07-27 22:08:10 +02:00
callebtc
719b3d1895 ui: mute theme-aware peer colors for contrast
Extract PeerColorStyle so each palette owns saturation/value, keeping
hues stable while dark mode stays bright-but-muted and light mode avoids
neon labels. New themes only need to supply their own style.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 22:06:46 +02:00
callebtc
c39bb8124c
Merge pull request #792 from permissionlesstech/kimi/improve-noise-handshake-reliability
Improve Noise handshake reliability and offline session recovery
2026-07-27 22:00:56 +02:00
callebtc
83b2c51301 fix: keep contact nickname in private chat title when peer goes offline 2026-07-27 21:58:17 +02:00
callebtc
c76c233aae handshake robustness 2026-07-27 21:46:24 +02:00
callebtc
354f1c28cd
Merge pull request #790 from permissionlesstech/ui/people-sheet-favorited-star
ui: three-state favorite stars in people sheet
2026-07-27 21:26:59 +02:00
callebtc
10cc96d6e8
Merge pull request #791 from permissionlesstech/ui/enable-location-in-nearby
ui: move enable location services into nearby section
2026-07-27 21:26:46 +02:00
callebtc
7a26fccff7 ui: move enable location services into nearby section
Keep disable at the sheet footer so enabling is next to nearby channels while turning location off stays a secondary action.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 21:18:49 +02:00
callebtc
32d1916ec0 ui: show three-state favorite stars in people sheet
Mirror the private-chat header so peers who favorited us get an orange outline until we favorite back.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 21:11:37 +02:00
callebtc
290d72f2b6 fix: make read receipts reliable 2026-07-27 20:03:17 +02:00
callebtc
0f312a13f0
Merge pull request #788 from permissionlesstech/feat/favorited-star-wobble
ui: celebrate being favorited in private chats
2026-07-27 19:11:59 +02:00
callebtc
5fd686a00a ui: celebrate being favorited in private chats
- header star wobbles and its outline turns orange when the peer
  favorites you; it only fills once you favorite them back
- mirror the 'favorited you' system notice into the private
  conversation (mesh path), matching the main chat
- expose reactive peerFavoritedUs state driven by
  FavoritesPersistenceService; keep system notices silent
  (no unread badge, read receipt or push)
2026-07-27 19:11:37 +02:00
callebtc
90b00ac557
Merge pull request #787 from permissionlesstech/fix/noise-after-Prs
Restore robust Noise handshakes and mesh DMs
2026-07-27 18:49:54 +02:00
callebtc
62dd3ca90e fix: complete direct-link routing rollback 2026-07-27 18:47:17 +02:00
callebtc
f3c4571cc0
Merge pull request #786 from permissionlesstech/ui/noise-open-lock-transition
ui: open lock until Noise session is established
2026-07-27 18:46:15 +02:00
callebtc
58c56a8082 ui: open lock until Noise session is established
Show ic_spec_lock_open while idle or handshaking, then Crossfade to the
closed lock on success or failure — timed with the existing tint wash so
the shackle settling reads as one smooth transition.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 18:45:29 +02:00
callebtc
6dff0844bb revert noise 2026-07-27 18:44:49 +02:00