summaryrefslogtreecommitdiff
path: root/android-app/app/src/test/kotlin
AgeCommit message (Collapse)Author
13 daysfeat: add GribRegion and GribFile data models with staleness logicClaudomator Agent
14 daysfix: move weather feature to org/terst/nav package directoriesPeter Stone
Package declarations were already org.terst.nav.* but files lived under com/example/androidapp/. Kotlin 2.0 (K2) compiler on CI fails when package declarations don't match directory structure during kapt stub generation. Moved all 20 files to their correct locations and renamed MainActivity (weather) -> WeatherActivity to avoid confusion with the nav app's MainActivity. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
14 daysmerge: integrate weather/forecast feature from local remotePeter Stone
Merges wind/current overlay and weather forecast implementation: - Weather feature: WeatherRepository, MainViewModel, MapFragment, ForecastFragment, ForecastAdapter - Data models: WindArrow, ForecastItem, WeatherResponse, MarineResponse - API services: WeatherApiService, MarineApiService (Open-Meteo, no key required) - Layouts: activity_weather.xml, fragment_map.xml, fragment_forecast.xml, item_forecast.xml - Resources: merged colors (wind_slow/medium/strong), strings, themes (Theme.NavApp added) - Manifest: added ACCESS_COARSE_LOCATION - build.gradle: merged deps — kept Firebase+MapLibre 11.5.1, added kotlin-kapt, retrofit, moshi, turbine - Fix: re-packaged com.example.androidapp → org.terst.nav; weather MainActivity uses ActivityWeatherBinding Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14Add GpsPosition data class and NMEA RMC parser with testsClaudomator Agent
- NmeaParser: parses $GPRMC (and any *RMC) sentence → GpsPosition - Null for void status (V), malformed input, non-RMC sentence - SOG/COG default to 0.0 when empty; S/W give negative lat/lon - Timestamp from HHMMSS + DDMMYY fields as Unix epoch millis UTC - No Android dependencies - GpsPositionTest: value holding and data-class equality (2 tests) - NmeaParserTest: 11 tests covering valid parse, void/malformed/empty, hemisphere signs, decimal precision - All 22 unit tests verified GREEN via kotlinc + JUnitCore Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14Add GpsProvider interface and DeviceGpsProvider (FusedLocation)Claudomator Agent
- GpsPosition: lat/lon/sog (knots)/cog (degrees true)/timestampMs - GpsProvider + GpsListener interfaces for provider abstraction - DeviceGpsProvider wraps LocationManager GPS_PROVIDER (1 Hz default) SOG: m/s × 1.94384 knots; fix-lost timeout 10s - FakeGpsProvider + 9 passing JVM unit tests (no Android deps) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14Implement barometric pressure trend monitoring and visualizationClaudomator Agent
2026-03-14feat: add LocationPermissionHandler with 7 unit tests for permission flowsClaudomator Agent
Extract location permission decision logic from MainActivity into a testable LocationPermissionHandler class. Covers: permission already granted, needs request, fine-only granted, coarse-only granted, both granted, both denied, and never-ask-again (empty grants) scenarios. All permissions (INTERNET, ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION) were already declared in AndroidManifest.xml; no manifest changes needed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13feat: add wind/current map overlay and weather forecast on startupClaudomator Agent
Implements the wind/current map overlay and 7-day weather forecast display that loads on application launch: Data layer: - Open-Meteo API (free, no key): WeatherApiService + MarineApiService - Moshi-annotated response models (WeatherResponse, MarineResponse) - WeatherRepository: parallel async fetch, Result<T> error propagation - Domain models: WindArrow (with beaufortScale/isCalm) + ForecastItem (with weatherDescription/isRainy via WMO weather codes) Presentation layer: - MainViewModel: StateFlow<UiState> (Loading/Success/Error), windArrow and forecast streams - MainActivity: runtime location permission, FusedLocationProvider GPS fetch on startup, falls back to SF Bay default - MapFragment: MapLibre GL map with wind-arrow SymbolLayer; icon rotated by wind direction, size scaled by speed in knots - ForecastFragment + ForecastAdapter: RecyclerView ListAdapter showing 7-day hourly forecast (time, description, wind, temp, precip) Resources: - ic_wind_arrow.xml vector drawable (north-pointing, rotated by MapLibre) - BottomNavigationView: Map / Forecast tabs - ViewBinding enabled throughout Tests (TDD — written before implementation): - WindArrowTest: calm detection, direction normalisation, Beaufort scale - ForecastItemTest: weatherDescription, isRainy for WMO codes - WeatherApiServiceTest: MockWebServer request params + response parsing - WeatherRepositoryTest: MockK service mocks, data mapping, error paths - MainViewModelTest: Turbine StateFlow assertions for all state transitions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>