Fjern hjemmeskjerm-widget

Widgeten har vært en vedlikeholdskostnad uten et klart produktformål:
den duplikerte lokasjonslogikken fra hovedappen, kunne vise inntil
24 timer gammel GPS-posisjon uten alderindikator, og krevde en egen
WorkManager-periodisk oppdatering. Den strategiske vurderingen
(2026-04-17) konkluderte med at den samme nytten kan leveres via
app-åpning eller en lettere mekanisme senere, og at flaten bør
krympes før pitch mot offentlig sektor.

Denne endringen fjerner widget/-pakken for begge flavors
(standard + fdroid), AppWidgetProvider-mottakeren i manifestet,
WidgetUpdateWorker, androidx.work:work-runtime-ktx-avhengigheten,
widget_prefs SharedPreferences-lagringen i MainActivity, samt
widget_*-strenger og linjen om «for hjemmeskjerm-widgeten» i
about-dialogen. Dokumentasjonen i CLAUDE.md, ARCHITECTURE.md,
README.md, STANDING_ON_SHOULDERS.md og fastlane-beskrivelsene
er justert tilsvarende. Historiske changelogs (v3, v5, v6, v7)
er bevisst urørt — de beskriver korrekt hva som ble levert i
de versjonene.

Eksisterende widget-plasseringer på brukernes hjemmeskjerm
forsvinner automatisk neste gang appen oppdateres; Android
fjerner foreldreløse provider-komponenter uten migreringskode.
Begge debug-flavors bygger rent etter endringen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ole-Morten Duesund 2026-04-20 09:57:45 +02:00
commit 0743eac9dd
19 changed files with 9 additions and 1111 deletions

View file

@ -13,7 +13,6 @@ This document describes the architecture of Tilfluktsrom, a Norwegian emergency
- [Compass System](#compass-system)
- [Map & Tile Caching](#map--tile-caching)
- [Build Variants](#build-variants)
- [Home Screen Widget](#home-screen-widget)
- [Deep Linking](#deep-linking)
- [Progressive Web App](#progressive-web-app)
- [Module Structure](#module-structure)
@ -41,7 +40,7 @@ This is an emergency app. Core functionality — finding the nearest shelter, co
The Android app runs on devices without Google Play Services (LineageOS, GrapheneOS, /e/OS). Every Google-specific API has an AOSP fallback. Play Services improve accuracy and battery life when available, but are never required.
### Minimal Dependencies
Both platforms use few, well-chosen libraries. No heavy frameworks, no external CDNs at runtime. The PWA bundles everything locally; the Android app uses only OSMDroid, Room, OkHttp, and WorkManager.
Both platforms use few, well-chosen libraries. No heavy frameworks, no external CDNs at runtime. The PWA bundles everything locally; the Android app uses only OSMDroid, Room, and OkHttp.
### Data Sovereignty
Shelter data comes directly from Geonorge (the Norwegian mapping authority). No intermediate servers. The app fetches, converts, and caches the data locally.
@ -107,15 +106,12 @@ no.naiv.tilfluktsrom/
│ ├── ShelterListAdapter.kt # RecyclerView adapter for shelter list
│ ├── CivilDefenseInfoDialog.kt # Emergency instructions
│ └── AboutDialog.kt # Privacy and copyright
├── util/
│ ├── CoordinateConverter.kt # UTM33N → WGS84 (Karney method)
│ └── DistanceUtils.kt # Haversine distance and bearing
└── widget/
├── ShelterWidgetProvider.kt # Home screen widget (flavor-specific)
└── WidgetUpdateWorker.kt # WorkManager periodic update
└── util/
├── CoordinateConverter.kt # UTM33N → WGS84 (Karney method)
└── DistanceUtils.kt # Haversine distance and bearing
```
Files under `location/` and `widget/` have separate implementations per build variant:
Files under `location/` have separate implementations per build variant:
- `app/src/standard/java/` — Google Play Services variant
- `app/src/fdroid/java/` — AOSP-only variant
@ -198,21 +194,6 @@ The `standard` flavor adds `com.google.android.gms:play-services-location`. Runt
Both flavors produce identical user experiences — `standard` achieves faster GPS fixes and better battery efficiency when Play Services are present.
### Home Screen Widget
**ShelterWidgetProvider** displays the nearest shelter's address, capacity, and distance. Updated by:
1. **MainActivity** — sends latest location on each GPS update
2. **WorkManager**`WidgetUpdateWorker` runs every 15 minutes, requests a fresh location fix
3. **Manual** — user taps refresh button on the widget
**Location resolution (priority order):**
1. Location from intent (WorkManager or MainActivity)
2. FusedLocationProviderClient cache (standard)
3. Active GPS request (10s timeout)
4. LocationManager cache
5. SharedPreferences saved location (max 24h old)
### Deep Linking
**HTTPS App Links:** `https://tilfluktsrom.naiv.no/shelter/{lokalId}`