Skip to content

feat(map): redesign Map tab (concept 4c) with a real bordered basemap - #911

Merged
patrickrb merged 2 commits into
devfrom
feat/map-redesign-4c
Sep 25, 2026
Merged

patrickrb merged 2 commits into
devfrom
feat/map-redesign-4c

Conversation

@patrickrb

@patrickrb patrickrb commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

Implements the 4c Map redesign on the app's existing offline vector map.

What's new

  • Real bordered map — country outlines (world_countries.json) now draw in both the equirectangular and azimuthal projections, plus US state borders once zoomed past a threshold (showStateBorders). The border data + loaders already shipped; they were unused until now.
  • 4c layout — header (Map + "N decoded · M worked this session" + ⚙ gear) → layer-chip row (Decodes / PSK spots / Worked) → an inset rounded map card. The chips partition which station markers draw.
  • Controls — top-left greyline info pill (band + "greyline in Xh Ym"), a 44dp + / − / Me stack where Me recenters on the operator grid, and Projection + Gray line moved into the ⚙ menu to keep the chrome clean.
  • Station card restyled to 4c (avatar + callsign + distance · bearing · SNR + Details). Details currently closes the card; wiring it to the full QSO sheet is a follow-up.

Scope

  • Map screen only — the existing 6-tab navigation is unchanged.
  • "Real map" = the existing offline vector basemap with borders (no tile/slippy-map dependency), per the requirement to show borders without needing connectivity in the field.

Testing

  • New pure logic extracted to MapRedesign.kt (layer visibility, greyline countdown, formatting) and MapViewport.panToCenter, covered by MapRedesignTest (all passing).
  • assembleDebug builds; verified live on a tablet emulator with demo data (borders render, gear menu, greyline countdown, recenter).

🤖 Generated with Claude Code

Screenshots

Bolder station indicators — bigger dots, a layered glow, and a raised SNR floor so weak decodes still read; the operator is a bold amber "you are here" dot. Shapes (triangle CQ / diamond to-me / donut worked / dot) are kept:

Auto-fit to markers — the map frames the region that actually has stations instead of a mostly-empty world. A regional run zooms into North America (state borders appear); a global spread stays at world view:

Map options menu — Projection + Gray line live in the ⚙ gear:

Implements the "4c" Map redesign on the existing offline vector map:

- Borders: draw country outlines (world_countries.json) in both the
  equirectangular and azimuthal projections, plus US state borders once
  zoomed past a threshold (showStateBorders). The data + loaders already
  shipped; they were just unused.
- Layout: header (title + "N decoded · M worked this session" + gear) over
  a layer-chip row (Decodes / PSK spots / Worked) over an inset rounded map
  card. Layer chips partition which markers draw.
- Controls: top-left greyline info pill (band + "greyline in Xh Ym"), a
  44dp +/-/Me stack where Me recenters on the operator grid, and Projection
  + Gray line moved into the gear menu.
- Station card restyled to 4c (avatar + callsign + distance/bearing/SNR +
  Details).

Pure logic extracted to MapRedesign.kt (layer visibility, greyline
countdown, formatting) and MapViewport.panToCenter, covered by
MapRedesignTest. Verified on a tablet emulator with demo data.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 11.69451% with 370 lines in your changes missing coverage. Please review.
✅ Project coverage is 41.50%. Comparing base (34b3d0e) to head (ab8db56).
⚠️ Report is 7 commits behind head on dev.

Files with missing lines Patch % Lines
...main/kotlin/radio/ks3ckc/ft8af/ui/map/MapScreen.kt 1.07% 367 Missing ⚠️
...in/kotlin/radio/ks3ckc/ft8af/ui/map/MapRedesign.kt 93.18% 1 Missing and 2 partials ⚠️
Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff              @@
##                dev     #911      +/-   ##
============================================
- Coverage     42.07%   41.50%   -0.57%     
  Complexity      252      252              
============================================
  Files           278      280       +2     
  Lines         33383    33973     +590     
  Branches       3914     4033     +119     
============================================
+ Hits          14045    14100      +55     
- Misses        19051    19584     +533     
- Partials        287      289       +2     
Flag Coverage Δ
android 17.59% <11.69%> (-0.26%) ⬇️
native 9.93% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...in/kotlin/radio/ks3ckc/ft8af/ui/map/MapViewport.kt 100.00% <100.00%> (+3.84%) ⬆️
...in/kotlin/radio/ks3ckc/ft8af/ui/map/MarkerStyle.kt 100.00% <100.00%> (ø)
...in/kotlin/radio/ks3ckc/ft8af/ui/map/MapRedesign.kt 93.18% <93.18%> (ø)
...main/kotlin/radio/ks3ckc/ft8af/ui/map/MapScreen.kt 7.46% <1.07%> (-1.56%) ⬇️

... and 9 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

patrickrb added a commit that referenced this pull request Sep 25, 2026
patrickrb added a commit that referenced this pull request Sep 25, 2026
patrickrb added a commit that referenced this pull request Sep 25, 2026
Addresses two legibility issues raised on the redesign:

- Indicators are now obvious dots: marker radius 3.5/5.5 -> 6/9, a layered
  glow halo instead of a single faint one, an SNR alpha floor raised from
  0.45 to 0.78 (weak decodes no longer wash out), and a bold amber operator
  "you are here" dot with a glow. Shapes (triangle CQ / diamond to-me /
  donut worked / dot) are kept.
- Auto-fit: on the standard projection the map now frames the region that
  actually has markers (stations + operator) instead of a mostly-empty
  world. fitEquirectView computes the zoom/pan; it re-frames when the marker
  spread changes and stops once the operator pans/zooms/recenters (a global
  spread stays at 1x, a regional cluster zooms in).

New pure logic (fitEquirectView + MapViewFit) and the raised SNR floor are
covered by tests; verified on a tablet emulator (regional inject zooms to
North America, global inject frames the world).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
patrickrb added a commit that referenced this pull request Sep 25, 2026
patrickrb added a commit that referenced this pull request Sep 25, 2026
@patrickrb
patrickrb merged commit c603d1c into dev Sep 25, 2026
20 checks passed
@patrickrb
patrickrb deleted the feat/map-redesign-4c branch September 25, 2026 19:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant