<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nav.git/android-app/app/src/androidTest/kotlin/org, 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-04-04T07:45:41+00:00</updated>
<entry>
<title>refactor: unify core models and finish org.terst.nav migration</title>
<updated>2026-04-04T07:45:41+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-04-04T07:45:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=97715ab4007ff3101f58edf4385cef1fc3d1615b'/>
<id>urn:sha1:97715ab4007ff3101f58edf4385cef1fc3d1615b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>test(smoke): ensure isTesting flag is set before Activity launch</title>
<updated>2026-04-04T01:59:04+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-04-04T01:59:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=cfe178a0cd817f5ec747c220d37a82d3c7ecbf64'/>
<id>urn:sha1:cfe178a0cd817f5ec747c220d37a82d3c7ecbf64</id>
<content type='text'>
- Use BeforeClass to set isTesting in NavApplication
- This ensures MapLibre is bypassed correctly even when ActivityScenarioRule starts before @Before.

Co-Authored-By: Gemini CLI &lt;gemini-cli@google.com&gt;
</content>
</entry>
<entry>
<title>refactor: address simplify review findings</title>
<updated>2026-03-25T18:23:54+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-25T18:23:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=e68212991935d33a4baca77d88cd20a82fbcf6a6'/>
<id>urn:sha1:e68212991935d33a4baca77d88cd20a82fbcf6a6</id>
<content type='text'>
TrackRepository.addPoint() now returns Boolean (true if point was
added). MainViewModel.addGpsPoint() only updates _trackPoints StateFlow
when a point is actually appended — eliminates ~3,600 no-op flow
emissions per hour when not recording.

MainActivity: loadedStyle promoted from nullable field to
MutableStateFlow&lt;Style?&gt;; trackPoints observer uses filterNotNull +
combine so no track points are silently dropped if the style loads
after the first GPS fix.

Smoke tests: replaced 11× ActivityScenario.launch().use{} with a
single @get:Rule ActivityScenarioRule — same isolation, less
boilerplate.

CI: removed redundant app-debug artifact upload (app-debug.apk is
already included inside the test-apks artifact).

Removed stale/placeholder comments from MainActivity.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(ci): share APKs between jobs and expand smoke tests</title>
<updated>2026-03-25T18:18:17+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-25T18:18:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=ea5cdac728263fdc48b480460f3362a7f5fe221d'/>
<id>urn:sha1:ea5cdac728263fdc48b480460f3362a7f5fe221d</id>
<content type='text'>
CI — build job now uploads both APKs as the 'test-apks' artifact.
smoke-test job downloads them and passes -x assembleDebug
-x assembleDebugAndroidTest to skip recompilation (~4 min saved).
Test results uploaded as 'smoke-test-results' artifact on every run.

Smoke tests expanded from 1 → 11 tests covering:
  - MainActivity launches without crash
  - All 4 bottom-nav tabs are displayed
  - Safety tab: Safety Dashboard, ACTIVATE MOB, ANCHOR WATCH visible
  - Log tab: voice-log mic FAB visible
  - Instruments tab: bottom sheet displayed
  - Map tab: returns from overlay, mapView visible
  - MOB FAB: always visible, visible on Safety tab
  - Record Track FAB: displayed, toggles to Stop Recording, toggles back

MainActivity: moved isRecording observer to initializeUI() so the
FAB content description updates without requiring GPS permission
(needed for emulator tests that run without location permission).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: resolve CI failures by adding JUnit vintage engine and skipping background permission check in tests</title>
<updated>2026-03-22T07:05:16+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-22T07:05:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=455206121f2061d5bc81b629da7978e1975845d9'/>
<id>urn:sha1:455206121f2061d5bc81b629da7978e1975845d9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: rasterise vector drawable for MapLibre; add startup smoke test</title>
<updated>2026-03-15T07:39:39+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-15T07:39:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=a66e96f70b1d46961fc5a3f6324d0d960bc1337b'/>
<id>urn:sha1:a66e96f70b1d46961fc5a3f6324d0d960bc1337b</id>
<content type='text'>
Bug: BitmapFactory.decodeResource() returns null for vector drawables
(ic_tidal_arrow.xml). style.addImage(id, null) then NPE-crashed inside
MapLibre's native layer. The previous style URL was invalid so the
setStyle callback never fired and the bug was hidden; fixing the URL
in c7b42ab exposed it.

Fix: draw the VectorDrawable onto a Canvas to produce a real Bitmap
before handing it to MapLibre, matching the pattern already used in
MapFragment for the wind-arrow icon.

Also adds:
- MainActivitySmokeTest: Espresso test that launches MainActivity and
  asserts it doesn't immediately crash — catches this class of bug.
- CI smoke-test job: runs the Espresso test on an API-30 emulator via
  reactivecircus/android-emulator-runner after the build job passes.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
