677 Commits

Author SHA1 Message Date
callebtc
a5dfe9fe42 Polish network conversation rows 2026-07-29 21:56:12 +02:00
callebtc
2176160ac0
Merge pull request #823 from permissionlesstech/ui/geohash-globe-picker
feat: animated 3D globe geohash picker with borders and cities
2026-07-29 21:55:07 +02:00
callebtc
44f62a3c14
Merge pull request #776 from a1denvalu3/feat/cashu-chips-android
feat: add Cashu ecash chips and /pay command
2026-07-29 20:21:12 +02:00
callebtc
03de6f3519 fix: allow targeting polar geohashes
Relaxes the view-center clamp from ±80° to ±89°. Previously opening or
tapping a geohash above 80°N/S clamped the fly-in and syncSelection()
encoded the clamped center, silently returning a different cell than
the user picked. Verified with p2 (87°N) and p6 (85°S) cells: the view
now centers on the requested cell and selects it correctly.
2026-07-29 20:21:12 +02:00
callebtc
b073dc2160
Merge pull request #824 from permissionlesstech/codex/fix-peer-verification-status-badge
Fix peer verification status and private chat badge
2026-07-29 20:18:34 +02:00
callebtc
70185ae86f Refine private chat header actions 2026-07-29 19:40:21 +02:00
callebtc
79bf154ce3 feat: overlay country borders and cities on the globe picker
Adds public-domain Natural Earth vector overlays in the established
terminal style, bundled as compact assets (works fully off-grid):
- world_borders.geojson (56KB): admin-0 boundary lines, stroked as
  front-facing horizon-clipped runs in a muted theme color
- world_cities.geojson (99KB, 1251 populated places): zoom-tiered by
  scale rank - capitals as accent dots, other cities as muted dots;
  name labels in Geist Mono fade in from regional zoom levels to keep
  the whole-globe view uncluttered
2026-07-29 19:39:51 +02:00
callebtc
29f9eb0cbc
Merge pull request #821 from permissionlesstech/codex/fix-android-studio-strict-build
fix: restore Android Studio sync with strict Gradle security
2026-07-29 19:39:16 +02:00
callebtc
c7ced41bcb
Merge pull request #822 from permissionlesstech/uniform-lists-design
Unify people lists with conversation-row avatar design
2026-07-29 19:39:07 +02:00
callebtc
9f81a1e40d Fix peer verification status and badge 2026-07-29 19:32:28 +02:00
callebtc
9ca1413a1f feat: replace Leaflet WebView geohash picker with animated 3D globe
Reworks the geohash picker as a fully offline, native Compose globe:
- Orthographic 3D Earth rendered on a Canvas: starfield, atmosphere,
  shaded ocean, graticule and vector continents from bundled public-domain
  Natural Earth 110m data (world_land.geojson, 81KB)
- Geohash cells projected onto the sphere with theme-aware dark styling,
  Geist Mono labels, level + coverage readout and pulsing crosshair
- Gestures: drag to spin with inertial fling, pinch to zoom (precision
  follows zoom), tap to focus, double-tap zoom, cinematic fly-in intro,
  haptic tick on cell change
- Removes the WebView/Leaflet/CDN dependency; picker now works off-grid
  and matches the app theme in dark and light mode

Rendering notes: horizon-clipped polygon fills (front-run splitting with
limb arcs) and viewport clipping of all path geometry to avoid Skia
precision loss for coordinates beyond 32767px at high zoom.
2026-07-29 19:28:16 +02:00
callebtc
79e04ed3cc
Merge pull request #820 from permissionlesstech/codex/fix-wear-private-message-navigation
Improve Watch private-chat navigation and peer identity UI
2026-07-29 19:23:43 +02:00
callebtc
a306340119 Preserve Watch navigation across recreation 2026-07-29 19:12:13 +02:00
callebtc
4fdc9babbe feat: unify people lists with conversation-row avatar design
- Extract shared PeerAvatar (initial circle + lower-right transport badge)
  from the conversation row and use it in the mesh peer list and the
  geohash/Nostr people list
- Remove the favorite toggle button from the peer list; favorite state is
  now a small star badge on the avatar (filled = we favorited, outline =
  they favorited us), so favoriting only happens from the private chat
