1. Indholdsfortegnelse

2. Indledning

Se GM Arkitektur og design for en overordnet arkitekturbeskrivelse.

2.1. Formål

Formålet med dette dokument er at beskrive design og arkitektur af app'en

3. Android app arkitektur

Android app'en er lavet ud fra Google Jetpack Architecture Components guidelines, som er deres anbefalede måde at lave en app på.

Strukturen kan ses herunder:

:app
:build-logic
    :convention
:core
    :data
    :database
    :datastore
    :designsystem
    :model
    :network
    :shared
:feature
    :biometricdialog
    :careplanactivities
    :knowledge
    :more
    :overview
    :useradmission
:TestAssertions


3.1. :app

Indeholder MainActivity og roden af navigationen. Den inkluderer feature modulerne, for at binde deres funktionalitet sammen.

3.2. :build-logic

Er beskrevet på https://www.nspop.dk/pages/viewpage.action?pageId=121373668#GravidiDK(Android)Guidetiludviklere-BuildLogicmodulet


3.3. :core

Indeholder appens "backend", business logic og udstiller modulerne til brug for andre moduler

3.3.1.  :authentication

The core:authentication module provides authentication functionality for the project. It acts as the bridge between the app’s authentication UI/logic and the underlying secure storage and identity management mechanisms. Its main responsibilities include:

  • Managing user authentication flows using the TIM (Trifork Identity Management) library.
  • Handling storage and retrieval of authentication tokens.
    • The refresh token is stored as an encrypted value on the device and is used to get a new access token. 
  • Integrating with Android Keystore and device biometrics to securely store keys.
    • The key for encrypting and decrypting the refresh token is securely stored in Android Keystore. The access to the key is provided through device authentication (biometrics, pin, pattern etc). 
    • Hence, if a user does not have device authentication enabled, the refresh token cannot be stored on the device, and the user is forced to login with MitID for each session.
  • Providing an abstraction (IAuthController) for authentication operations, such as login, logout, token retrieval, and user deletion.
  • Adapting the TIM library’s storage interface to use device-based secure storage instead of a remote key service.

3.3.2. :data

Repositories, som samler data fra :api og :database

3.3.3. :database

Room database til at holde artikler 

3.3.4. :datastore

Holder på brugerens præferencer (terminsdato, fødselsdato, checklister, sikkerhed osv)

3.3.5. :designsystem

Et fælles sted hvor at UI elementer fra projektets figma er samlet. Optimalt set vil alle elementer i appens design være defineret herinde, således at appen bliver mest ensartet. Dette modul bliver brugt af alle feature moduler, så alle UI moduler bør bruge de samme composables.

3.3.6. :model

Domænespecifikke modeller, som bruges på tværs af moduler.

3.3.7. :network

Bruges til at kommunikerer eksternt til API og andre endpoints.

3.3.8. :shared

Delt logik, som bruges af flere moduler; F.eks. Result bruges på tværs af både :network og :data


3.4. :feature

Dette modul består af UI features, som kan vises til brugere

3.4.1. :authentication

Skærme og logik for flows omhandlede onboarding, login med MitID og enhedsautentificering. Nedenstående diagrammer dokumenter de forskellige variatoner af flowet for at logge ind med MitID og registrere sig i appen:

Man kan som anonym bruger vælge at benytte appen uden at logge ind med MitID. For disse brugere vil der ikke blive hentet graviditetsdata, så terminsdatoen skal indtastes manuelt. Brugeren kan beskytte sin app bag enhedsautentificering ved at aktivere dette i indstillinger i appen. 

3.4.2. :careplanactivites

Skærme omhandlende et graviditetsforløb

3.4.3. :knowledge

Vidensskærmen og alle dens undersider

3.4.4. :more

Indeholder indstillinger og "om" sektioner, som linker til privatlivspolitikken og diverse andre sider

3.4.5. :overview

Forsiden af appen; Overbliksiden

3.4.6. :useradmission

Bruges når brugeren har slået biometrisk login til


3.5. :TestAssertions

Har logik til at hjælpe med at teste mere effektivt - Dette modul bliver automatisk inkluderet når et modul bruger jacoco-pluginet


  • No labels