# frknkrc44/hma-oss architecture

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

- Interactive diagram: https://gitdiagram.com/frknkrc44/hma-oss
- Repository: https://github.com/frknkrc44/hma-oss

## Overview

HMA-OSS is an Android/Zygisk module for concealing selected apps and restricting app-list queries. The user configures scope and filtering in the manager UI; configuration is persisted and consumed by the Zygote-side service, which installs framework hooks to enforce the rules. The README confirms the product purpose, while source excerpts show configuration, preset handling, and hook setup. Several UI-to-runtime links are documented only indirectly by the available index, so those are marked unverified; unsampled hook details are not inferred.

Main entry points: [`zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt`](https://github.com/frknkrc44/hma-oss/blob/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt) (HMA service), [`app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt`](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt) (Main activity), [`app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt`](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt) (Service client), [`app/src/main/java/icu/nullptr/hidemyapplist/service/ConfigManager.kt`](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/ConfigManager.kt) (Config manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_manager["Manager app"]
  node_main["Main activity<br/>[MainActivity.kt]"]
  node_scopeui["App and scope UI"]
  node_settingsui["Settings UI"]
  node_templatesui["Template UI"]
  node_logui["Logs and stats UI"]
  node_client["Service client<br/>[ServiceClient.kt]"]
  node_provider["Service provider<br/>[ServiceProvider.kt]"]
  node_packagehelper["Package cache<br/>[PackageHelper.kt]"]
end

subgraph group_config["Configuration and presets"]
  node_prefs["App preferences<br/>[PrefManager.kt]"]
  node_configmgr["Config manager<br/>[ConfigManager.kt]"]
  node_jsonconfig["Shared config model<br/>[JsonConfig.kt]"]
  node_apppresets["App presets<br/>[AppPresets.kt]"]
  node_settingpresets["Settings presets<br/>[SettingsPresets.kt]"]
end

subgraph group_runtime["Zygote runtime"]
  node_zygoteentry["Zygote entry<br/>[ZygoteEntry.java]"]
  node_hmaservice["HMA service<br/>[HMAService.kt]"]
  node_hooks["Framework hooks"]
  node_dataholder["Runtime state"]
end

subgraph group_platform["Android platform"]
  node_packageapi["Package manager API"]
end

node_user(("Device owner"))
node_framework["Android framework"]

node_user -->|"opens"| node_main
node_main -.->|"navigates to"| node_scopeui
node_main -.->|"navigates to"| node_settingsui
node_main -.->|"navigates to"| node_templatesui
node_main -.->|"navigates to"| node_logui
node_settingsui -->|"updates"| node_configmgr
node_settingsui -->|"calls"| node_client
node_scopeui -.->|"edits scope"| node_configmgr
node_templatesui -.->|"edits templates"| node_configmgr
node_logui -.->|"requests logs"| node_client
node_client -.->|"uses provider"| node_provider
node_client -->|"invokes service"| node_hmaservice
node_configmgr -->|"serializes config"| node_jsonconfig
node_hmaservice -->|"parses config"| node_jsonconfig
node_hmaservice -->|"registers hooks"| node_hooks
node_hmaservice -->|"reloads presets"| node_apppresets
node_hmaservice -->|"uses runtime state"| node_dataholder
node_apppresets -->|"queries packages"| node_packageapi
node_hooks -.->|"filters requests"| node_packageapi
node_zygoteentry -.->|"starts service"| node_hmaservice
node_hmaservice -->|"hooks runtime"| node_framework
node_packagehelper -->|"loads package data"| node_client
node_main -->|"reads preferences"| node_prefs

click node_main "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt"
click node_scopeui "https://github.com/frknkrc44/hma-oss/tree/master/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment"
click node_settingsui "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt"
click node_templatesui "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/SettingsTemplateConfFragment.kt"
click node_logui "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/TabbedLogsFragment.kt"
click node_prefs "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/PrefManager.kt"
click node_configmgr "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/ConfigManager.kt"
click node_jsonconfig "https://github.com/frknkrc44/hma-oss/blob/master/common/src/main/java/icu/nullptr/hidemyapplist/common/JsonConfig.kt"
click node_apppresets "https://github.com/frknkrc44/hma-oss/blob/master/common/src/main/java/icu/nullptr/hidemyapplist/common/AppPresets.kt"
click node_settingpresets "https://github.com/frknkrc44/hma-oss/blob/master/common/src/main/java/icu/nullptr/hidemyapplist/common/SettingsPresets.kt"
click node_client "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt"
click node_provider "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceProvider.kt"
click node_zygoteentry "https://github.com/frknkrc44/hma-oss/blob/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/ZygoteEntry.java"
click node_hmaservice "https://github.com/frknkrc44/hma-oss/blob/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt"
click node_hooks "https://github.com/frknkrc44/hma-oss/tree/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/hook"
click node_dataholder "https://github.com/frknkrc44/hma-oss/blob/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAServiceDataHolder.kt"
click node_packagehelper "https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/util/PackageHelper.kt"
click node_packageapi "https://github.com/frknkrc44/hma-oss/blob/master/stub/src/main/java/android/content/pm/IPackageManager.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_scopeui,node_settingsui,node_templatesui,node_logui,node_client,node_provider,node_packagehelper toneBlue
class node_prefs,node_configmgr,node_jsonconfig,node_apppresets,node_settingpresets toneAmber
class node_zygoteentry,node_hmaservice,node_hooks,node_dataholder toneMint
class node_packageapi toneRose
class node_user,node_framework toneIndigo
```

## Components

### Manager app

- [Main activity](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt): `app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt`
- [App and scope UI](https://github.com/frknkrc44/hma-oss/tree/master/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment): `app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment`
- [Settings UI](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt): `app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt`
- [Template UI](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/SettingsTemplateConfFragment.kt): `app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/SettingsTemplateConfFragment.kt`
- [Logs and stats UI](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/TabbedLogsFragment.kt): `app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/TabbedLogsFragment.kt`
- [Service client](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt): `app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt`
- [Service provider](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceProvider.kt): `app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceProvider.kt`
- [Package cache](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/util/PackageHelper.kt): `app/src/main/java/icu/nullptr/hidemyapplist/util/PackageHelper.kt`

### Configuration and presets

- [App preferences](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/PrefManager.kt): `app/src/main/java/icu/nullptr/hidemyapplist/service/PrefManager.kt`
- [Config manager](https://github.com/frknkrc44/hma-oss/blob/master/app/src/main/java/icu/nullptr/hidemyapplist/service/ConfigManager.kt): `app/src/main/java/icu/nullptr/hidemyapplist/service/ConfigManager.kt`
- [Shared config model](https://github.com/frknkrc44/hma-oss/blob/master/common/src/main/java/icu/nullptr/hidemyapplist/common/JsonConfig.kt): `common/src/main/java/icu/nullptr/hidemyapplist/common/JsonConfig.kt`
- [App presets](https://github.com/frknkrc44/hma-oss/blob/master/common/src/main/java/icu/nullptr/hidemyapplist/common/AppPresets.kt): `common/src/main/java/icu/nullptr/hidemyapplist/common/AppPresets.kt`
- [Settings presets](https://github.com/frknkrc44/hma-oss/blob/master/common/src/main/java/icu/nullptr/hidemyapplist/common/SettingsPresets.kt): `common/src/main/java/icu/nullptr/hidemyapplist/common/SettingsPresets.kt`

### Zygote runtime

- [Zygote entry](https://github.com/frknkrc44/hma-oss/blob/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/ZygoteEntry.java): `zygote/src/main/java/org/frknkrc44/hma_oss/zygote/ZygoteEntry.java`
- [HMA service](https://github.com/frknkrc44/hma-oss/blob/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt): `zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt`
- [Framework hooks](https://github.com/frknkrc44/hma-oss/tree/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/hook): `zygote/src/main/java/org/frknkrc44/hma_oss/zygote/hook`
- [Runtime state](https://github.com/frknkrc44/hma-oss/blob/master/zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAServiceDataHolder.kt): `zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAServiceDataHolder.kt`

### Android platform

- [Package manager API](https://github.com/frknkrc44/hma-oss/blob/master/stub/src/main/java/android/content/pm/IPackageManager.java): `stub/src/main/java/android/content/pm/IPackageManager.java`

### Other components

- **Device owner**
- **Android framework**

## Connections

- Device owner → Main activity: opens (evidence: `README.md`)
- Main activity → App and scope UI: navigates to (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt`)
- Main activity → Settings UI: navigates to (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt`)
- Main activity → Template UI: navigates to
- Main activity → Logs and stats UI: navigates to
- Settings UI → Config manager: updates (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt`)
- Settings UI → Service client: calls (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt`)
- App and scope UI → Config manager: edits scope (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt`)
- Template UI → Config manager: edits templates
- Logs and stats UI → Service client: requests logs
- Service client → Service provider: uses provider (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt`)
- Service client → HMA service: invokes service (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt`)
- Config manager → Shared config model: serializes config (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/service/ConfigManager.kt`)
- HMA service → Shared config model: parses config (evidence: `zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt`)
- HMA service → Framework hooks: registers hooks (evidence: `zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt`)
- HMA service → App presets: reloads presets (evidence: `zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt`)
- HMA service → Runtime state: uses runtime state (evidence: `zygote/src/main/java/org/frknkrc44/hma_oss/zygote/service/HMAService.kt`)
- App presets → Package manager API: queries packages (evidence: `common/src/main/java/icu/nullptr/hidemyapplist/common/AppPresets.kt`)
- Framework hooks → Package manager API: filters requests
- Zygote entry → HMA service: starts service
- HMA service → Android framework: hooks runtime (evidence: `README.md`)
- Package cache → Service client: loads package data (evidence: `app/src/main/java/icu/nullptr/hidemyapplist/util/PackageHelper.kt`)
- Main activity → App preferences: reads preferences (evidence: `app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt`)
