Når en dyplenke (eller markørtap) velger et tilfluktsrom som ikke er
blant de N nærmeste, blir det nå appendet til bunnpanelets liste med
et tydelig "Valgt – utenfor nærområdet"-badge, og lista scroller til
den valgte raden. Hvis valget er innenfor topp-N, scrollelementet
fortsatt synes — løser begge symptomene som rapporten pekte på.
Endringer:
- Ny ShelterListItem(swd, isOutsideNearest)-wrapper i adapteren
- ShelterListAdapter: viser badge + a11y-suffiks når isOutsideNearest=true
- item_shelter.xml: badge-TextView (orange bakgrunn, hvit tekst, gone som default)
- MainActivity: rebuildShelterList()-helper bygger top-N + maybe-appended,
smoothScrollToPosition(selectedIdx) sikrer synlig markering
- Strings i en/nb/nn
Forgejo: #13
Initialiserer beads (bd) som lokalt issue-spor med Dolt-historikk, og
legger til AGENTS.md + .claude/settings.json for konsistent agent-oppsett
på tvers av økter. Forgejo forblir kanonisk for offentlig samarbeid;
beads speiler issuene lokalt for AI-agent-bruk.
Endringer:
- .beads/: konfig, hooks, og initial issues.jsonl (11 saker speilet fra Forgejo, #1 og #7 lukket)
- .gitignore: ekskluder .dolt/, *.db og .beads-credential-key
- AGENTS.md: agentvennlig oppsummering av prosjektkonvensjoner
- CLAUDE.md: beads-integrasjonsblokk + sesjonsavslutningsprotokoll
- .claude/settings.json: Claude Code-innstillinger for prosjektet
Holder fdroid/-katalogen utenfor — F-Droid-distribusjon er pauset.
Legg til klikkbare lenker under "Datakilder" i Om-dialogen så brukarar
kan finne metadata, oppdateringsfrekvens og kvalitetsinfo om
tilfluktsrom-datasettet direkte hjå kjeldene.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PWA-utgivelse: synleg del-ikon og deferred autoupdate. Ingen
funksjonelle endringar i Android-koden — versjonsmetadata følgjer
PWA-en for samkøyrde utgivingsmerke.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Bytt del-knappen frå tekstpila ↪ til ein innebygd Material-stil
SVG (20×20). Den førre Unicode-pila vart teikna mykje mindre enn
ℹ og ↻ av dei fleste fontar — no har alle tre ikona same visuelle
vekt på tvers av nettlesarar og operativsystem.
- Lagt til ein controllerchange-lyttar som utløyser ein omlasting
*neste* gong appen vert lagt i bakgrunnen (visibilityState ===
'hidden'), ikkje umiddelbart. Slik tek nye distribusjonar effekt
utan brukarinngrep, men utan å rive vekk skjermen midt i ein
tilfluktsromnavigering. registerType: 'autoUpdate' åleine sørgjer
for at den nye SW-en skipWaiting + clientsClaim, men det reload-ar
ikkje den allereie køyrande JavaScripten — denne lyttaren stettar
det utan å bryte noregisseringsflyt.
Påverkar ikkje fråkopla bruk: omlasting skjer berre etter at ein ny
SW har vorte aktivert, og ein ny SW kan berre installerast medan
nettverket er tilgjengeleg. Sjølve omlastinga løyser alle ressursar
frå presjekken og fungerer fråkopla.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Punktutgivelse med stabile djuplenker (romnr i staden for lokalId),
PWA-deling, og fiks for hengande oppdater-knapp og gjentatt
kart-bufferspørsmål.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Bytt djuplenkjenøkkel frå lokalId til romnr fordi Geonorge
regenererer lokalId-UUID-en på kvar eksport (556/556 endra på sju
dagar), medan romnr er DSB sin stabile rom-nummer-nøkkel. Dokumentert
i ARCHITECTURE.md.
- PWA: ny del-knapp som genererer same HTTPS-djuplenke som Android-appen
(Web Share API med utklippstavle-fallback).
- PWA: vald tilfluktsrom overlever no posisjonsoppdateringar og
manuell dataoppdatering — sporast på romnr i staden for lista.
- Android: kart-bufferspørsmålet dukkar berre opp éin gong per økt
("Hopp over" sit), og forceRefresh viser lasteoverlegg + hindrar
samtidige refresh-kall.
- i18n.ts: vakta DOM-skriving slik at vitest køyrer utan jsdom.
- Oppdatert pakka tilfluktsromdata frå Geonorge.
Refs #15
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Fjern maximum-scale/user-scalable på viewport slik at siden kan
zoomes (WCAG 1.4.4). Leaflet håndterer gestikk på kartet selv.
- Legg til Apple-meta-tagger for standalone-modus og statuslinje.
- Vis engangsbanner på iOS Safari om å legge til på hjemskjerm,
siden iOS ikke støtter beforeinstallprompt.
- Gi tydelig statusmelding når bruker avslår kompasstilgang i
stedet for å stille reversere til kartmodus.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tidligere sto statusteksten igjen på «Venter på GPS…» uansett om
årsaken var manglende tillatelse, avslåtte stedstjenester eller
bare at GPS-en ikke hadde fått fix ennå. For en nødsituasjonsapp
er det en reell feilmodus: brukeren får ingen hint om hva som kan
gjøres for å finne nærmeste tilfluktsrom.
Ny noLocationBanner plasseres øverst i innholdsområdet (rett under
statuslinjen) slik at den ikke kolliderer med de flytende
handlingsknappene over bunnarket, og viser én av tre tilstander:
1. Tillatelse avslått eller ikke gitt — «Posisjonstilgang
nødvendig for å finne nærmeste tilfluktsrom. Du kan også
trykke på et merke i kartet.» + «Gi tilgang» som åpner
ACTION_APPLICATION_DETAILS_SETTINGS.
2. Tillatelse gitt, men stedstjenester slått av — «Stedstjenester
er slått av. Aktiver dem eller velg et tilfluktsrom fra
kartet.» + «Aktiver» som åpner ACTION_LOCATION_SOURCE_SETTINGS.
3. Begge OK — banner er skjult og den eksisterende «Venter på
GPS…»-teksten gjelder.
Helperen updateLocationStatusBanner() kalles fra loadData(),
permission-result-kallbacket og onResume(), slik at banneret
oppdaterer seg både ved appstart, umiddelbart etter avslag, og
når brukeren kommer tilbake fra systeminnstillingene.
AlertDialog-en ved permanent avslag er fjernet til fordel for det
ikke-modale banneret, som lar brukeren fortsatt pan-ne kartet og
velge tilfluktsrom manuelt. Toasten på mykt avslag er beholdt som
en kort bekreftelse. API-nivå-fallbacket bruker
LocationManager.isLocationEnabled på API 28+, isProviderEnabled
for GPS/Network på API 26–27.
Verifisert på emulator i alle fire tilstander (avslag → App
Settings, tjeneste-av → Posisjonsinnstillinger, gjenopprettet).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Linjen under «Sikkerhet» beskrev 24-timers-grensen på
widget_prefs-cachen som ble fjernet sammen med widgeten i
forrige commit. Appen persisterer nå ikke GPS-posisjon
overhodet, så linjen er erstattet med «GPS-posisjon lagres
ikke — den brukes bare i minnet mens appen er i bruk», som
samsvarer med den allerede oppdaterte teksten i
about_stored_body.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>
Patch-utgave som inneholder rettelsen av N-indikatoren i
kompassvisningen. User-Agent og «Dato for siste gjennomgang» i
ACCESSIBILITY.md oppdatert i samsvar.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Nordindikatoren («N»-merket) ble plassert på en sirkel med radius
min(w,h) * 0,54 fra senter. I stående kompassvisning er dette
bredere enn viewporten, så indikatoren havnet utenfor skjermen når
brukeren vendte omtrent 90° eller 270°.
Ny hjelpefunksjon clampIndicatorRadius finner avstanden fra
sentrum til nærmeste viewport-kant i nordretningen, og klamper
radiusen slik at hele «N»-etiketten holder seg innenfor rammen
uansett rotasjonsvinkel. Seks nye unittester dekker
grensetilfeller, inkludert en sweep over alle 360° som fanget opp
en float-presisjonsartefakt ved 240°.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Publiserer a11y-utbedringene fra forrige commit. User-Agent i
ShelterRepository er oppdatert til å matche versjonen.
I ACCESSIBILITY.md er de fire utbedrede WCAG-avvikene flyttet
fra §3.1 til et nytt §7 Historikk under versjon 1.9.0. §3.1
slår nå fast at ingen gjenværende avvik er identifisert utover
§3.2 (uforholdsmessig byrde på Leaflet-kartet). Uutilsynet/Digdir
er bekreftet som riktig tilsynsmyndighet.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fire WCAG-avvik utbedret før appen kan lisensieres til offentlig
sektor (WAD / EN 301 549):
- SC 1.4.3: Advarselsbanner til #BF360C (~5,5:1 mot hvit, var 3,75:1).
- SC 2.4.7: defaultFocusHighlightEnabled i temaet; ikonknapper
bruker bundet selectableItemBackground.
- SC 4.1.2: DirectionArrowView rapporterer ImageView-rolle og
annonserer retning + avstand til TalkBack når en 45°-sektor
krysses, med 750 ms-struping mot spam.
- SC 2.3.3: Snapper til nærmeste 45° når brukeren har slått av
animasjoner (ANIMATOR_DURATION_SCALE=0).
Nye retningsstrenger i nb/nn/en. JVM-unittester for
sektoraritmetikken sikrer grensetilfeller (negative vinkler,
360°-overgang, vilkårlige vinkler).
ACCESSIBILITY.md dokumenterer tilgjengelighetserklæring etter
WAD artikkel 7, i bokmål med engelsk preambel og
vedlikeholdsjekkliste.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fila vart lagt til .gitignore i 012da23 men var framleis spora.
Ho vert generert av `bun run fetch-shelters` og skal ikkje versjonerast.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SMS-appar gjenkjenner ikkje eigendefinerte URI-skjema som klikkbare
lenkjer. Brukar no https://tilfluktsrom.naiv.no/shelter/{id} som
opnar appen direkte (Android App Links med autoVerify) eller fell
tilbake til PWA i nettlesaren.
Android: DEEP_LINK_DOMAIN i build.gradle.kts, HTTPS intent-filter,
oppdatert handleDeepLinkIntent og shareShelter med HTTPS-URL.
PWA: assetlinks.json for Android-verifisering, djuplenkjehandtering
i app.ts, base-sti endra frå './' til '/', config.ts for domene.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Info-knappen (ℹ) åpner nå sivilforsvarsdialog med alle 5 steg,
med «Om»-lenke i bunnen (som Android-appen)
- Laste-overleggets knapper («Lagre kart» / «Hopp over») får
tekst fra i18n i stedet for å være tomme
- Kompassvisningen resizes canvas når den blir synlig, fikser
0×0-canvas når den initialiseres mens containeren er skjult
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Appen kan nå serveres både på / og under en understi som
/tilfluktsrom uten endringer.
- Sett base: './' i vite.config.ts
- Endre alle absolutte stier i index.html til relative
- Oppdater manifest.webmanifest med start_url: "." og scope: "."
- navigateFallback uten ledende skråstrek
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Legger til Release Process-seksjon i CLAUDE.md med:
- Steg-for-steg for å lage ny utgivelse
- Bygging av Android APK-er og PWA-tarball
- fj release create og fj release asset create syntaks
- Oppdatert Distribution-seksjon med PWA-tarball
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Leaflet vendora:
- Fjerna CDN <link> for Leaflet CSS (allereie bundla via npm-import)
- Kartmarkør-ikon brukar bundla bilete i staden for unpkg URL-ar
- CSP stramma: unpkg ikkje lenger naudsynt i style-src/img-src
Slett buffer:
- «Slett lagra data»-knapp i om-dialogen
- Slettar localStorage, IndexedDB og tenestararbeidar-bufferar
- Lokalisert til en/nb/nn
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Legg til Screenshots-seksjon i CLAUDE.md med:
- Emulatoroppsett (AVD, headless start, fake GPS)
- Maestro v2.3.0 for repeterbare skjermbiletesekvensar
- Fastlane-mappestiar for alle tre språk
- Liste over gjeldande skjermbilete
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Nye skjermbilete frå emulator (Bergen sentrum):
- Kartvisning, valt tilfluktsrom, kompass med nordindikator,
sivilforsvarsinfo, og ny om-side med personvernerklæring
README oppdatert:
- Femte skjermbilete (om-side) lagt til
- Nordindikator og tilgjengelegheit nemnde i funksjonslista
- Datakjelde retta: DSB, distribuert via Geonorge
- Sikkerheitsavsnittet utfylt med CSP, 24t GPS-utløp, User-Agent
- Personvernavsnittet utvida
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Geonorge er distribusjonsplattforma, men dataeigar er DSB
(Direktoratet for samfunnstryggleik og beredskap). Oppdatert
om-side og personverntekst i alle tre språk (en/nb/nn) for
både Android og PWA.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
Tilgjengelegheit (Android + PWA):
- Semantiske landemerke (header, main, aside, role=dialog)
- aria-live-regionar for statusoppdateringar og lasteoverlegg
- Fokusindikatorar (:focus-visible) og prefers-reduced-motion
- Auka trykkmål til 48dp (infoknapp, oppdater, del, widget)
- contentDescription på kart, kompass og framdriftsindikator
- aria-current og role=listitem på tilfluktsromliste
- Fokusfangst og fokusgjenoppretting i lasteoverlegg
- Ikkje-farge-indikator (▶) for valt tilfluktsrom
- Dynamisk lang-attributt basert på oppdaga språk
- Lokaliserte aria-label (en/nb/nn)
Nordindikator:
- DirectionArrowView teiknar diskret «N»-markør på omkrinsen
- Roterer uavhengig av hovudpila for kompasskalibrering
- Berre på stor kompassvisning, ikkje minipila
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fjern dependency metadata frå APK-signeringsblokka (dependenciesInfo)
for F-Droid-kompatibilitet
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fdroidserver parser build.gradle.kts med regex for å finne versionCode
og versionName. Den dynamiske Properties-lastingen fra version.properties
ga "Couldn't find any version information". Erstatt med literale verdier
som fdroidserver kan lese.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
F-Droid krever at short_description.txt ikke slutter med punktum.
Erstatt to setninger med én sammenhengende frase med tankestrek.
Legg til 512x512 icon.png generert fra appens adaptive ikon-vektorer.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Passord og keystoresti var hardkodet i build.gradle.kts og synlig i
det offentlige repoet. Flyttet til keystore.properties som er
gitignorert. Bygget hopper over signering om filen mangler, slik at
F-Droid kan bygge og signere med sin egen nøkkel.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Splitt LocationProvider, ShelterWidgetProvider og WidgetUpdateWorker i
to varianter: standard (med Play Services for bedre GPS) og fdroid
(kun AOSP LocationManager). Play Services-avhengigheten er nå begrenset
til standardImplementation.
Begge varianter bygger og har identisk funksjonalitet — fdroid-varianten
mangler bare FusedLocationProviderClient som en ekstra lokasjonskilde.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Erstatt grove estimater med reelle bidragstall fra GitHub, OpenHub og
prosjektsider. Legg til kildelenker for ~20 prosjekter, Mermaid-diagram,
og seksjon med interessante detaljer (SQLite med ~4 utviklere, Leaflet
fra Ukraina). Legg til Forgejo/Gitea og GitHub som manglende lag.
Oppdatert totalestimat: ~119 000 mennesker.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
README-en hadde ein del nynorskformer (eit, dei, sjå, peikar, lagrast,
osv.) blanda inn i det som elles var bokmål. Retta til konsekvent
bokmål gjennom heile dokumentet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Legg til skjermbilete frå appen i toppen av README, ei «Slik fungerer
appen»-seksjon som forklarar kart, kompass og sivilforsvarsinfo, og
lenkjer til personvernerklæring og Standing on Shoulders-dokument.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Estimerer at ~116 000 personar har bidrege til verktøya, biblioteka,
datakjeldene og infrastrukturen som gjer det mogleg å byggje denne appen.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Automatiserte skjermbilete for alle tre språk (en-US, nb-NO, nn-NO)
med Maestro-flyt. Fire bilete per språk: kartvisning, valt tilfluktsrom,
kompassvisning og sivilforsvarsinfo. GPS-posisjon er sett til Bergen
sentrum (Torgallmenningen).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Når tilfluktsromdata er lasta men GPS-posisjon manglar, viser
botnaka no «Ventar på GPS…» i staden for å vera tom. Posisjonsfiks
erstattar ventestatusen automatisk når han kjem.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>