- Show the unread-count badge on peer rows, matching conversation rows
2026-07-29 19:11:06 +02:00
a1denvalu3
199f95fdbd Fix Cashu payment review issues 2026-07-29 19:09:05 +02:00
callebtc
3b0e569882 ci: use exact Temurin catalog version 2026-07-29 19:08:35 +02:00
a1denvalu3
6f4f6b988b Keep Cashu composer preview compact 2026-07-29 19:07:31 +02:00
a1denvalu3
adce27c0d1 Preview Cashu tokens in message composer 2026-07-29 19:07:12 +02:00
a1denvalu3
b9ca8ed3eb Add Cashu payment chips and pay command 2026-07-29 19:06:50 +02:00
callebtc
4f567ecd5f
Merge pull request #800 from a1denvalu3/issue-764-language-picker
Add in-app language picker
2026-07-29 19:03:01 +02:00
callebtc
44560b9792 Add Watch peer profiles and verification 2026-07-29 18:55:56 +02:00
callebtc
bf5bd8c417 fix: restore Android Studio sync with strict Gradle security 2026-07-29 18:15:50 +02:00
callebtc
d465f427a4 wear: fix private message navigation 2026-07-29 18:10:25 +02:00
callebtc
5b79da2db6
Merge pull request #816 from permissionlesstech/codex/fix-active-peer-notifications
Restore background peer availability alerts
2026-07-29 15:53:24 +02:00
callebtc
00ef72c45e fix: clear peer alerts on mesh shutdown 2026-07-29 15:49:33 +02:00
callebtc
e99d5ac4a0 Merge remote-tracking branch 'origin/main' into codex/fix-active-peer-notifications 2026-07-29 15:29:56 +02:00
callebtc
2807a16d1e fix: rate-limit peer availability alerts 2026-07-29 15:29:48 +02:00
callebtc
56f91a96b7
Merge pull request #817 from permissionlesstech/codex/android-ui-visual-review-skill 2026-07-29 15:21:58 +02:00
callebtc
95d6922218 feat: add Android UI visual review skill 2026-07-29 15:15:30 +02:00
callebtc
4fad876944 Merge main and resolve notification conflicts 2026-07-29 15:14:25 +02:00
callebtc
3410aaf5b9
Merge pull request #815 from permissionlesstech/codex/polish-persistent-conversations-v2
Polish persistent private conversations
2026-07-29 15:05:42 +02:00
callebtc
11511df8c3 style: remove emoji from peer alert title 2026-07-29 15:03:25 +02:00
callebtc
363f8c5aae fix: restore background peer availability alerts 2026-07-29 15:00:13 +02:00
callebtc
a21c0242a6 Fix conversation persistence review issues 2026-07-29 14:43:13 +02:00
callebtc
172d086c23 Fix live conversation identity state updates 2026-07-29 14:23:25 +02:00
callebtc
889c262edc
Merge pull request #802 from permissionlesstech/codex/mesh-lab-agent-skill
Add Mesh Lab agent skill
2026-07-29 13:55:55 +02:00
callebtc
c382c17a92 mesh-lab: fail closed when evidence dir is empty
A bare `test -n` does not abort in a shell without set -e, so a failed
mktemp would let `--out ""` resolve to the repository root and write
private evidence there. Guard with an explicit exit instead.
2026-07-29 13:54:50 +02:00
callebtc
a105d884cb Polish persistent private conversations 2026-07-29 13:51:55 +02:00
callebtc
9ed5cb26da
Merge pull request #798 from permissionlesstech/codex/reproducible-builds
Enable reproducible Android builds and releases
2026-07-29 13:47:45 +02:00
callebtc
01b59a7a0c
Merge pull request #809 from permissionlesstech/voice-recording-ux
Voice recording UX: slide-to-cancel, magnetic target, refined recording pill
2026-07-29 13:02:49 +02:00
callebtc
6f60b151d0
Merge pull request #810 from permissionlesstech/codex/wear-notification-stream-fix
Fix Wear OS DM notification delivery
2026-07-29 13:02:25 +02:00
callebtc
1dae188cdf
Merge pull request #806 from permissionlesstech/codex/persistent-conversations
Persist private conversations in People
2026-07-29 13:00:57 +02:00
callebtc
6a904a1849 voice: compute cancel verdict from the final pointer coordinate - recomposed shouldCancel state could be one frame stale on a fast slide-and-lift (PR review) 2026-07-29 12:55:36 +02:00
callebtc
538701c753 wear: shorten mesh status notification 2026-07-29 12:48:12 +02:00
callebtc
c6e64b1da8 wear: fix DM notification delivery 2026-07-29 12:42:54 +02:00
callebtc
ff0578cb88
Merge pull request #808 from moehamade/fix/hotspot-wifi-direct-reliability
fix: make Wi-Fi Direct hotspot sharing reliable
2026-07-29 12:33:16 +02:00
Moe Hamade
b5fd346437 fix: test the hotspot hold under the lock that publishes Aware
The previous recheck narrowed the race without closing it. Testing
hotspotHold outside lifecycleLock left this interleaving:

  1. the recheck passes, hold not yet set
  2. holdForHotspot() sets the flag and calls stop(), which takes the
     lock, finds nothing published, and returns having stopped nothing
  3. this block takes the lock and publishes the service anyway

Aware ends up running while the hotspot believes it owns the radio,
which is the original failure.

The hold is now tested inside the same synchronized block that
publishes, so the check and the publication are one step against
stop(). Ordering holds because holdForHotspot() sets the flag before
calling stop(): either the publisher observes the flag and abandons,
or stop() observes the published service and tears it down. There is
no interleaving that leaves a service published with the hold set.

stopServices() stays outside the lock since it can block.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-29 13:27:53 +03:00
callebtc
7c67df4b30 fix: isolate canonical container workspace 2026-07-29 12:24:09 +02:00
callebtc
8eddcb15ca voice: keep pill height identical between rest and recording - constrain recording visualizer row to the text field's 22dp content height so the separator no longer shifts 2026-07-29 12:23:50 +02:00
callebtc
97026d7bbb fix: lock wear dependencies in CI 2026-07-29 12:20:48 +02:00