# emanuelmath/sensoria-android architecture

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

- Interactive diagram: https://gitdiagram.com/emanuelmath/sensoria-android
- Repository: https://github.com/emanuelmath/sensoria-android

## Overview

Sensoria is an Android app whose apparent workflow is user sign-in and company selection, followed by device/telemetry and alert monitoring or support-ticket work. The tree also shows profile and company-switching screens. The supplied source excerpts contain no runtime code or README, so the relationships below are dashed and unverified; paths identify implementations from the tree, not inspected behavior.

Main entry points: [`app/src/main/java/com/example/sensoria/domain/usecases`](https://github.com/emanuelmath/sensoria-android/tree/main/app/src/main/java/com/example/sensoria/domain/usecases) (Domain actions), [`app/src/main/java/com/example/sensoria/presentation/navigation/AppNavigation.kt`](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/navigation/AppNavigation.kt) (App navigation), [`app/src/main/java/com/example/sensoria/data/remote/RetrofitClient.kt`](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/remote/RetrofitClient.kt) (Remote APIs), [`app/src/main/java/com/example/sensoria/data/repositories/AuthRepositoryImpl.kt`](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/AuthRepositoryImpl.kt) (Authentication data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App shell"]
  node_main["Main activity<br/>[MainActivity.kt]"]
  node_navigation["App navigation<br/>[AppNavigation.kt]"]
end

subgraph group_identity["Identity and profile"]
  node_login["Login flow<br/>[LoginViewModel.kt]"]
  node_companyselect["Company selection"]
  node_profile["Profile"]
  node_changecompany["Change company"]
end

subgraph group_monitoring["Device monitoring"]
  node_devices["Device list"]
  node_device_detail["Device details"]
end

subgraph group_support["Alerts and support"]
  node_alerts["Alert handling<br/>[AlertsViewModel.kt]"]
  node_support_list["Ticket list"]
  node_ticket_create["Ticket creation"]
  node_ticket_detail["Ticket conversation"]
end

subgraph group_data["Domain and data"]
  node_usecases["Domain actions"]
  node_auth_repo["Authentication data"]
  node_device_repo["Device data"]
  node_alert_repo["Alert data"]
  node_ticket_repo["Ticket data"]
  node_remote_api["Remote APIs<br/>[RetrofitClient.kt]"]
  node_auth_prefs[("Auth preferences<br/>[AuthPreferences.kt]")]
end

node_user(("User"))
node_service{{"Sensoria service"}}

node_user -.->|"opens"| node_main
node_main -.->|"starts"| node_navigation
node_navigation -.->|"routes to"| node_login
node_navigation -.->|"routes to"| node_devices
node_navigation -.->|"routes to"| node_alerts
node_navigation -.->|"routes to"| node_support_list
node_navigation -.->|"routes to"| node_profile
node_login -.->|"invokes"| node_usecases
node_companyselect -.->|"loads companies"| node_usecases
node_profile -.->|"opens"| node_changecompany
node_changecompany -.->|"invokes"| node_usecases
node_devices -.->|"invokes"| node_usecases
node_device_detail -.->|"invokes"| node_usecases
node_alerts -.->|"invokes"| node_usecases
node_support_list -.->|"invokes"| node_usecases
node_ticket_create -.->|"invokes"| node_usecases
node_ticket_detail -.->|"invokes"| node_usecases
node_usecases -.->|"delegates to"| node_auth_repo
node_usecases -.->|"delegates to"| node_device_repo
node_usecases -.->|"delegates to"| node_alert_repo
node_usecases -.->|"delegates to"| node_ticket_repo
node_auth_repo -.->|"stores credentials"| node_auth_prefs
node_auth_repo -.->|"uses"| node_remote_api
node_device_repo -.->|"uses"| node_remote_api
node_alert_repo -.->|"uses"| node_remote_api
node_ticket_repo -.->|"uses"| node_remote_api
node_remote_api -.->|"requests"| node_service

click node_main "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/MainActivity.kt"
click node_navigation "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/navigation/AppNavigation.kt"
click node_login "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/auth/LoginViewModel.kt"
click node_companyselect "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/auth/CompanySelectionScreen.kt"
click node_profile "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/profile/ProfileViewModel.kt"
click node_changecompany "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/profile/changecompany/ChangeCompanyViewModel.kt"
click node_devices "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/dashboard/DashboardViewModel.kt"
click node_device_detail "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/dashboard/DeviceDetailViewModel.kt"
click node_alerts "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/alerts/AlertsViewModel.kt"
click node_support_list "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/support/SupportViewModel.kt"
click node_ticket_create "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/support/create/CreateTicketViewModel.kt"
click node_ticket_detail "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/support/detail/TicketDetailViewModel.kt"
click node_usecases "https://github.com/emanuelmath/sensoria-android/tree/main/app/src/main/java/com/example/sensoria/domain/usecases"
click node_auth_repo "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/AuthRepositoryImpl.kt"
click node_device_repo "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/DeviceRepositoryImpl.kt"
click node_alert_repo "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/AlertRepositoryImpl.kt"
click node_ticket_repo "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/TicketRepositoryImpl.kt"
click node_remote_api "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/remote/RetrofitClient.kt"
click node_auth_prefs "https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/local/AuthPreferences.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_main,node_navigation,node_user toneBlue
class node_login,node_companyselect,node_profile,node_changecompany toneAmber
class node_devices,node_device_detail toneMint
class node_alerts,node_support_list,node_ticket_create,node_ticket_detail toneRose
class node_usecases,node_auth_repo,node_device_repo,node_alert_repo,node_ticket_repo,node_remote_api,node_auth_prefs,node_service toneIndigo
```

## Components

### App shell

- [Main activity](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/MainActivity.kt): `app/src/main/java/com/example/sensoria/MainActivity.kt`
- [App navigation](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/navigation/AppNavigation.kt): `app/src/main/java/com/example/sensoria/presentation/navigation/AppNavigation.kt`

### Identity and profile

- [Login flow](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/auth/LoginViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/auth/LoginViewModel.kt`
- [Company selection](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/auth/CompanySelectionScreen.kt): `app/src/main/java/com/example/sensoria/presentation/auth/CompanySelectionScreen.kt`
- [Profile](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/profile/ProfileViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/profile/ProfileViewModel.kt`
- [Change company](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/profile/changecompany/ChangeCompanyViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/profile/changecompany/ChangeCompanyViewModel.kt`

### Device monitoring

- [Device list](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/dashboard/DashboardViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/dashboard/DashboardViewModel.kt`
- [Device details](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/dashboard/DeviceDetailViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/dashboard/DeviceDetailViewModel.kt`

### Alerts and support

- [Alert handling](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/alerts/AlertsViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/alerts/AlertsViewModel.kt`
- [Ticket list](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/support/SupportViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/support/SupportViewModel.kt`
- [Ticket creation](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/support/create/CreateTicketViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/support/create/CreateTicketViewModel.kt`
- [Ticket conversation](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/presentation/support/detail/TicketDetailViewModel.kt): `app/src/main/java/com/example/sensoria/presentation/support/detail/TicketDetailViewModel.kt`

### Domain and data

- [Domain actions](https://github.com/emanuelmath/sensoria-android/tree/main/app/src/main/java/com/example/sensoria/domain/usecases): `app/src/main/java/com/example/sensoria/domain/usecases`
- [Authentication data](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/AuthRepositoryImpl.kt): `app/src/main/java/com/example/sensoria/data/repositories/AuthRepositoryImpl.kt`
- [Device data](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/DeviceRepositoryImpl.kt): `app/src/main/java/com/example/sensoria/data/repositories/DeviceRepositoryImpl.kt`
- [Alert data](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/AlertRepositoryImpl.kt): `app/src/main/java/com/example/sensoria/data/repositories/AlertRepositoryImpl.kt`
- [Ticket data](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/repositories/TicketRepositoryImpl.kt): `app/src/main/java/com/example/sensoria/data/repositories/TicketRepositoryImpl.kt`
- [Remote APIs](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/remote/RetrofitClient.kt): `app/src/main/java/com/example/sensoria/data/remote/RetrofitClient.kt`
- [Auth preferences](https://github.com/emanuelmath/sensoria-android/blob/main/app/src/main/java/com/example/sensoria/data/local/AuthPreferences.kt): `app/src/main/java/com/example/sensoria/data/local/AuthPreferences.kt`

### Other components

- **User**
- **Sensoria service**

## Connections

- User → Main activity: opens
- Main activity → App navigation: starts
- App navigation → Login flow: routes to
- App navigation → Device list: routes to
- App navigation → Alert handling: routes to
- App navigation → Ticket list: routes to
- App navigation → Profile: routes to
- Login flow → Domain actions: invokes
- Company selection → Domain actions: loads companies
- Profile → Change company: opens
- Change company → Domain actions: invokes
- Device list → Domain actions: invokes
- Device details → Domain actions: invokes
- Alert handling → Domain actions: invokes
- Ticket list → Domain actions: invokes
- Ticket creation → Domain actions: invokes
- Ticket conversation → Domain actions: invokes
- Domain actions → Authentication data: delegates to
- Domain actions → Device data: delegates to
- Domain actions → Alert data: delegates to
- Domain actions → Ticket data: delegates to
- Authentication data → Auth preferences: stores credentials
- Authentication data → Remote APIs: uses
- Device data → Remote APIs: uses
- Alert data → Remote APIs: uses
- Ticket data → Remote APIs: uses
- Remote APIs → Sensoria service: requests
