medium complexity extracted Activity Registration Confidence: 100%
2
Components
18
Shared
0
User Stories
Yes
Analyzed

Description

Calendar Sync enables peer mentors to connect their device calendar (iOS Calendar / Google Calendar) and sync scheduled activities and events bidirectionally. Confirmed events in the app can be pushed to the device calendar, and calendar events matching activity types can be imported as pre-filled activity drafts, reducing double-entry. The feature handles calendar permission requests gracefully with clear rationale messaging and respects the user's choice to decline without degrading core functionality. Sync operates in the background when the app is active.

Sources & reasoning

HLF explicitly named calendar synchronization alongside push notifications as part of their follow-up improvement plan (line 116). The phase matrix places this in Fase 2 (v1.0) alongside push and BankID, consistent with the "should have" classification.

  • Oppfølging av likepersoner: 40 % var ikke fornøyd med oppfølgingen i spørreundersøkelse. Scenariobaserte push-meldinger og kalendersynkronisering.

Analysis

Business Value

HLF specifically identified follow-up of peer mentors as a major gap, with 40% dissatisfied in a survey, and cited calendar synchronization as part of the solution alongside push notifications. Calendar sync reduces the manual overhead of tracking scheduled activities and lowers the probability that a completed activity goes unlogged because the peer mentor forgot to open the app. For coordinators managing multiple peer mentors, calendar visibility into scheduled activities improves oversight without requiring additional check-ins. The feature also supports the goal of integrating Meander into the daily workflow of volunteers rather than being a separate reporting burden.

Implementation Notes

Use the device_calendar Flutter plugin for cross-platform calendar access on iOS and Android. CalendarPermissionHandler wraps the permission request lifecycle using permission_handler with rationale dialogs that meet WCAG cognitive accessibility requirements. CalendarSyncService runs as a background isolate using Flutter's compute() for sync operations to avoid blocking the UI thread. Calendar events are matched to activity types by title heuristics with manual override. OAuth scopes for Google Calendar are requested lazily - only when the user enables the feature. Sync state is stored in Drift to survive restarts.

Quality Assurance

Peer Mentor (primary) · Coordinator (same flow)
1
Scenarios
6
UAT Steps
20
A11y Annotations
0
Role Boundaries
Peer Mentor

Peer Mentor

Quick UAT

  1. Åpne appen og naviger til Innstillinger → Kalendersynkronisering.
  2. Trykk «Aktiver kalendersynkronisering» og les begrunnelsesmeldingen som vises før systemdialogen.
  3. Gi kalendertilgang når OS-tillatelsesdialogen vises.
  4. Bekreft at statusen viser «Kalender tilkoblet» og at synkronisering er aktiv.
  5. Opprett og bekreft en aktivitet i appen. Åpne enhetens kalender-app og bekreft at aktiviteten vises som en hendelse der.
  6. Opprett en kalenderoppføring på enheten som matcher en kjent aktivitetstype. Gå tilbake til appen og bekreft at et forhåndsutfylt aktivitetsutkast vises under Mine aktiviteter.

Quick UAT — Accessibility

  1. Åpne appen og naviger til Innstillinger → Kalendersynkronisering.
    • Screen reader «Innstillinger» annonseres som navigasjonsmål; TalkBack leser overskriften «Kalendersynkronisering» ved ankomst.
    • Keyboard / focus Tab-rekkefølge: bunnnav → Innstillinger-element → Kalendersynkronisering-rad; Enter aktiverer.
    • Focus visibility Synlig fokusring på Innstillinger-ikonet og på Kalendersynkronisering-raden.
  2. Trykk «Aktiver kalendersynkronisering» og les begrunnelsesmeldingen som vises før systemdialogen.
    • Screen reader Begrunnelsesdialog annonseres umiddelbart; tittel og brødtekst leses i rekkefølge.
    • Focus visibility Fokus flyttes automatisk til dialogen; «Fortsett»-knapp er tydelig merket.
    • Touch target «Aktiver»-knapp ≥ 24×24 CSS px.
    • Contrast 4.5:1 for brødtekst i begrunnelsesdialog; status ikke formidlet kun med farge.
  3. Gi kalendertilgang når OS-tillatelsesdialogen vises.
    • Screen reader Systemdialog leses av OS-skjermleser; «Tillat»-knapp annonseres med aksjonsbeskrivelse.
    • Touch target «Tillat»- og «Ikke tillat»-knapper følger OS minimum touch-target.
    • Zoom Dialoginnhold lesbart ved 200 % zoom uten overlapping.
  4. Bekreft at statusen viser «Kalender tilkoblet» og at synkronisering er aktiv.
    • Screen reader TalkBack/VoiceOver leser «Kalender tilkoblet. Synkronisering aktiv.» uten at brukeren må utforske manuelt.
    • Live region 'Kalender tilkoblet. Synkronisering er nå aktiv.'
    • Contrast Statustekst og ikon oppnår 4.5:1; aktiv-tilstand ikke formidlet kun med grønn farge.
  5. Opprett og bekreft en aktivitet i appen. Åpne enhetens kalender-app og bekreft at aktiviteten vises som en hendelse der.
    • Screen reader Bekreftelsesmelding etter lagring annonseres via live region; ingen separat a11y-sjekk nødvendig i ekstern kalender-app.
    • Focus visibility Fokus returnerer til aktivitetslisten etter lagring.
    • Live region 'Aktivitet lagret og lagt til i kalender.'
  6. Opprett en kalenderoppføring på enheten som matcher en kjent aktivitetstype. Gå tilbake til appen og bekreft at et forhåndsutfylt aktivitetsutkast vises under Mine aktiviteter.
    • Screen reader Nytt utkastkort annonseres av skjermleser; felter som er forhåndsutfylt leses med aktuelle verdier.
    • Focus visibility Fokus flyttes til det nye utkastkortet slik at brukeren oppdager det umiddelbart.
    • Live region 'Nytt aktivitetsutkast importert fra kalender.'
    • Zoom Utkastkort er fullt lesbart og operabelt ved 200 % tekstzoom.

Expected End State

Kalendersynkronisering er aktiv; bekreftede aktiviteter fra appen er synlige i enhetens kalender, og kalenderoppføringer som matcher aktivitetstyper er importert som redigerbare utkast i Mine aktiviteter.

User Stories

No user stories have been generated for this feature yet.