# infomaniak/android-calendar architecture

> Architecture diagram of the GitHub repository infomaniak/android-calendar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/infomaniak/android-calendar
- Repository: https://github.com/infomaniak/android-calendar

## Overview

This is an Android calendar app with reusable Jetpack Compose calendar components. Users enter through account onboarding or an authenticated calendar view, navigate month, week, day, or planning screens, and can inspect, create, or edit events. The sampled activity establishes the navigation entry point; the sync manager explicitly downloads a date range and then synchronizes through CalendarManager. The tree documents additional UI capabilities, but most screen-to-view-model and data wiring was not sampled, so those links are omitted.

Main entry points: [`app/src/main/java/com/infomaniak/calendar/ui/navigation/MainNavHost.kt`](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/navigation/MainNavHost.kt) (Navigation host), [`app/src/main/java/com/infomaniak/calendar/MainActivity.kt`](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/MainActivity.kt) (Main activity), [`CalendarComponents/Event/src/main/kotlin/com/infomaniak/calendar/components/event/EventItem.kt`](https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Event/src/main/kotlin/com/infomaniak/calendar/components/event/EventItem.kt) (Event display), [`app/src/main/java/com/infomaniak/calendar/ui/screen/month/MonthScreen.kt`](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/month/MonthScreen.kt) (Month screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App shell"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_navigation["Navigation host<br/>[MainNavHost.kt]"]
  node_drawer["Calendar drawer<br/>[CalendarDrawer.kt]"]
end

subgraph group_calendar_views["Calendar views"]
  node_month["Month screen<br/>[MonthScreen.kt]"]
  node_week["Week screen<br/>[WeekScreen.kt]"]
  node_day["Day screen<br/>[DayScreen.kt]"]
  node_three_day["Three-day screen<br/>[ThreeDayScreen.kt]"]
  node_planning["Planning screen<br/>[PlanningScreen.kt]"]
end

subgraph group_event_features["Event workflows"]
  node_detail_screen["Event detail screen"]
  node_detail_components["Event detail UI<br/>[EventDetail.kt]"]
  node_creation["Event creation"]
  node_editing["Event editing<br/>[EventEditScreen.kt]"]
end

subgraph group_shared_ui["Shared components"]
  node_calendar_components["Calendar components"]
  node_day_components["Day timeline<br/>[DayTimeline.kt]"]
  node_planning_components["Planning components<br/>[Planning.kt]"]
  node_event_components["Event display<br/>[EventItem.kt]"]
  node_foundation["Event and date models<br/>[EventUi.kt]"]
end

subgraph group_account_sync["Accounts and sync"]
  node_onboarding["Onboarding"]
  node_accounts["Account management"]
  node_sync["Event sync manager"]
end

node_user(("Calendar user"))
node_calendar_manager["Calendar manager"]

node_user -->|"opens app"| node_activity
node_activity -->|"hosts"| node_navigation
node_navigation -->|"routes"| node_month
node_navigation -->|"routes"| node_week
node_navigation -->|"routes"| node_day
node_navigation -->|"routes"| node_three_day
node_navigation -->|"routes"| node_planning
node_navigation -->|"routes"| node_onboarding
node_navigation -->|"routes"| node_detail_screen
node_navigation -->|"routes"| node_creation
node_navigation -->|"routes"| node_editing
node_month -->|"renders with"| node_calendar_components
node_week -->|"renders with"| node_calendar_components
node_day -->|"renders with"| node_day_components
node_planning -->|"renders with"| node_planning_components
node_day_components -->|"displays"| node_event_components
node_planning_components -->|"displays"| node_event_components
node_event_components -->|"uses models"| node_foundation
node_detail_screen -->|"renders with"| node_detail_components
node_activity -->|"observes errors"| node_sync
node_sync -->|"downloads and syncs"| node_calendar_manager
node_user -->|"manages accounts"| node_accounts
node_user -->|"selects calendars"| node_drawer

click node_activity "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/MainActivity.kt"
click node_navigation "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/navigation/MainNavHost.kt"
click node_month "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/month/MonthScreen.kt"
click node_week "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/week/WeekScreen.kt"
click node_day "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/day/DayScreen.kt"
click node_three_day "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/threeDays/ThreeDayScreen.kt"
click node_planning "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/planning/PlanningScreen.kt"
click node_calendar_components "https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Calendar/src/main/kotlin/com/infomaniak/calendar/components/calendar/component/ExpandableCalendar.kt"
click node_day_components "https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Day/src/main/kotlin/com/infomaniak/calendar/components/day/DayTimeline.kt"
click node_planning_components "https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Planning/src/main/kotlin/com/infomaniak/calendar/components/planning/Planning.kt"
click node_event_components "https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Event/src/main/kotlin/com/infomaniak/calendar/components/event/EventItem.kt"
click node_foundation "https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Foundation/src/main/kotlin/com/infomaniak/calendar/components/foundation/models/EventUi.kt"
click node_detail_screen "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/detail/EventDetailScreen.kt"
click node_detail_components "https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/detail/EventDetail.kt"
click node_creation "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/creation/EventCreationScreen.kt"
click node_editing "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/edit/EventEditScreen.kt"
click node_onboarding "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/onboarding/OnboardingScreen.kt"
click node_accounts "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/accounts/AccountsListScreen.kt"
click node_drawer "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/component/drawer/CalendarDrawer.kt"
click node_sync "https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/manager/SyncEventsManager.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_activity,node_navigation,node_drawer,node_user toneBlue
class node_month,node_week,node_day,node_three_day,node_planning toneAmber
class node_detail_screen,node_detail_components,node_creation,node_editing toneMint
class node_calendar_components,node_day_components,node_planning_components,node_event_components,node_foundation toneRose
class node_onboarding,node_accounts,node_sync,node_calendar_manager toneIndigo
```

## Components

### App shell

- [Main activity](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/MainActivity.kt): `app/src/main/java/com/infomaniak/calendar/MainActivity.kt`
- [Navigation host](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/navigation/MainNavHost.kt): `app/src/main/java/com/infomaniak/calendar/ui/navigation/MainNavHost.kt`
- [Calendar drawer](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/component/drawer/CalendarDrawer.kt): `app/src/main/java/com/infomaniak/calendar/ui/component/drawer/CalendarDrawer.kt`

### Calendar views

- [Month screen](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/month/MonthScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/month/MonthScreen.kt`
- [Week screen](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/week/WeekScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/week/WeekScreen.kt`
- [Day screen](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/day/DayScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/day/DayScreen.kt`
- [Three-day screen](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/threeDays/ThreeDayScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/threeDays/ThreeDayScreen.kt`
- [Planning screen](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/planning/PlanningScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/planning/PlanningScreen.kt`

### Event workflows

- [Event detail screen](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/detail/EventDetailScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/detail/EventDetailScreen.kt`
- [Event detail UI](https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/detail/EventDetail.kt): `CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/detail/EventDetail.kt`
- [Event creation](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/creation/EventCreationScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/creation/EventCreationScreen.kt`
- [Event editing](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/edit/EventEditScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/eventDetail/edit/EventEditScreen.kt`

### Shared components

- [Calendar components](https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Calendar/src/main/kotlin/com/infomaniak/calendar/components/calendar/component/ExpandableCalendar.kt): `CalendarComponents/Calendar/src/main/kotlin/com/infomaniak/calendar/components/calendar/component/ExpandableCalendar.kt`
- [Day timeline](https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Day/src/main/kotlin/com/infomaniak/calendar/components/day/DayTimeline.kt): `CalendarComponents/Day/src/main/kotlin/com/infomaniak/calendar/components/day/DayTimeline.kt`
- [Planning components](https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Planning/src/main/kotlin/com/infomaniak/calendar/components/planning/Planning.kt): `CalendarComponents/Planning/src/main/kotlin/com/infomaniak/calendar/components/planning/Planning.kt`
- [Event display](https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Event/src/main/kotlin/com/infomaniak/calendar/components/event/EventItem.kt): `CalendarComponents/Event/src/main/kotlin/com/infomaniak/calendar/components/event/EventItem.kt`
- [Event and date models](https://github.com/infomaniak/android-calendar/blob/main/CalendarComponents/Foundation/src/main/kotlin/com/infomaniak/calendar/components/foundation/models/EventUi.kt): `CalendarComponents/Foundation/src/main/kotlin/com/infomaniak/calendar/components/foundation/models/EventUi.kt`

### Accounts and sync

- [Onboarding](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/onboarding/OnboardingScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/onboarding/OnboardingScreen.kt`
- [Account management](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/ui/screen/accounts/AccountsListScreen.kt): `app/src/main/java/com/infomaniak/calendar/ui/screen/accounts/AccountsListScreen.kt`
- [Event sync manager](https://github.com/infomaniak/android-calendar/blob/main/app/src/main/java/com/infomaniak/calendar/manager/SyncEventsManager.kt): `app/src/main/java/com/infomaniak/calendar/manager/SyncEventsManager.kt`

### Other components

- **Calendar user**
- **Calendar manager**

## Connections

- Calendar user → Main activity: opens app
- Main activity → Navigation host: hosts
- Navigation host → Month screen: routes
- Navigation host → Week screen: routes
- Navigation host → Day screen: routes
- Navigation host → Three-day screen: routes
- Navigation host → Planning screen: routes
- Navigation host → Onboarding: routes
- Navigation host → Event detail screen: routes
- Navigation host → Event creation: routes
- Navigation host → Event editing: routes
- Month screen → Calendar components: renders with
- Week screen → Calendar components: renders with
- Day screen → Day timeline: renders with
- Planning screen → Planning components: renders with
- Day timeline → Event display: displays
- Planning components → Event display: displays
- Event display → Event and date models: uses models
- Event detail screen → Event detail UI: renders with
- Main activity → Event sync manager: observes errors
- Event sync manager → Calendar manager: downloads and syncs
- Calendar user → Account management: manages accounts
- Calendar user → Calendar drawer: selects calendars
