<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nav.git/android-app/app/src/main/res/drawable, branch main</title>
<subtitle>nav — android navigation app
</subtitle>
<id>https://git.terst.org/nav.git/atom?h=main</id>
<link rel='self' href='https://git.terst.org/nav.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/'/>
<updated>2026-07-02T01:35:07+00:00</updated>
<entry>
<title>fix(ui): layer previews, fishing pole icon, button alignment, safety page cleanup</title>
<updated>2026-07-02T01:35:07+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-02T01:35:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=1893aee8e9a23fdc51e203c918f52374fa601d7d'/>
<id>urn:sha1:1893aee8e9a23fdc51e203c918f52374fa601d7d</id>
<content type='text'>
- Layer picker: change android:src→android:background on preview ImageViews; shape
  drawables have no intrinsic size so centerCrop renders blank — background fills correctly
- Replace ic_fish with ic_fishing_pole (rod + reel + line + hook vector)
- Move fab_fishing to CoordinatorLayout with layout_anchor on instrument_bottom_sheet
  top|start, matching fab_record_track positioning so both FABs sit level at sheet top
- Raise fishing_overlay marginBottom 140dp→200dp to clear the realigned FAB
- Safety: remove HELP button + DocFragment import from SafetyFragment; rename Quit→Quit App

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(ui): gradient preview drawables for layer picker cards</title>
<updated>2026-07-01T06:34:38+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-01T06:34:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=bee75a1083455726c5fc2d179d564571da5096cb'/>
<id>urn:sha1:bee75a1083455726c5fc2d179d564571da5096cb</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(fishing): FishingOverlayView card UI and ic_fish vector drawable</title>
<updated>2026-06-30T18:46:08+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-06-30T18:46:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=8233794366939f614a9899a11f2b7093bc32d9b8'/>
<id>urn:sha1:8233794366939f614a9899a11f2b7093bc32d9b8</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add night vision mode toggle</title>
<updated>2026-06-03T01:01:00+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-06-03T01:01:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=17cfd884976b4accbb2ad6af6acf3578d0c6ec53'/>
<id>urn:sha1:17cfd884976b4accbb2ad6af6acf3578d0c6ec53</id>
<content type='text'>
Single-tap moon FAB (stacked below layers FAB) toggles red-on-black
night vision mode. NightVision theme now has a full M3 color palette
(surface, surfaceVariant, outline, secondary, error) all in dark red
tones. Screen brightness is set to 30% in night mode and restored to
system default on exit. State persists across sessions; recreate()
applies the theme switch cleanly.

https://claude.ai/code/session_01KXYBuAHZkvv63DeUG6XaZD
</content>
</entry>
<entry>
<title>Add saved tracks browser, tack detection, and map zoom-to-bounds</title>
<updated>2026-05-12T23:13:55+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-05-12T23:13:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=f881a1f91f4e9f832ab987fce2b5220e100cee68'/>
<id>urn:sha1:f881a1f91f4e9f832ab987fce2b5220e100cee68</id>
<content type='text'>
- TackDetector: sliding-window COG algorithm (60-140deg delta = tack/jibe)
  with stability check to prevent mixed-window false positives; 13 tests green
- TackEvent, SavedTrack: new models wrapping points + summary + detected tacks
- TrackRepository.getSavedTracks(): returns List&lt;SavedTrack&gt; with lazy load
- MapHandler: zoomToTrackBounds (LatLngBounds fit with padding),
  panToPoint (log step-through), updateTackLayer (yellow circle markers)
- MainViewModel: savedTracks + selectedTrack StateFlows, panToPosition SharedFlow
- SavedTracksFragment: RecyclerView list with date/distance/duration/tack count
- TrackDetailSheet: bottom sheet with stats + event log (tacks, speed changes,
  start/end); tapping an entry pans the map to that position
- MainActivity: zoom map on track complete, wire Saved Tracks button in
  instrument sheet, observe panToPosition to drive map, show tack markers
  when a saved track is selected

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: keep bottom nav visible when panning; expand drag handle touch target</title>
<updated>2026-05-05T22:30:50+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-05-05T22:30:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=2123351fc1d1c529046c5179171e4d442ca20f55'/>
<id>urn:sha1:2123351fc1d1c529046c5179171e4d442ca20f55</id>
<content type='text'>
Bottom nav: remove it from the following/panning fade cycle — only
fabRecenter and fabRecordTrack swap; nav stays visible throughout.

Drag handle: 4dp × 36dp was too small and competed with BottomSheet
drag gestures. Now 40dp tall via inset drawable (visual bar unchanged,
touch area is a usable 40dp × 36dp).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Merge origin/main — unite all work onto one branch</title>
<updated>2026-04-23T23:10:11+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-23T23:10:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=e1db9200e9d44c10450361cc8984a45b2eda87b7'/>
<id>urn:sha1:e1db9200e9d44c10450361cc8984a45b2eda87b7</id>
<content type='text'>
Brings in dev log (NavLogger), UnitPrefs, MapLayerManager, HUD views,
conditions throttling, track save/load pipeline, improved ParticleWindView
(antimeridian-aware, dynamic particle count), Snackbar error surfacing,
and all other main-branch work from the prior session.

Combined with master's hardware source flags, vessel registry, crew
management, thermal alarm, CPA collision alerts, and track stats.

