Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
2c23dd1
build(android): add gradle flags from Flutter migrator
Zeroupper Jul 10, 2026
6dfbc63
fix(android): add ic_launcher drawable for local notifications
Zeroupper Jul 10, 2026
17caf1a
fix(view_models): log and ignore measurement stream errors
Zeroupper Jul 10, 2026
f34d5b1
fix(profile): read study id from study instead of deployment
Zeroupper Jul 10, 2026
9817f0c
feat(ui): add design 2.0 app shell, home page, and tab routing
Zeroupper Jul 10, 2026
0783ad8
refactor(ui): unify tab page titles and remove scoreboard card
Zeroupper Jul 10, 2026
76dbf52
fix(ui): push full-screen pages on the root navigator
Zeroupper Jul 10, 2026
20e769f
feat(ui): redesign home cards and add status and surveys sections
Zeroupper Jul 16, 2026
28f2ee2
build: bump CAMS packages and add share_plus and shimmer
Zeroupper Jul 27, 2026
c7b2ceb
feat(ui): redesign profile and study details pages
Zeroupper Jul 27, 2026
ffb175f
feat(home): show backend messages in the feeds section
Zeroupper Jul 27, 2026
11cdb6e
fix(invitations): sort invitations and log them for debugging
Zeroupper Jul 27, 2026
d3a475a
Merge remote-tracking branch 'origin/test' into feat/design-2.0
Zeroupper Jul 27, 2026
31e98a4
feat(messages): notify the user about new announcements
Zeroupper Jul 28, 2026
39a3ca9
fix(invitations): identify invitations by their deployment id
Zeroupper Jul 28, 2026
c1a6390
refactor(consent): gate informed consent in the app shell
Zeroupper Jul 28, 2026
2f299db
refactor(ui): navigate to the profile page with go_router
Zeroupper Jul 28, 2026
8345842
refactor: group core and helper files and trim app logging
Zeroupper Jul 28, 2026
4430a55
fix: remove some comments
Zeroupper Jul 28, 2026
7150d19
fix: dart format
Zeroupper Jul 28, 2026
6db9921
refactor(statistics): rename the data visualization page and view model
Zeroupper Jul 28, 2026
77ef2d9
feat(statistics): rebuild the statistics charts and their selection
Zeroupper Jul 28, 2026
930619a
feat(statistics): back the demo charts with real CAMS measurements
Zeroupper Jul 28, 2026
610149d
fix: make consistent chart styling
Zeroupper Jul 28, 2026
51b5fad
fix: dart format
Zeroupper Jul 28, 2026
65a015a
refactor(ui): modernize the announcement details page
Zeroupper Jul 29, 2026
65acd30
refactor(tasks): modernize the task list design
Zeroupper Jul 29, 2026
bfc75d2
refactor(connections): modernize the connections page
Zeroupper Jul 29, 2026
2c4bb1f
fix(statistics): let the task completion chart clear its selection
Zeroupper Jul 29, 2026
204c78c
wip: restore prior task work (connectivity, nav swap, resources move,…
Zeroupper Aug 5, 2026
702868c
refactor(theme): migrate typography to Material TextTheme roles, fold…
Zeroupper Aug 5, 2026
265f8b6
refactor(ui): standardize buttons (themed FilledButton + pill CTA sty…
Zeroupper Aug 5, 2026
9367137
refactor(theme): migrate off CarpColors to standard ColorScheme/Color…
Zeroupper Aug 5, 2026
6424eef
refactor(theme): drop all remaining CarpColors usage; bump theme/rese…
Zeroupper Aug 5, 2026
cf9152e
fix: dart format
Zeroupper Aug 5, 2026
5fa2bdb
refactor(stats): remove demo chart data fallback
Zeroupper Aug 6, 2026
64c219e
feat(ui): redesign task cards, device connection & instruction flows
Zeroupper Aug 6, 2026
08c6ec5
fix: resolve version issue
Zeroupper Aug 6, 2026
454f8c0
fix: resolve version conflict
Zeroupper Aug 10, 2026
0be2f68
Darken home shimmer skeleton colors
Zeroupper Aug 12, 2026
cf5aafd
merge: integrate 4.4.1 hotfixes from test into design-2.0
Zeroupper Aug 18, 2026
339979f
style: dart format the merged connection page
Zeroupper Aug 18, 2026
9db3f95
Merge pull request #663 from carp-dk/merge/test-into-design-2.0
Zeroupper Aug 19, 2026
a7e020d
feat(data): backfill data cards from CAWS and fix data visibility
Zeroupper Aug 26, 2026
2a47c3d
style: trim all doc comments to 1-2 lines
Zeroupper Aug 26, 2026
e6a5a44
refactor: replace per-card week-range getters with one weekRangeLabel…
Zeroupper Aug 26, 2026
ec5647c
refactor: use Flutter's DateUtils.isSameDay instead of own helper
Zeroupper Aug 26, 2026
531ecc8
style: dart format
Zeroupper Aug 27, 2026
b3943e5
Merge pull request #652 from carp-dk/feat/design-2.0
Zeroupper Aug 27, 2026
b9300b8
merge: bring 4.4.2 release from master back into test
Zeroupper Aug 27, 2026
9c02b1a
chore: bump to 4.4.3 for App Store resubmission
Zeroupper Aug 27, 2026
57bd5b9
feat(consent): resolve consent as state, and recover from a failed up…
Zeroupper Aug 31, 2026
285bb0c
refactor(consent): gate consent in the router's redirect
Zeroupper Aug 31, 2026
deadeba
feat(sensing): let the user turn on background sensing
Zeroupper Aug 31, 2026
ff5ca4b
fix: naming
Zeroupper Aug 31, 2026
d329b26
chore: research_package 3.2.0 and carp_themes_package 0.2.1
Zeroupper Sep 1, 2026
d113dea
fix(test): stub getInformedConsent, so the stub works without the loc…
Zeroupper Sep 1, 2026
87c831c
fix(sensing): stop the service when the exemption is revoked, and add…
Zeroupper Sep 1, 2026
d39dc75
fix(sensing): stop the foreground service when leaving the study
Zeroupper Sep 1, 2026
941259f
fix(consent): let RP own the no-pop, and cover declining as a redirec…
Zeroupper Sep 1, 2026
d66277a
fix(profile): confirmation dialogs name the action instead of asking …
Zeroupper Sep 1, 2026
b37376f
style: dart format
Zeroupper Sep 1, 2026
a885fee
feat(sensing): background sensing on iOS via the Always location perm…
Zeroupper Sep 1, 2026
4e8551e
fix: actually hand the informed consent to the participant (#678)
Zeroupper Sep 1, 2026
41dbfa6
fix: save the consent to Downloads/Files instead of sharing it
Zeroupper Sep 1, 2026
51cf85e
feat: download the signed informed consent as a PDF (#678)
Zeroupper Sep 2, 2026
5de65af
fix: dart format
Zeroupper Sep 2, 2026
1c4e041
Merge pull request #671 from carp-dk/feat/consent-status-and-error-ha…
Zeroupper Sep 2, 2026
965b0cd
Merge branch 'test' into feat/background-sensing
Zeroupper Sep 2, 2026
15c0a1e
Merge pull request #672 from carp-dk/feat/background-sensing
Zeroupper Sep 2, 2026
5c896ad
merge: bring test into hotfixes, bump to 5.0.0 and justify specialUse…
Zeroupper Sep 2, 2026
6598b2a
Merge pull request #680 from carp-dk/feat/ios-background-sensing
Zeroupper Sep 2, 2026
2b92f7a
Merge branch 'test' into fix/678-download-informed-consent
Zeroupper Sep 2, 2026
74b881d
Merge pull request #681 from carp-dk/fix/678-download-informed-consent
Zeroupper Sep 2, 2026
62fb091
Merge remote-tracking branch 'origin/test' into hotfixes
Zeroupper Sep 2, 2026
267f29e
fix(android): run the sampling service as a location FGS, not specialUse
Zeroupper Sep 2, 2026
db6ad99
Merge pull request #679 from carp-dk/hotfixes
Zeroupper Sep 2, 2026
26be557
fix(android): drop the media permissions open_filex pulls in
Zeroupper Sep 2, 2026
554ea44
Merge pull request #683 from carp-dk/hotfixes
Zeroupper Sep 2, 2026
447788d
fix: photo preview crash and background sensing on Android 14+
Zeroupper Sep 3, 2026
ca49330
chore(sensing): drop the Android-only askForPermissions flag
Zeroupper Sep 4, 2026
54c474e
fix(ios): explain background location setup when permission is denied
Zeroupper Sep 10, 2026
098fa96
chore: update CARP sensing, context and connectivity packages
Zeroupper Sep 10, 2026
14f1678
Merge pull request #685 from carp-dk/fix/photo-preview-and-fgs-location
Zeroupper Sep 11, 2026
4770f18
fix: disable startup permission prompts for 5.0.1 testing
Zeroupper Sep 11, 2026
780fced
Merge pull request #686 from carp-dk/test-5.0.1-permission-fixes
Zeroupper Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 4.4.3

* version bump for App Store resubmission; 4.4.1 was already approved and its
release train closed

## 4.4.2

* removed unused Health Connect permissions to comply with the Google Play
Expand Down
36 changes: 34 additions & 2 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<!-- Used by the background service (flutter_background) to keep sampling
running while the app is not in the foreground. The service itself is
declared in the <application> tag below. -->
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

<!-- The following permissions are used in the Context Package -->

<!--Location Permissions-->
Expand All @@ -61,14 +66,27 @@
android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"
android:maxSdkVersion="28" />

<!-- The following permissions are used in the flutter_local_notifications Package -->
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<!-- The following permissions are used in the flutter_local_notifications Package.
Reminders are scheduled inexactly, so SCHEDULE_EXACT_ALARM is not needed. -->
<uses-permission android:name="android.permission.VIBRATE" />

<!-- The following permissions are used in the Media Package -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />

<!-- open_filex declares the media permissions so it can open files from the
gallery. We only open a PDF we wrote to our own cache, so drop them -
Play requires a photo/video access declaration for apps that keep them. -->
<uses-permission
android:name="android.permission.READ_MEDIA_IMAGES"
tools:node="remove" />
<uses-permission
android:name="android.permission.READ_MEDIA_VIDEO"
tools:node="remove" />
<uses-permission
android:name="android.permission.READ_MEDIA_AUDIO"
tools:node="remove" />

<!-- Permissions for Health Connect API -->
<!-- Activity (ACTIVITY_RECOGNITION declared above) -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
Expand All @@ -79,6 +97,9 @@
<uses-permission android:name="android.permission.health.READ_HEART_RATE" />
<uses-permission android:name="android.permission.health.READ_SKIN_TEMPERATURE" />

<!-- Sleep - one permission covers sessions and all stages -->
<uses-permission android:name="android.permission.health.READ_SLEEP" />

<!-- Historical data (older than 30 days since permission granted) -->
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_HISTORY" />

Expand Down Expand Up @@ -205,6 +226,17 @@
<service android:name="dk.cachet.activity_recognition_flutter.activity.ActivityRecognizedService"
android:exported="true"/> -->

<!-- The foreground service hosting the study sampling pipeline. The
flutter_background plugin does not declare it, so it is declared
here with its foreground service type.
"location": continuous location updates are what keep sampling
alive - the same anchor background sensing uses on iOS - and the
type is uncapped, unlike dataSync's 6 hours per day. -->
<service
android:name="de.julianassmann.flutter_background.IsolateHolderService"
android:exported="false"
android:foregroundServiceType="location" />

<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
Expand Down
Binary file added assets/icons/movesense_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/instructions/movesense_instructions.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
53 changes: 41 additions & 12 deletions assets/lang/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,23 @@
"settings": "Indstillinger",
"get": "Få",
"app_home.nav_bar_item.tasks": "Opgaver",
"app_home.nav_bar_item.about": "Om",
"app_home.nav_bar_item.data": "Data",
"app_home.nav_bar_item.devices": "Enheder",
"app_home.nav_bar_item.statistics": "Statistik",
"app_home.nav_bar_item.connections": "Forbindelser",
"app_home.nav_bar_item.home": "Hjem",
"invitation.invitations": "Invitationer",
"invitation.subtitle": "Her kan du finde alle de invitationer til studier, du er blevet inviteret til.",
"invitation.invited_to_study": "Invitation til studie",
"invitation.accept_invite": "Acceptér",
"invitation.message_title": "Studiets formål",
"invitation.your_role": "Din rolle",
"invitation.device_role": "Denne enhed",
"invitation.no_description": "Der er ikke angivet nogen beskrivelse for dette studie.",
"login.failed_login": "Det ser ud til at du ikke har adgang til dette studie. Kontakt din forsker for at få adgang.",
"pages.location.info": "Denne app indsamler lokaliseringsdata.\n\nVi beder dig om at have lokalitet slået til på din telefon sådan at sporing at lokalitet 'Altid' er tilladt, da lokalitet bruges til at holde appen kørende i baggrunden. Lokalitet bruges til at sikre, for eksempel, at udregne hvor stor en del af tiden du opholder dig hjemme.",
"pages.task_list.title": "Opgaver",
"pages.task_list.pending": "Igangværende",
"pages.task_list.completed": "Afsluttet",
"pages.task_list.start": "Start",
"pages.task_list.task.time_to_complete": "min. at fuldføre",
"pages.task_list.task.estimated_time": "estimeret tid:",
"pages.task_list.task.auto_complete": "Udføres automatisk",
Expand Down Expand Up @@ -48,11 +53,13 @@
"cards.scoreboard.tasks": "Antal opgaver udført",
"cards.scoreboard.tasks-short": "Opgaver",
"cards.measures.title": "MÅLINGER",
"cards.survey.title": "SPØRGESKEMAER",
"cards.survey.title": "Besvarede spørgeskemaer",
"cards.task_completion.title": "Opgaver gennemført de sidste 14 dage",
"cards.task_completion.title_on": "Opgaver gennemført den",
"cards.audio.title": "LYDOPTAGELSER",
"cards.video.title": "VIDEOS",
"cards.image.title": "FOTO",
"cards.study_progress.title": "STATUS PÅ STUDIET",
"cards.study_progress.title": "Opgaver",
"cards.study_progress.pending": "Igangværende",
"cards.study_progress.completed": "Afsluttet",
"cards.study_progress.expired": "Udløbet",
Expand All @@ -68,12 +75,24 @@
"cards.distance.title": "Afstand",
"cards.distance.distance": "km tilbagelagt",
"cards.distance.average": "Gennemsnit",
"cards.sleep.title": "Søvn",
"cards.sleep.asleep": "sovet",
"cards.sleep.average": "gennemsnit pr. nat",
"cards.sleep.deep": "dyb",
"cards.sleep.light": "let",
"cards.sleep.rem": "REM",
"cards.steps.title": "Antal Skridt",
"cards.steps.steps": "skridt",
"cards.steps.per_week": "skridt/uge",
"cards.heartrate.title": "Hjerterytme",
"cards.heartrate.polar.title": "Hjerterytme (Polar)",
"cards.heartrate.movesense.title": "Hjerterytme (Movesense)",
"cards.heartrate.bpm": "SPM",
"cards.heartrate.heartrate": "Hjerterytme",
"cards.heartrate.range": "Målinger",
"cards.heartrate.average": "Gennemsnit",
"cards.heartrate.day": "Dag",
"cards.heartrate.week": "Uge",
"pages.audio_task.play": "Tryk på knappen nedenfor, når du er klar.",
"pages.audio_task.recording": "Optager...",
"pages.audio_task.recording_completed": "Optagelsen er færdig. Tryk på den grønne knap for at gemme denne optagelse.\n\nHvis du vil gentage optagelsen, tryk på knappen til venstre.",
Expand All @@ -97,9 +116,14 @@
"pages.profile.device_role": "Engedsrolle",
"pages.profile.contact": "Kontakt forsker",
"pages.profile.privacy": "Fortrolighedspolitik",
"pages.profile.download_consent": "Download informeret samtykke",
"pages.profile.download_consent.saved": "Informeret samtykke gemt.",
"pages.profile.download_consent.open": "Åbn",
"pages.profile.download_consent.unavailable": "Intet underskrevet samtykke tilgængeligt.",
"pages.profile.study_details": "Studiedetaljer",
"pages.profile.study_website": "Hjemmeside for studiet",
"pages.profile.leave_study": "Forlad studie",
"pages.profile.log_out": "Forlad studie & Log ud",
"pages.profile.log_out": "Log ud",
"pages.profile.log_out.confirmation": "Du er ved at forlade dette studie og logge af. Operativsystemet vil åbne en browser for at logge dig ud. Er du sikker?",
"pages.profile.leave_study.confirmation": "Du er ved at forlade studiet. Du vil ikke længere deltage i dette studie. Er du sikker?",
"announcements": "Annonceringer",
Expand Down Expand Up @@ -129,6 +153,7 @@
"pages.devices.type.health.access_denied.message": "Der blev ikke givet adgang. For at tillade det skal du gå til: Indstillinger → Apps → CARP Studies → Tilladelser → Sundhed, fitness og wellness → Tillad alle. Træk derefter ned på enhedsskærmen for at opdatere.",
"pages.devices.location_permission.title": "Tilladelser påkrævet",
"pages.devices.location_permission.message": "Tilslutning til Bluetooth-enheder i nærheden kræver tilladelserne Enheder i nærheden og Placering. For at tillade dem: gå til Indstillinger → Apps → CARP Studies → Tilladelser, giv de manglende tilladelser, og prøv at forbinde igen.",
"pages.devices.background_permission.message": "Baggrundsmåling kræver, at placeringsadgang er sat til Altid. Gå til: Indstillinger → Apps → CARP Studies → Lokalitet, vælg Altid, og vend tilbage til appen. Træk ned på enhedsskærmen for at opdatere.",
"pages.devices.type.health.instructions.data.steps": "Skridttælling",
"pages.devices.type.health.instructions.data.heart_rate": "Puls",
"pages.devices.type.health.instructions.data.exercise": "Træningssessioner",
Expand All @@ -138,10 +163,10 @@
"pages.ic.need_accept": "Du skal acceptere denne informerede samtykke for at kunne deltage i dette studie.",
"pages.ic.go_to_ic": "Tilbage til samtykke",
"pages.devices.title": "Enheder",
"pages.devices.message": "Her kan du se hvilke enheder og online tjenester som anvendes i dette studie.",
"pages.devices.message": "Her kan du forbinde de tjenester og enheder, som dette studie bruger til at indsamle data.",
"pages.devices.phone.title": "Telefon",
"pages.devices.devices.title": "Enheder",
"pages.devices.services.title": "Ydelser",
"pages.devices.services.title": "Tjenester",
"pages.devices.type.unknown.name": "Ukendt enhed",
"pages.devices.type.smartphone.name": "Mobiltelefon",
"pages.devices.type.esense.name": "eSense",
Expand All @@ -151,6 +176,7 @@
"pages.devices.type.air_quality.name": "Luftkvalitet",
"pages.devices.type.location.name": "Lokalisering",
"pages.devices.type.health.name": "Sundhed",
"pages.devices.type.background.name": "Baggrundsindsamling",
"pages.devices.type.smartphone.description": "Denne telefon",
"pages.devices.type.esense.description": "eSense ear plug",
"pages.devices.type.polar.description": "Polar hjertemonitor",
Expand All @@ -159,9 +185,10 @@
"pages.devices.type.air_quality.description": "Luftkvalitetstjeneste",
"pages.devices.type.location.description": "Lokaliseringstjeneste",
"pages.devices.type.health.description": "Sundhedstjeneste",
"pages.devices.type.background.description": "Fortsætter med at indsamle data, mens appen kører i baggrunden",
"pages.devices.type.smartphone.instructions": "Denne telefon ",
"pages.devices.type.esense.instructions": "Du skal forbinde den VENSTRE øreprop til dette studie. Tænd øreprobben ved at trykke knappen ned indtil den blinker rød. Nu skulle du kunne vælge den venstre øreprop i listen.\n\nHvis du vil anvende eSense ørepropperne til lyd og telefoni, skal du forbinde den HØJRE øreprop til telefonen. Dette gøres gennem telefonens Bluetooth INDSTILLINGER. For at parre ørepropperne til telefonen skal du trykke knappen på den HØJRE øreprop ned indtil den begyder at blinke rød og blå. Så er ørepropperne i parringstilstand. Når ørepropperne er forbundet til telefonen, vil de blinke blå.",
"pages.devices.type.polar.instructions": "Sørg for at din Polar enhed er tændt. Polar H10 pulsmåleren tændes automatisk når du tager den på. Polar Verity Sense armbåndet tændes ved at trykke den blanke knap på siden ind indtil LED dioderne lyser.\n\nFor a parre Polar enheden med telefonen skal du åbne instillingerne på telefonen og trykke på Polar enheden.",
"pages.devices.type.polar.instructions": "Sørg for at din Polar enhed er tændt. Polar H10 pulsmåleren tændes automatisk når du tager den på. Polar Verity Sense armbåndet tændes ved at trykke den blanke knap på siden ind indtil LED dioderne lyser.\n\nFor a parre Polar enheden med telefonen skal du åbne instillingerne på telefonen og trykke på Polar enheden. Hvis du ikke har et armbånd, kan du bære sensoren direkte på underarmen, lige under eller over albuen, med sensoren presset fast mod huden.",
"pages.devices.type.movesense.instructions": "Indsæt Movesense enheden i bæltet og tag det på omkring dit bryst. Movesense enheden tænder automatisk og der er en lille LED som blinker rødt. Hvis enheden ikke blinker er det måske løbtet tør for strøm og du kan skifte batteriet på bagsiden.",
"pages.devices.status.connecting": "Forbinder",
"pages.devices.status.connected": "Forbundet",
Expand All @@ -180,7 +207,7 @@
"pages.devices.connection.enable_bluetooth.message2": "Hvis Bluetooth allerede er slået til, skal du sørge for, at du tillader nye forbindelser ved at klikke på indstillingen afbildet på billedet nedenfor i indstillinger.",
"pages.devices.connection.enable_bluetooth.message3": "Klik på 'Indstillinger' for at åbne Bluetooth-indstillingerne.",
"pages.devices.connection.step.how_to.title": "Sådan forbindes",
"pages.devices.connection.step.start.title": "Forbind til enhed",
"pages.devices.connection.step.start.title": "Forbind til",
"pages.devices.connection.step.start.1": "Vælg den",
"pages.devices.connection.step.start.2": "enhed, du vil forbinde til, og tryk 'Næste'.",
"pages.devices.connection.step.start.3": "Hvis enheden ikke er på listen, sørg for at den er opladet og tændt. Læse mere under 'Instruktioner'.",
Expand Down Expand Up @@ -223,7 +250,9 @@
"tasks.participant_data.phone_number.phone_number": "Telefonnummer",
"tasks.participant_data.review.title": "Gennemse",
"pages.home.setup_failed": "Studiet kunne ikke konfigureres. Tjek din internetforbindelse og prøv igen.",
"pages.home.retry": "Prøv igen",
"pages.devices.connection.step.scan.searching": "Søger efter enheder i nærheden…\nSørg for, at din enhed er tændt og inden for rækkevidde.",
"pages.devices.connection.step.scan.show_all": "Kan du ikke se din enhed? Vis alle",
"pages.devices.connection.step.scan.filtered": "Vis kun matchende enheder"
}
"pages.devices.connection.step.scan.filtered": "Vis kun matchende enheder",
"pages.informed_consent.upload_failed": "Dit samtykke kunne ikke gemmes. Tjek din internetforbindelse, og prøv igen."
}
Loading
Loading