Legg til om-side, personvernerklæring og sikkerheitsforbetring

Om-side (Android + PWA):
- Ny AboutDialog med personvernerklæring, datakjelder og opphavsrett
- Opphavsrett flytta frå sivilforsvardialogen til om-sida
- Tilgjengeleg via «Om denne appen»-lenke i sivilforsvarsdialogen (Android)
  og ny om-knapp i statuslinja (PWA)
- Lokalisert til en/nb/nn

Personvern og sikkerheit:
- Lagra GPS-posisjon utløper etter 24 timar (widget_prefs)
- Widget viser «Trykk for å oppdatere» når posisjon manglar eller er utløpt
- Eigendefinert User-Agent (Tilfluktsrom/1.6.1) i OkHttp
- Content Security Policy (CSP) meta-tag i PWA
- Tenararbeidar bufrar berre HTTP 200-svar (ikkje opake)
- Kartbuffer-metadata runda til ~11km presisjon i localStorage
- crossorigin="anonymous" på Leaflet CSS

i18n-opprydding:
- Unicode-escapes erstatta med UTF-8-teikn i nb.ts og nn.ts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ole-Morten Duesund 2026-03-23 14:27:45 +01:00
commit c1ac68e746
21 changed files with 469 additions and 34 deletions

View file

@ -252,10 +252,13 @@ class ShelterWidgetProvider : AppWidgetProvider() {
return getSavedLocation(context)
}
/** Read the last GPS fix persisted by MainActivity to SharedPreferences. */
/** Read the last GPS fix persisted by MainActivity to SharedPreferences.
* Returns null if older than 24 hours to avoid retaining stale location data. */
private fun getSavedLocation(context: Context): Location? {
val prefs = context.getSharedPreferences("widget_prefs", Context.MODE_PRIVATE)
if (!prefs.contains("last_lat")) return null
val age = System.currentTimeMillis() - prefs.getLong("last_time", 0L)
if (age > 24 * 60 * 60 * 1000L) return null
return Location("saved").apply {
latitude = prefs.getFloat("last_lat", 0f).toDouble()
longitude = prefs.getFloat("last_lon", 0f).toDouble()

View file

@ -84,10 +84,13 @@ class WidgetUpdateWorker(
return Result.success()
}
/** Read the last GPS fix persisted by MainActivity. */
/** Read the last GPS fix persisted by MainActivity.
* Returns null if older than 24 hours. */
private fun getSavedLocation(): Location? {
val prefs = applicationContext.getSharedPreferences("widget_prefs", Context.MODE_PRIVATE)
if (!prefs.contains("last_lat")) return null
val age = System.currentTimeMillis() - prefs.getLong("last_time", 0L)
if (age > 24 * 60 * 60 * 1000L) return null
return Location("saved").apply {
latitude = prefs.getFloat("last_lat", 0f).toDouble()
longitude = prefs.getFloat("last_lon", 0f).toDouble()