summaryrefslogtreecommitdiff
path: root/android-app/app/src/main/res/drawable
diff options
context:
space:
mode:
authorClaudomator Agent <agent@claudomator>2026-03-13 19:59:01 +0000
committerClaudomator Agent <agent@claudomator>2026-03-13 19:59:01 +0000
commit51f86cff118f9532783c4e61724e07173ec029d7 (patch)
tree1c5601142391003830527f0c97d8ef7fa4145052 /android-app/app/src/main/res/drawable
parent7e40bd03ab0246552d26d92fda8623b8da4653f3 (diff)
feat: add wind/current map overlay and weather forecast on startup
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>
Diffstat (limited to 'android-app/app/src/main/res/drawable')
-rw-r--r--android-app/app/src/main/res/drawable/ic_wind_arrow.xml21
1 files changed, 21 insertions, 0 deletions
diff --git a/android-app/app/src/main/res/drawable/ic_wind_arrow.xml b/android-app/app/src/main/res/drawable/ic_wind_arrow.xml
new file mode 100644
index 0000000..110f1b3
--- /dev/null
+++ b/android-app/app/src/main/res/drawable/ic_wind_arrow.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Wind-direction arrow pointing UP (north).
+ MapLibre rotates the icon to match wind direction via icon-rotate expression.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+ <!-- Arrowhead pointing up -->
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M12,2 L18,14 L12,11 L6,14 Z" />
+ <!-- Shaft -->
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M11,11 L11,22 L13,22 L13,11 Z" />
+
+</vector>