# lurixo/aegis architecture

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

- Interactive diagram: https://gitdiagram.com/lurixo/aegis
- Repository: https://github.com/lurixo/aegis

## Overview

Aegis is an Android Chinese/English input method. The main path is editor input through the IME’s keyboard/controller, candidate generation and selection, then text commit back to the editor. Chinese decoding uses dictionary assets and can incorporate user learning; English completion and prediction are part of the candidate engine. Separate branches cover panels and clipboard/phrase features, settings and optional model downloads, translation, and encrypted backup/restore. The README documents these capabilities; sampled source confirms the IME, decoder, translation, and backup responsibilities, but not every connection among unsampled UI and storage modules.

Main entry points: [`app/src/main/java/com/aegis/ime/AegisInputMethodService.kt`](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/AegisInputMethodService.kt) (IME service), [`app/src/main/java/com/aegis/ime/engine/DictEngine.kt`](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/engine/DictEngine.kt) (Dictionary engine), [`app/src/main/java/com/aegis/ime/ime/ClipboardView.kt`](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/ClipboardView.kt) (IME panels), [`app/src/main/java/com/aegis/ime/ime/KeyboardController.kt`](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/KeyboardController.kt) (Keyboard controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["Input and candidates"]
  node_ime["IME service"]
  node_keyboard["Keyboard controller"]
  node_candidate["Candidate engine<br/>[CandidateEngine.kt]"]
  node_keyboardui["Keyboard and candidates<br/>[KeyboardView.kt]"]
end

subgraph group_models["Decoding and learning"]
  node_dictengine["Dictionary engine<br/>[DictEngine.kt]"]
  node_decoder["Pinyin decoder<br/>[PinyinDecoder.kt]"]
  node_dictfiles[("Dictionary models<br/>[BinaryDict.kt]")]
  node_userlearning[("User learning<br/>[UserLearning.kt]")]
end

subgraph group_panels["Panels and user data"]
  node_panels["IME panels<br/>[ClipboardView.kt]"]
  node_clipboard[("Clipboard history<br/>[ClipboardStore.kt]")]
  node_lexicon[("User lexicon<br/>[UserLexicon.kt]")]
  node_privatefiles[("Private user files<br/>[UserModel.kt]")]
end

subgraph group_settings["Settings and assets"]
  node_settingsui["Settings screens<br/>[SetupActivity.kt]"]
  node_modeldownload["Model downloads<br/>[ModelDownload.kt]"]
  node_assets["Engine assets<br/>[EngineAssets.kt]"]
end

subgraph group_transfer["External services and backup"]
  node_translatebar["Translate bar"]
  node_translateclient["Translation client<br/>[TranslateClient.kt]"]
  node_backupui["Backup screen<br/>[BackupActivity.kt]"]
  node_backup["Backup manager<br/>[BackupManager.kt]"]
end

node_editor(("Text editor"))
node_google(("Google Translate"))

node_editor -->|"activates"| node_ime
node_ime -->|"handles keys"| node_keyboard
node_keyboard -->|"requests candidates"| node_candidate
node_candidate -->|"delegates decoding"| node_dictengine
node_dictengine -->|"decodes pinyin"| node_decoder
node_decoder -->|"reads models"| node_dictfiles
node_dictengine -->|"uses learning"| node_userlearning
node_ime -->|"renders keyboard"| node_keyboardui
node_keyboardui -->|"selects candidate"| node_ime
node_ime -->|"commits text"| node_editor
node_ime -->|"shows panels"| node_panels
node_panels -->|"reads/writes clips"| node_clipboard
node_panels -->|"uses lexicon"| node_lexicon
node_lexicon -->|"persists entries"| node_privatefiles
node_settingsui -->|"starts download"| node_modeldownload
node_modeldownload -->|"installs assets"| node_assets
node_assets -->|"supplies models"| node_dictengine
node_ime -->|"opens bar"| node_translatebar
node_translatebar -->|"submits text"| node_translateclient
node_translateclient -.->|"sends translation"| node_google
node_backupui -->|"exports/imports"| node_backup
node_backup -->|"archives user data"| node_privatefiles

click node_ime "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/AegisInputMethodService.kt"
click node_keyboard "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/KeyboardController.kt"
click node_candidate "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/engine/CandidateEngine.kt"
click node_dictengine "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/engine/DictEngine.kt"
click node_decoder "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/decoder/PinyinDecoder.kt"
click node_dictfiles "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/dict/BinaryDict.kt"
click node_userlearning "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/user/UserLearning.kt"
click node_keyboardui "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/KeyboardView.kt"
click node_panels "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/ClipboardView.kt"
click node_clipboard "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/user/ClipboardStore.kt"
click node_lexicon "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/user/UserLexicon.kt"
click node_settingsui "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ui/SetupActivity.kt"
click node_modeldownload "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/dict/ModelDownload.kt"
click node_assets "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/dict/EngineAssets.kt"
click node_translatebar "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/TranslateBarView.kt"
click node_translateclient "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/translate/TranslateClient.kt"
click node_backupui "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ui/BackupActivity.kt"
click node_backup "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/backup/BackupManager.kt"
click node_privatefiles "https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/user/UserModel.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_ime,node_keyboard,node_candidate,node_keyboardui toneBlue
class node_dictengine,node_decoder,node_dictfiles,node_userlearning toneAmber
class node_panels,node_clipboard,node_lexicon,node_privatefiles toneMint
class node_settingsui,node_modeldownload,node_assets toneRose
class node_translatebar,node_translateclient,node_backupui,node_backup,node_editor,node_google toneIndigo
```

## Components

### Input and candidates

- [IME service](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/AegisInputMethodService.kt): `app/src/main/java/com/aegis/ime/AegisInputMethodService.kt`
- [Keyboard controller](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/KeyboardController.kt): `app/src/main/java/com/aegis/ime/ime/KeyboardController.kt`
- [Candidate engine](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/engine/CandidateEngine.kt): `app/src/main/java/com/aegis/ime/engine/CandidateEngine.kt`
- [Keyboard and candidates](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/KeyboardView.kt): `app/src/main/java/com/aegis/ime/ime/KeyboardView.kt`

### Decoding and learning

- [Dictionary engine](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/engine/DictEngine.kt): `app/src/main/java/com/aegis/ime/engine/DictEngine.kt`
- [Pinyin decoder](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/decoder/PinyinDecoder.kt): `app/src/main/java/com/aegis/ime/decoder/PinyinDecoder.kt`
- [Dictionary models](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/dict/BinaryDict.kt): `app/src/main/java/com/aegis/ime/dict/BinaryDict.kt`
- [User learning](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/user/UserLearning.kt): `app/src/main/java/com/aegis/ime/user/UserLearning.kt`

### Panels and user data

- [IME panels](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/ClipboardView.kt): `app/src/main/java/com/aegis/ime/ime/ClipboardView.kt`
- [Clipboard history](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/user/ClipboardStore.kt): `app/src/main/java/com/aegis/ime/user/ClipboardStore.kt`
- [User lexicon](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/user/UserLexicon.kt): `app/src/main/java/com/aegis/ime/user/UserLexicon.kt`
- [Private user files](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/user/UserModel.kt): `app/src/main/java/com/aegis/ime/user/UserModel.kt`

### Settings and assets

- [Settings screens](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ui/SetupActivity.kt): `app/src/main/java/com/aegis/ime/ui/SetupActivity.kt`
- [Model downloads](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/dict/ModelDownload.kt): `app/src/main/java/com/aegis/ime/dict/ModelDownload.kt`
- [Engine assets](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/dict/EngineAssets.kt): `app/src/main/java/com/aegis/ime/dict/EngineAssets.kt`

### External services and backup

- [Translate bar](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ime/TranslateBarView.kt): `app/src/main/java/com/aegis/ime/ime/TranslateBarView.kt`
- [Translation client](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/translate/TranslateClient.kt): `app/src/main/java/com/aegis/ime/translate/TranslateClient.kt`
- [Backup screen](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/ui/BackupActivity.kt): `app/src/main/java/com/aegis/ime/ui/BackupActivity.kt`
- [Backup manager](https://github.com/lurixo/aegis/blob/dev/app/src/main/java/com/aegis/ime/backup/BackupManager.kt): `app/src/main/java/com/aegis/ime/backup/BackupManager.kt`

### Other components

- **Text editor**
- **Google Translate**

## Connections

- Text editor → IME service: activates
- IME service → Keyboard controller: handles keys
- Keyboard controller → Candidate engine: requests candidates
- Candidate engine → Dictionary engine: delegates decoding
- Dictionary engine → Pinyin decoder: decodes pinyin
- Pinyin decoder → Dictionary models: reads models
- Dictionary engine → User learning: uses learning
- IME service → Keyboard and candidates: renders keyboard
- Keyboard and candidates → IME service: selects candidate
- IME service → Text editor: commits text
- IME service → IME panels: shows panels
- IME panels → Clipboard history: reads/writes clips
- IME panels → User lexicon: uses lexicon
- User lexicon → Private user files: persists entries
- Settings screens → Model downloads: starts download
- Model downloads → Engine assets: installs assets
- Engine assets → Dictionary engine: supplies models
- IME service → Translate bar: opens bar
- Translate bar → Translation client: submits text
- Translation client → Google Translate: sends translation
- Backup screen → Backup manager: exports/imports
- Backup manager → Private user files: archives user data
