# lozalien/frozenassets architecture

> Architecture diagram of the GitHub repository lozalien/frozenassets, 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/lozalien/frozenassets
- Repository: https://github.com/lozalien/frozenassets

## Overview

Frozen Assets is an offline Android freezer-inventory app. Users browse items by urgency, category, or all-items view; add or edit item details (including freeze date, tags, quantity, and weight); and manage inventory through search, sorting, and bulk deletion. Category-based storage guidance supports expiration-date calculation, while settings provide import/export. The sampled code confirms the MVVM and Room persistence path, expiration calculation, tag access, and file-selection flow; several screen-to-data links for documented features are based on the README and repository structure.

Main entry points: [`FrozenAssets/app/src/main/java/com/frozenassets/app/ViewModels/InventoryViewModel.java`](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/ViewModels/InventoryViewModel.java) (Inventory ViewModel), [`FrozenAssets/app/src/main/java/com/frozenassets/app/repositories/InventoryRepository.java`](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/repositories/InventoryRepository.java) (Inventory repository), [`FrozenAssets/app/src/main/java/com/frozenassets/app/activities/SettingsActivity.java`](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/SettingsActivity.java) (Data settings), [`FrozenAssets/app/src/main/java/com/frozenassets/app/activities/AddItemActivity.java`](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/AddItemActivity.java) (Add / edit)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Inventory screens"]
  node_main["Main screen<br/>[MainActivity.java]"]
  node_all["All items"]
  node_category["Category view"]
  node_soon["Eat soon"]
  node_edit["Add / edit"]
  node_detail["Item detail"]
  node_settings["Data settings"]
  node_adapter["Inventory list"]
end

subgraph group_app["Application logic"]
  node_vm["Inventory ViewModel"]
  node_dates["Expiration threshold<br/>[DateUtils.java]"]
end

subgraph group_data["Inventory data"]
  node_repo["Inventory repository"]
  node_categoryrules["Category durations<br/>[FoodCategory.java]"]
  node_item["Inventory item<br/>[InventoryItem.java]"]
  node_dao["Inventory DAO<br/>[InventoryDao.java]"]
  node_database[("Room database")]
end

subgraph group_platform["Platform integration"]
  node_documents["Android document picker"]
  node_files["Selected import / export file"]
end

node_person(("User"))

node_person -->|"opens"| node_main
node_person -->|"browses"| node_all
node_person -->|"selects category"| node_category
node_person -->|"checks urgency"| node_soon
node_person -->|"enters item"| node_edit
node_person -->|"manages data"| node_settings
node_main -->|"requests inventory"| node_vm
node_all -->|"queries / deletes"| node_vm
node_category -->|"queries category"| node_vm
node_soon -->|"queries expiring"| node_vm
node_edit -->|"saves item"| node_vm
node_detail -->|"loads / updates"| node_vm
node_settings -->|"reads / imports"| node_vm
node_settings -->|"opens picker"| node_documents
node_documents -->|"selects file"| node_files
node_settings -->|"imports / exports"| node_files
node_vm -->|"delegates operations"| node_repo
node_repo -->|"queries / mutates"| node_dao
node_repo -->|"gets threshold"| node_dates
node_repo -->|"calculates duration"| node_categoryrules
node_repo -->|"sets expiration"| node_item
node_dao -->|"executes queries"| node_database
node_database -->|"stores rows"| node_item
node_vm -->|"publishes list data"| node_adapter
node_adapter -->|"displays inventory"| node_person
node_edit -->|"reads / writes tags"| node_database

click node_main "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/MainActivity.java"
click node_all "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/AllItemsActivity.java"
click node_category "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/CategoryActivity.java"
click node_soon "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/EatSoonActivity.java"
click node_edit "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/AddItemActivity.java"
click node_detail "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/ItemDetailActivity.java"
click node_settings "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/SettingsActivity.java"
click node_adapter "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/adapters/InventoryAdapter.java"
click node_vm "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/ViewModels/InventoryViewModel.java"
click node_repo "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/repositories/InventoryRepository.java"
click node_categoryrules "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/models/FoodCategory.java"
click node_item "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/models/InventoryItem.java"
click node_dao "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/database/InventoryDao.java"
click node_database "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/database/InventoryDatabase.java"
click node_dates "https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/utils/DateUtils.java"

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_all,node_category,node_soon,node_edit,node_detail,node_settings,node_adapter,node_person toneBlue
class node_vm,node_dates toneAmber
class node_repo,node_categoryrules,node_item,node_dao,node_database toneMint
class node_documents,node_files toneRose
```

## Components

### Inventory screens

- [Main screen](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/MainActivity.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/activities/MainActivity.java`
- [All items](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/AllItemsActivity.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/activities/AllItemsActivity.java`
- [Category view](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/CategoryActivity.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/activities/CategoryActivity.java`
- [Eat soon](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/EatSoonActivity.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/activities/EatSoonActivity.java`
- [Add / edit](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/AddItemActivity.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/activities/AddItemActivity.java`
- [Item detail](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/ItemDetailActivity.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/activities/ItemDetailActivity.java`
- [Data settings](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/activities/SettingsActivity.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/activities/SettingsActivity.java`
- [Inventory list](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/adapters/InventoryAdapter.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/adapters/InventoryAdapter.java`

### Application logic

- [Inventory ViewModel](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/ViewModels/InventoryViewModel.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/ViewModels/InventoryViewModel.java`
- [Expiration threshold](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/utils/DateUtils.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/utils/DateUtils.java`

### Inventory data

- [Inventory repository](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/repositories/InventoryRepository.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/repositories/InventoryRepository.java`
- [Category durations](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/models/FoodCategory.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/models/FoodCategory.java`
- [Inventory item](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/models/InventoryItem.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/models/InventoryItem.java`
- [Inventory DAO](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/database/InventoryDao.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/database/InventoryDao.java`
- [Room database](https://github.com/lozalien/frozenassets/blob/master/FrozenAssets/app/src/main/java/com/frozenassets/app/database/InventoryDatabase.java): `FrozenAssets/app/src/main/java/com/frozenassets/app/database/InventoryDatabase.java`

### Platform integration

- **Android document picker**
- **Selected import / export file**

### Other components

- **User**

## Connections

- User → Main screen: opens
- User → All items: browses
- User → Category view: selects category
- User → Eat soon: checks urgency
- User → Add / edit: enters item
- User → Data settings: manages data
- Main screen → Inventory ViewModel: requests inventory
- All items → Inventory ViewModel: queries / deletes
- Category view → Inventory ViewModel: queries category
- Eat soon → Inventory ViewModel: queries expiring
- Add / edit → Inventory ViewModel: saves item
- Item detail → Inventory ViewModel: loads / updates
- Data settings → Inventory ViewModel: reads / imports
- Data settings → Android document picker: opens picker
- Android document picker → Selected import / export file: selects file
- Data settings → Selected import / export file: imports / exports
- Inventory ViewModel → Inventory repository: delegates operations
- Inventory repository → Inventory DAO: queries / mutates
- Inventory repository → Expiration threshold: gets threshold
- Inventory repository → Category durations: calculates duration
- Inventory repository → Inventory item: sets expiration
- Inventory DAO → Room database: executes queries
- Room database → Inventory item: stores rows
- Inventory ViewModel → Inventory list: publishes list data
- Inventory list → User: displays inventory
- Add / edit → Room database: reads / writes tags
