# gitthubpro/vmkeyboard architecture

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

- Interactive diagram: https://gitdiagram.com/gitthubpro/vmkeyboard
- Repository: https://github.com/gitthubpro/vmkeyboard

## Overview

This is an Android voice keyboard/input-method app. A user enables it, selects it in Android’s input-method settings, then types through the keyboard shown by the IME service; the service routes key actions to the active editor and coordinates suggestions, clipboard actions, speech input, and translation. The UI includes configurable layouts, themes, emoji, toolbar actions, and a separate AI-prompts activity. Edges reflect the excerpts and SOURCE INDEX references; some activity and runtime details were not sampled, so uncertain connections are omitted.

Main entry points: [`app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt`](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt) (Keyboard view), [`app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt`](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt) (IME service), [`app/src/main/java/com/volkan/voicekeyboard/ui/LayoutBuilder.kt`](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/LayoutBuilder.kt) (Layout builder), [`app/src/main/java/com/volkan/voicekeyboard/MainActivity.kt`](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/MainActivity.kt) (Keyboard settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["App setup"]
  node_main_activity["Keyboard settings<br/>[MainActivity.kt]"]
  node_prompts_activity["AI prompts"]
end

subgraph group_ime["Input method"]
  node_ime_service["IME service"]
  node_input_processor["Input processing<br/>[InputProcessor.kt]"]
  node_key_codes["Key codes<br/>[KeyCode.kt]"]
end

subgraph group_ui["Keyboard interface"]
  node_keyboard_view["Keyboard view<br/>[KeyboardView.kt]"]
  node_layout_builder["Layout builder<br/>[LayoutBuilder.kt]"]
  node_toolbar_builder["Toolbar builder<br/>[ToolbarBuilder.kt]"]
  node_suggestion_bar["Suggestion bar"]
  node_key_model["Key model<br/>[Key.kt]"]
  node_key_type["Key types<br/>[KeyType.kt]"]
  node_theme_data["Theme data<br/>[ThemeData.kt]"]
  node_keyboard_params["Keyboard parameters<br/>[KeyboardParams.kt]"]
end

subgraph group_capabilities["Input capabilities"]
  node_suggestions["Word suggestions"]
  node_clipboard["Clipboard and cursor"]
  node_speech["Speech recognition"]
  node_translation["Translation controller"]
  node_emoji_data["Emoji data<br/>[EmojiData.kt]"]
end

node_user(("User"))
node_android_settings["IME settings"]
node_editor["Active text editor"]
node_speech_service["Android speech service"]

node_user -->|"opens settings"| node_main_activity
node_main_activity -->|"opens IME settings"| node_android_settings
node_user -.->|"selects keyboard"| node_ime_service
node_ime_service -->|"creates view"| node_keyboard_view
node_keyboard_view -->|"attaches service"| node_ime_service
node_ime_service -.->|"commits input"| node_editor
node_ime_service -->|"delegates clipboard"| node_clipboard
node_ime_service -->|"handles speech"| node_speech
node_speech -->|"starts recognition"| node_speech_service
node_ime_service -->|"handles translation"| node_translation
node_ime_service -->|"loads and suggests"| node_suggestions
node_input_processor -->|"uses codes"| node_key_codes
node_keyboard_view -->|"builds layouts"| node_layout_builder
node_keyboard_view -->|"builds toolbar"| node_toolbar_builder
node_keyboard_view -->|"builds suggestions bar"| node_suggestion_bar
node_layout_builder -->|"uses emoji data"| node_emoji_data
node_layout_builder -->|"creates keys"| node_key_model
node_layout_builder -->|"assigns key types"| node_key_type
node_keyboard_view -->|"handles keys"| node_key_model
node_keyboard_view -->|"dispatches key types"| node_key_type
node_keyboard_view -->|"loads theme"| node_theme_data
node_keyboard_view -.->|"uses parameters"| node_keyboard_params
node_toolbar_builder -->|"opens settings"| node_main_activity

click node_main_activity "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/MainActivity.kt"
click node_prompts_activity "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/AiPromptsActivity.kt"
click node_ime_service "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt"
click node_input_processor "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/controller/InputProcessor.kt"
click node_key_codes "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/core/KeyCode.kt"
click node_suggestions "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/engine/SuggestionEngine.kt"
click node_clipboard "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/controller/ClipboardController.kt"
click node_speech "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/controller/SpeechController.kt"
click node_translation "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/controller/TranslationController.kt"
click node_emoji_data "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/emoji/EmojiData.kt"
click node_keyboard_view "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt"
click node_layout_builder "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/LayoutBuilder.kt"
click node_toolbar_builder "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/ToolbarBuilder.kt"
click node_suggestion_bar "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/SuggestionBarBuilder.kt"
click node_key_model "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/Key.kt"
click node_key_type "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/KeyType.kt"
click node_theme_data "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/ThemeData.kt"
click node_keyboard_params "https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardParams.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_activity,node_prompts_activity,node_user toneBlue
class node_ime_service,node_input_processor,node_key_codes toneAmber
class node_keyboard_view,node_layout_builder,node_toolbar_builder,node_suggestion_bar,node_key_model,node_key_type,node_theme_data,node_keyboard_params toneMint
class node_suggestions,node_clipboard,node_speech,node_translation,node_emoji_data toneRose
class node_android_settings,node_editor,node_speech_service toneIndigo
```

## Components

### App setup

- [Keyboard settings](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/MainActivity.kt): `app/src/main/java/com/volkan/voicekeyboard/MainActivity.kt`
- [AI prompts](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/AiPromptsActivity.kt): `app/src/main/java/com/volkan/voicekeyboard/AiPromptsActivity.kt`

### Input method

- [IME service](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt): `app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt`
- [Input processing](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/controller/InputProcessor.kt): `app/src/main/java/com/volkan/voicekeyboard/controller/InputProcessor.kt`
- [Key codes](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/core/KeyCode.kt): `app/src/main/java/com/volkan/voicekeyboard/core/KeyCode.kt`

### Keyboard interface

- [Keyboard view](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt): `app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt`
- [Layout builder](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/LayoutBuilder.kt): `app/src/main/java/com/volkan/voicekeyboard/ui/LayoutBuilder.kt`
- [Toolbar builder](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/ToolbarBuilder.kt): `app/src/main/java/com/volkan/voicekeyboard/ui/ToolbarBuilder.kt`
- [Suggestion bar](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/SuggestionBarBuilder.kt): `app/src/main/java/com/volkan/voicekeyboard/ui/SuggestionBarBuilder.kt`
- [Key model](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/Key.kt): `app/src/main/java/com/volkan/voicekeyboard/ui/Key.kt`
- [Key types](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/KeyType.kt): `app/src/main/java/com/volkan/voicekeyboard/ui/KeyType.kt`
- [Theme data](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/ThemeData.kt): `app/src/main/java/com/volkan/voicekeyboard/ui/ThemeData.kt`
- [Keyboard parameters](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardParams.kt): `app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardParams.kt`

### Input capabilities

- [Word suggestions](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/engine/SuggestionEngine.kt): `app/src/main/java/com/volkan/voicekeyboard/engine/SuggestionEngine.kt`
- [Clipboard and cursor](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/controller/ClipboardController.kt): `app/src/main/java/com/volkan/voicekeyboard/controller/ClipboardController.kt`
- [Speech recognition](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/controller/SpeechController.kt): `app/src/main/java/com/volkan/voicekeyboard/controller/SpeechController.kt`
- [Translation controller](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/controller/TranslationController.kt): `app/src/main/java/com/volkan/voicekeyboard/controller/TranslationController.kt`
- [Emoji data](https://github.com/gitthubpro/vmkeyboard/blob/main/app/src/main/java/com/volkan/voicekeyboard/emoji/EmojiData.kt): `app/src/main/java/com/volkan/voicekeyboard/emoji/EmojiData.kt`

### Other components

- **User**
- **IME settings**
- **Active text editor**
- **Android speech service**

## Connections

- User → Keyboard settings: opens settings (evidence: `app/src/main/java/com/volkan/voicekeyboard/MainActivity.kt`)
- Keyboard settings → IME settings: opens IME settings (evidence: `app/src/main/java/com/volkan/voicekeyboard/MainActivity.kt`)
- User → IME service: selects keyboard
- IME service → Keyboard view: creates view (evidence: `app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt`)
- Keyboard view → IME service: attaches service (evidence: `app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt`)
- IME service → Active text editor: commits input
- IME service → Clipboard and cursor: delegates clipboard (evidence: `app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt`)
- IME service → Speech recognition: handles speech (evidence: `app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt`)
- Speech recognition → Android speech service: starts recognition (evidence: `app/src/main/java/com/volkan/voicekeyboard/controller/SpeechController.kt`)
- IME service → Translation controller: handles translation (evidence: `app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt`)
- IME service → Word suggestions: loads and suggests (evidence: `app/src/main/java/com/volkan/voicekeyboard/ime/VoiceKeyboardService.kt`)
- Input processing → Key codes: uses codes (evidence: `app/src/main/java/com/volkan/voicekeyboard/controller/InputProcessor.kt`)
- Keyboard view → Layout builder: builds layouts (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt`)
- Keyboard view → Toolbar builder: builds toolbar (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt`)
- Keyboard view → Suggestion bar: builds suggestions bar (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt`)
- Layout builder → Emoji data: uses emoji data (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/LayoutBuilder.kt`)
- Layout builder → Key model: creates keys (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/LayoutBuilder.kt`)
- Layout builder → Key types: assigns key types (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/LayoutBuilder.kt`)
- Keyboard view → Key model: handles keys (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt`)
- Keyboard view → Key types: dispatches key types (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt`)
- Keyboard view → Theme data: loads theme (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/KeyboardView.kt`)
- Keyboard view → Keyboard parameters: uses parameters
- Toolbar builder → Keyboard settings: opens settings (evidence: `app/src/main/java/com/volkan/voicekeyboard/ui/ToolbarBuilder.kt`)
