# laetuz/holomarket architecture

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

- Interactive diagram: https://gitdiagram.com/laetuz/holomarket
- Repository: https://github.com/laetuz/holomarket

## Overview

HoloMarket is a legacy Android app-store client: users browse featured and categorized apps, search paginated listings, inspect app details and versions, then download an APK for installation. Separate flows support account access and settings. The graph reflects documented capabilities and sampled activity/network behavior; presenter and detail wiring not shown in the excerpts is kept at subsystem level rather than inferred in detail.

Main entry points: [`app/src/main/java/id/neotica/holomarket/network/ApiTask.java`](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/network/ApiTask.java) (HTTP API client), [`app/src/main/java/id/neotica/holomarket/ui/feature/home/MainActivity.java`](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/home/MainActivity.java) (Home and featured), [`app/src/main/java/id/neotica/holomarket/ui/feature/applist/AppListActivity.java`](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/applist/AppListActivity.java) (Search and listings), [`app/src/main/java/id/neotica/holomarket/feature/detail/ui/AppDetailActivity.java`](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/detail/ui/AppDetailActivity.java) (App detail screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_browse["App discovery"]
  node_home["Home and featured<br/>[MainActivity.java]"]
  node_categories["Category browsing"]
  node_listing["Search and listings"]
  node_appmodel["App data models<br/>[AppModel.java]"]
end

subgraph group_account["Account and settings"]
  node_login["Login flow<br/>[LoginActivity.java]"]
  node_loginpresenter["Login presenter"]
  node_register["Registration flow"]
  node_registerpresenter["Registration presenter"]
  node_settings["Settings and logout"]
  node_authmanager["Auth preferences<br/>[AuthManager.java]"]
end

subgraph group_detail["App details and install"]
  node_detailactivity["App detail screen"]
  node_detailpresenter["Detail presenter"]
  node_ratingspresenter["Ratings presenter"]
  node_versionmodel["Version data<br/>[VersionModel.java]"]
  node_download["APK download<br/>[DownloadTask.java]"]
end

subgraph group_shared["Shared runtime"]
  node_api["HTTP API client<br/>[ApiTask.java]"]
  node_crash["Crash recovery<br/>[CrashCatcher.java]"]
end

node_user(("Device user"))
node_api_service{{"HoloMarket API"}}
node_file_service{{"APK file service"}}
node_installer{{"Android installer"}}
node_local_storage[("Device storage")]

node_user -->|"opens"| node_home
node_home -->|"opens topic"| node_categories
node_home -->|"requests feeds"| node_api
node_categories -->|"loads categories"| node_api
node_categories -->|"opens category"| node_listing
node_user -->|"searches or browses"| node_listing
node_listing -->|"requests pages"| node_api
node_listing -->|"maps results"| node_appmodel
node_listing -->|"opens app"| node_detailactivity
node_user -->|"signs in"| node_login
node_login -->|"submits credentials"| node_loginpresenter
node_loginpresenter -->|"stores tokens"| node_authmanager
node_loginpresenter -->|"authenticates"| node_api
node_user -->|"creates account"| node_register
node_register -->|"submits details"| node_registerpresenter
node_registerpresenter -->|"registers account"| node_api
node_home -->|"opens settings"| node_settings
node_settings -->|"reads or clears"| node_authmanager
node_user -->|"views app"| node_detailactivity
node_detailactivity -->|"requests details"| node_detailpresenter
node_detailpresenter -->|"loads app data"| node_api
node_detailactivity -->|"requests ratings"| node_ratingspresenter
node_detailpresenter -->|"uses versions"| node_versionmodel
node_detailactivity -->|"starts download"| node_download
node_download -->|"fetches APK"| node_file_service
node_download -->|"writes APK"| node_local_storage
node_download -->|"launches install"| node_installer
node_api -->|"sends requests"| node_api_service
node_api -->|"reads auth headers"| node_authmanager
node_login -->|"initializes recovery"| node_crash
node_home -->|"shows saved crash"| node_crash

click node_home "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/home/MainActivity.java"
click node_categories "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/category/CategoriesActivity.java"
click node_listing "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/applist/AppListActivity.java"
click node_appmodel "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/model/AppModel.java"
click node_login "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/auth/login/ui/LoginActivity.java"
click node_loginpresenter "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/auth/login/presenter/LoginPresenter.java"
click node_register "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/auth/register/ui/RegisterActivity.java"
click node_registerpresenter "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/auth/register/presenter/RegisterPresenter.java"
click node_settings "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/settings/SettingsActivity.java"
click node_authmanager "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/utils/AuthManager.java"
click node_detailactivity "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/detail/ui/AppDetailActivity.java"
click node_detailpresenter "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/detail/presenter/AppDetailPresenter.java"
click node_ratingspresenter "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/detail/presenter/RatingsPresenter.java"
click node_versionmodel "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/model/VersionModel.java"
click node_download "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/network/DownloadTask.java"
click node_api "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/network/ApiTask.java"
click node_crash "https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/utils/CrashCatcher.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_home,node_categories,node_listing,node_appmodel,node_user toneBlue
class node_login,node_loginpresenter,node_register,node_registerpresenter,node_settings,node_authmanager,node_local_storage toneAmber
class node_detailactivity,node_detailpresenter,node_ratingspresenter,node_versionmodel,node_download,node_api_service toneMint
class node_api,node_crash toneRose
class node_file_service,node_installer toneIndigo
```

## Components

### App discovery

- [Home and featured](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/home/MainActivity.java): `app/src/main/java/id/neotica/holomarket/ui/feature/home/MainActivity.java`
- [Category browsing](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/category/CategoriesActivity.java): `app/src/main/java/id/neotica/holomarket/ui/feature/category/CategoriesActivity.java`
- [Search and listings](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/applist/AppListActivity.java): `app/src/main/java/id/neotica/holomarket/ui/feature/applist/AppListActivity.java`
- [App data models](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/model/AppModel.java): `app/src/main/java/id/neotica/holomarket/model/AppModel.java`

### Account and settings

- [Login flow](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/auth/login/ui/LoginActivity.java): `app/src/main/java/id/neotica/holomarket/feature/auth/login/ui/LoginActivity.java`
- [Login presenter](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/auth/login/presenter/LoginPresenter.java): `app/src/main/java/id/neotica/holomarket/feature/auth/login/presenter/LoginPresenter.java`
- [Registration flow](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/auth/register/ui/RegisterActivity.java): `app/src/main/java/id/neotica/holomarket/feature/auth/register/ui/RegisterActivity.java`
- [Registration presenter](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/auth/register/presenter/RegisterPresenter.java): `app/src/main/java/id/neotica/holomarket/feature/auth/register/presenter/RegisterPresenter.java`
- [Settings and logout](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/ui/feature/settings/SettingsActivity.java): `app/src/main/java/id/neotica/holomarket/ui/feature/settings/SettingsActivity.java`
- [Auth preferences](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/utils/AuthManager.java): `app/src/main/java/id/neotica/holomarket/utils/AuthManager.java`

### App details and install

- [App detail screen](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/detail/ui/AppDetailActivity.java): `app/src/main/java/id/neotica/holomarket/feature/detail/ui/AppDetailActivity.java`
- [Detail presenter](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/detail/presenter/AppDetailPresenter.java): `app/src/main/java/id/neotica/holomarket/feature/detail/presenter/AppDetailPresenter.java`
- [Ratings presenter](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/feature/detail/presenter/RatingsPresenter.java): `app/src/main/java/id/neotica/holomarket/feature/detail/presenter/RatingsPresenter.java`
- [Version data](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/model/VersionModel.java): `app/src/main/java/id/neotica/holomarket/model/VersionModel.java`
- [APK download](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/network/DownloadTask.java): `app/src/main/java/id/neotica/holomarket/network/DownloadTask.java`

### Shared runtime

- [HTTP API client](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/network/ApiTask.java): `app/src/main/java/id/neotica/holomarket/network/ApiTask.java`
- [Crash recovery](https://github.com/laetuz/holomarket/blob/main/app/src/main/java/id/neotica/holomarket/utils/CrashCatcher.java): `app/src/main/java/id/neotica/holomarket/utils/CrashCatcher.java`

### Other components

- **Device user**
- **HoloMarket API**
- **APK file service**
- **Android installer**
- **Device storage**

## Connections

- Device user → Home and featured: opens
- Home and featured → Category browsing: opens topic
- Home and featured → HTTP API client: requests feeds
- Category browsing → HTTP API client: loads categories
- Category browsing → Search and listings: opens category
- Device user → Search and listings: searches or browses
- Search and listings → HTTP API client: requests pages
- Search and listings → App data models: maps results
- Search and listings → App detail screen: opens app
- Device user → Login flow: signs in
- Login flow → Login presenter: submits credentials
- Login presenter → Auth preferences: stores tokens
- Login presenter → HTTP API client: authenticates
- Device user → Registration flow: creates account
- Registration flow → Registration presenter: submits details
- Registration presenter → HTTP API client: registers account
- Home and featured → Settings and logout: opens settings
- Settings and logout → Auth preferences: reads or clears
- Device user → App detail screen: views app
- App detail screen → Detail presenter: requests details
- Detail presenter → HTTP API client: loads app data
- App detail screen → Ratings presenter: requests ratings
- Detail presenter → Version data: uses versions
- App detail screen → APK download: starts download
- APK download → APK file service: fetches APK
- APK download → Device storage: writes APK
- APK download → Android installer: launches install
- HTTP API client → HoloMarket API: sends requests
- HTTP API client → Auth preferences: reads auth headers
- Login flow → Crash recovery: initializes recovery
- Home and featured → Crash recovery: shows saved crash