Also documents primary branch policy in CLAUDE.md and .agent/config.md:
all work merges to main, never master.

https://claude.ai/code/session_011h2dXbgXg3PesQMmQUNTCW
</content>
</entry>
<entry>
<title>feat: vessel registry, crew management, and thermal alarm</title>
<updated>2026-04-22T05:35:49+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-22T05:35:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=eeafe2f0f3a3718bd52e9c333894e1abbc0611ab'/>
<id>urn:sha1:eeafe2f0f3a3718bd52e9c333894e1abbc0611ab</id>
<content type='text'>
- Vessel/CrewMember data classes with full profile fields
  (MMSI, callsign, flag, home port, hull type, dimensions, roles)
- VesselRepository: in-memory CRUD for own vessel, fleet, and crew;
  getOwnVessel(), getSkipper(), getCrewByRole() helpers
- VesselRegistryFragment: own-vessel card + crew list + known-vessels
  list; AlertDialog editors for add/edit; long-press to delete
- ic_vessel.xml sailboat icon; 5th bottom-nav tab "Vessel"
- ThermalMonitor: thermalFlow() using Intent.ACTION_BATTERY_CHANGED
  (battery °C) + PowerManager.OnThermalStatusChangedListener (API 29+);
  ThermalState OK/WARM/HOT/CRITICAL with distinct-until-changed filter
- MainActivity: startThermalMonitoring() sounds mob_alarm + Toast on
  HOT (≥45°C) and CRITICAL (≥50°C); auto-silences on OK/WARM
- MainViewModel: thermalState and thermalReading StateFlows
- 18 VesselRepositoryTest cases — all GREEN (test-runner)
- design.md: updated competitive matrix + feature implementation status

https://claude.ai/code/session_011h2dXbgXg3PesQMmQUNTCW
</content>
</entry>
<entry>
<title>Four features: outbound link markers, offline content, log text/photo, departure picker</title>
<updated>2026-04-11T02:27:51+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-11T02:27:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=4a2d0298ab2caa3d62cfbd54c0071ae47eb89ccf'/>
<id>urn:sha1:4a2d0298ab2caa3d62cfbd54c0071ae47eb89ccf</id>
<content type='text'>
Learn tab
- ic_open_in_new.xml: external link icon (box + arrow) applied to all browser-opening cards
- Migration guide cards retain internal › chevron; ASA/Flashcards cards show ↗ icon
- New REFERENCE section (offline, works without connectivity):
  - ColRegs Rules of the Road → colregs_reference.md (rules 1–38, lights table,
    sound signals, day shapes, memory aids)
  - Sailing Quick Reference → sailing_reference.md (points of sail, Beaufort scale,
    nav lights, knots, buoyage IALA-B, VHF channels, distress signals, tide rule of 12)
- ColRegs card moved from external ASA section to offline REFERENCE section

Log entry
- LogEntry: add photoPath field (absolute file path or content URI string)
- VoiceLogViewModel: replace confirmAndSave() with save(text, photoPath?) so the
  fragment controls text (user may edit recognized speech before saving)
- VoiceLogFragment: redesigned layout with EditText (editable, voice fills it),
  camera button (TakePicturePreview → JPEG in cacheDir), gallery button (GetContent),
  photo thumbnail with remove button, Save / Clear row
- Manifest: add android.hardware.camera uses-feature (required=false)

Departure date/time picker (trip planning)
- ic_calendar.xml: calendar icon for the picker button
- PreTripReportViewModel: _departureMs StateFlow (default = now), setDeparture(ms)
- PreTripReportGenerator.generateReport(): departureDateTimeMs param;
  findDepartureSlot() matches nearest UTC forecast item; condition window labels show
  actual local times (e.g. "2 PM") when departure is not near-now; buildWatchList
  uses departure hour for Kona trades warning instead of system clock
- fragment_pretrip_report.xml: DEPART card with label + calendar button above generate
- PreTripReportFragment: MaterialDatePicker (future dates only) → MaterialTimePicker
  chain; auto-regenerates after picker confirms

https://claude.ai/code/session_01HXPjBsogsJVRwCiekDGkJX
</content>
</entry>
<entry>
<title>Add Learn tab; move quit to Safety; remove persistent MOB FAB</title>
<updated>2026-04-10T22:47:27+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-10T22:47:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=fc7192288109fc3542670cbeeaebe0de2a75eb74'/>
<id>urn:sha1:fc7192288109fc3542670cbeeaebe0de2a75eb74</id>
<content type='text'>
UI cleanup:
- Remove always-visible MOB FAB — Safety screen button is sufficient
- Remove floating quit button; move to bottom of Safety screen
- fragment_container is now clickable/focusable, blocking map touch-through
  for all overlays (trip reports, log, safety)
- Record Track FAB hidden while any overlay is shown, visible on map tab

New Learn tab (5th nav item):
- Migration guides for Navionics and Sea People (local markdown via DocFragment)
- ASA Course Catalog, ASA Online Learning, ColRegs, Sailing Flashcards
  (open in browser)
- Remove blanket assets/ .gitignore so markdown docs are tracked

https://claude.ai/code/session_01HXPjBsogsJVRwCiekDGkJX
</content>
</entry>
</feed>
