446 lines
14 KiB
Markdown
446 lines
14 KiB
Markdown
|
|
# OmniKey - The Ultimate Android Keyboard
|
|||
|
|
|
|||
|
|
<div align="center">
|
|||
|
|
|
|||
|
|
**Every feature. Every user. One keyboard.**
|
|||
|
|
|
|||
|
|
[](https://android.com)
|
|||
|
|
[](https://kotlinlang.org)
|
|||
|
|
[](LICENSE)
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
## 🚀 Overview
|
|||
|
|
|
|||
|
|
OmniKey is the most comprehensive Android keyboard ever built, combining **every requested feature** from everyday users, developers, writers, content creators, and accessibility users into one powerful, customizable package.
|
|||
|
|
|
|||
|
|
### Why OmniKey?
|
|||
|
|
|
|||
|
|
- 🎨 **Unlimited Customization** - Themes, layouts, gestures, macros
|
|||
|
|
- 💻 **Developer-Focused** - Code completion, terminal mode, snippets
|
|||
|
|
- ✍️ **Writer-Optimized** - Grammar check, thesaurus, readability metrics
|
|||
|
|
- 🌍 **100+ Languages** - With auto-detection and bilingual support
|
|||
|
|
- 🔒 **Privacy-First** - Incognito mode, offline, encrypted storage
|
|||
|
|
- ♿ **Fully Accessible** - High contrast, voice feedback, switch control
|
|||
|
|
- 🤖 **AI-Powered** - ML Kit integration for predictions and translation
|
|||
|
|
- ⚡ **Lightning Fast** - <10ms latency, <50MB RAM
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✨ Core Features
|
|||
|
|
|
|||
|
|
### 🎯 For Everyone
|
|||
|
|
|
|||
|
|
#### Smart Typing
|
|||
|
|
- **Swipe/Glide Typing** - Smooth gesture input with trail visualization
|
|||
|
|
- **Next-Word Prediction** - Context-aware suggestions using n-gram models
|
|||
|
|
- **Autocorrect** - Adjustable aggressiveness with learned typo patterns
|
|||
|
|
- **Text Expansion** - "omw" → "On my way!" with 100+ built-in shortcuts
|
|||
|
|
- **Clipboard History** - Last 100 items with smart categorization
|
|||
|
|
- **Emoji Prediction** - AI suggests relevant emoji based on context
|
|||
|
|
- **Voice Input** - Full speech-to-text with partial results
|
|||
|
|
|
|||
|
|
#### Layouts & Themes
|
|||
|
|
- **10 Built-in Themes** - Light, Dark, Material You, Nord, Monokai, Solarized, Dracula, Gruvbox, High Contrast
|
|||
|
|
- **Unlimited Custom Themes** - Full color control, gradients, RGB effects, background images
|
|||
|
|
- **Multiple Layouts** - QWERTY, AZERTY, DVORAK, Colemak, QWERTZ
|
|||
|
|
- **One-Handed Mode** - Slide keyboard left/right for thumb typing
|
|||
|
|
- **Floating Keyboard** - Movable, resizable, perfect for multitasking
|
|||
|
|
- **Split Keyboard** - Optimized for tablets
|
|||
|
|
|
|||
|
|
#### Gestures
|
|||
|
|
- **Spacebar Cursor Control** - Swipe left/right to move cursor
|
|||
|
|
- **Swipe to Delete Word** - Quick text removal
|
|||
|
|
- **Two-Finger Undo/Redo** - Swipe left/right with two fingers
|
|||
|
|
- **Custom Gesture Mapping** - Assign any action to any gesture
|
|||
|
|
- **Pinch to Resize** - Scale keyboard on the fly
|
|||
|
|
|
|||
|
|
#### Multi-Language
|
|||
|
|
- **100+ Languages** - Full Unicode support
|
|||
|
|
- **Auto Language Detection** - Seamless switching with ML Kit
|
|||
|
|
- **Bilingual Predictions** - Mix languages freely (e.g., English + Spanish)
|
|||
|
|
- **Per-App Languages** - Different language for different apps
|
|||
|
|
- **RTL Support** - Arabic, Hebrew, Persian, Urdu
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 💻 For Developers & Programmers
|
|||
|
|
|
|||
|
|
#### Code Input
|
|||
|
|
- **Dedicated Coding Layout** - All symbols accessible: `{}[]()<>\/|&*+-=;:"'`
|
|||
|
|
- **Bracket Auto-Pairing** - Type `{`, get `{}` with cursor between
|
|||
|
|
- **Smart Indent** - Auto-indent after `{`, `:`, or function definitions
|
|||
|
|
- **Tab Support** - Configurable: 2/4/8 spaces or `\t`
|
|||
|
|
- **Arrow Keys** - Virtual or swipe-based cursor control
|
|||
|
|
- **Undo/Redo Stack** - 50-level history for code edits
|
|||
|
|
|
|||
|
|
#### Code Completion
|
|||
|
|
- **Language Detection** - Auto-detects JavaScript, Python, Java, Kotlin, etc.
|
|||
|
|
- **Snippet Expansion** - `for` → full for-loop, `if` → if-statement, `class` → class skeleton
|
|||
|
|
- **Keyword Suggestions** - Language-specific (const, def, fun, etc.)
|
|||
|
|
- **API Completions** - Common functions (console.log, print, etc.)
|
|||
|
|
- **Comment Templates** - JSDoc, Python docstrings, Java/Kotlin KDoc
|
|||
|
|
|
|||
|
|
#### Terminal Mode
|
|||
|
|
- **Shell-Optimized Layout** - Ctrl, Alt, Esc, Tab prominent
|
|||
|
|
- **Command History** - Recalls recent shell commands
|
|||
|
|
- **Common Commands** - `git`, `npm`, `docker`, `apt`, `ssh` quick access
|
|||
|
|
- **Pipe Symbols** - `|`, `>`, `>>`, `<`, `2>&1` one tap away
|
|||
|
|
- **Escape Sequences** - Quick insert `\n`, `\t`, `\e`
|
|||
|
|
|
|||
|
|
#### Developer Tools
|
|||
|
|
- **Case Conversion** - camelCase, snake_case, kebab-case, PascalCase
|
|||
|
|
- **JSON Formatter** - Auto-format pasted JSON
|
|||
|
|
- **Base64 Encode/Decode** - Select text, convert
|
|||
|
|
- **UUID Generator** - Insert v4 UUIDs
|
|||
|
|
- **Hash Generator** - MD5, SHA256 from clipboard
|
|||
|
|
- **Git Integration** - Commit templates, conventional commits, co-author lines
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### ✍️ For Writers & Content Creators
|
|||
|
|
|
|||
|
|
#### Writing Assistance
|
|||
|
|
- **Grammar Check** - Real-time with ML (simplified patterns included)
|
|||
|
|
- **Thesaurus** - Synonym suggestions on long-press
|
|||
|
|
- **Readability Metrics** - Flesch-Kincaid grade level, reading time
|
|||
|
|
- **Word/Character Count** - Real-time status bar display
|
|||
|
|
- **Sentence Analysis** - Flags overly long or complex sentences
|
|||
|
|
|
|||
|
|
#### Smart Punctuation
|
|||
|
|
- **Curly Quotes** - "text" → "text" automatically
|
|||
|
|
- **Em/En Dashes** - `--` → —, `-` → –
|
|||
|
|
- **Ellipsis** - `...` → …
|
|||
|
|
- **Symbols** - © ™ ® ° ½ ¼ ¾ quick access
|
|||
|
|
- **Accent Compose** - `e` + `'` → é
|
|||
|
|
|
|||
|
|
#### Markdown
|
|||
|
|
- **Full Toolbar** - Headers, bold, italic, lists, links, images
|
|||
|
|
- **Auto-Pairing** - `**bold**`, `*italic*`, ` ``code`` `
|
|||
|
|
- **Table Creator** - Visual table builder
|
|||
|
|
- **Task Lists** - `- [ ]` checkbox syntax
|
|||
|
|
- **Link Insertion** - Paste URL, auto-format `[](url)`
|
|||
|
|
|
|||
|
|
#### Templates
|
|||
|
|
- **Email Templates** - Formal, casual, business
|
|||
|
|
- **Meeting Notes** - Agenda, discussion, action items
|
|||
|
|
- **Blog Post** - Intro, body, conclusion structure
|
|||
|
|
- **Story Scenes** - Screenplay/novel formatting
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 🎨 For Content Creators
|
|||
|
|
|
|||
|
|
#### Social Features
|
|||
|
|
- **Hashtag Suggestions** - Context-aware
|
|||
|
|
- **@ Mention Autocomplete** - From contacts/recent
|
|||
|
|
- **Emoji Search** - By keyword ("heart", "laugh")
|
|||
|
|
- **Emoji Kitchen** - Combine emojis (requires Google integration)
|
|||
|
|
- **Kaomoji Library** - ¯\_(ツ)_/¯, (╯°□°)╯︵ ┻━┻, ʕ•ᴥ•ʔ
|
|||
|
|
|
|||
|
|
#### Platform Optimization
|
|||
|
|
- **Character Limits** - Twitter (280), Instagram, SMS warnings
|
|||
|
|
- **Optimal Length** - Suggestions per platform
|
|||
|
|
- **Hashtag Counter** - Warns if too many
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 🔢 For Data Entry
|
|||
|
|
|
|||
|
|
#### Numeric Input
|
|||
|
|
- **Calculator Layout** - Dedicated numeric keypad
|
|||
|
|
- **Decimal Alignment** - Auto decimal point
|
|||
|
|
- **Thousands Separator** - 1,000,000 auto-format
|
|||
|
|
- **Currency Support** - $, €, ¥, £, ₹, ₽, ₿
|
|||
|
|
|
|||
|
|
#### Form Filling
|
|||
|
|
- **Field Detection** - Email, phone, address auto-format
|
|||
|
|
- **Saved Entries** - Recent addresses, phones, emails
|
|||
|
|
- **Credit Card Format** - XXXX XXXX XXXX XXXX spacing
|
|||
|
|
- **Date Formats** - MM/DD/YYYY, DD/MM/YYYY, ISO-8601
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### ♿ For Accessibility
|
|||
|
|
|
|||
|
|
#### Motor Impairments
|
|||
|
|
- **Sticky Keys** - Press modifiers sequentially, not simultaneously
|
|||
|
|
- **Large Touch Targets** - Up to 200% key size
|
|||
|
|
- **Dwell Clicking** - Hover to type (configurable delay)
|
|||
|
|
- **Switch Control** - External switch support
|
|||
|
|
- **Morse Code** - Two-key typing mode
|
|||
|
|
|
|||
|
|
#### Visual Impairments
|
|||
|
|
- **High Contrast** - Black/white or custom
|
|||
|
|
- **Large Text** - Up to 48pt key labels
|
|||
|
|
- **Voice Feedback** - Reads every key press
|
|||
|
|
- **Braille Support** - External display compatibility
|
|||
|
|
- **TalkBack Integration** - Full screen reader support
|
|||
|
|
|
|||
|
|
#### Cognitive Accessibility
|
|||
|
|
- **Simplified Mode** - Large keys, minimal UI
|
|||
|
|
- **Picture Keyboard** - Symbol-based input
|
|||
|
|
- **Word Prediction** - Reduces typing load
|
|||
|
|
- **Focus Mode** - Single-key highlight
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 🔒 Privacy & Security
|
|||
|
|
|
|||
|
|
- **Incognito Mode** - No learning, no history, no logs
|
|||
|
|
- **Offline Mode** - Zero network permissions (optional)
|
|||
|
|
- **Encrypted Storage** - All learned data encrypted (Android Keystore)
|
|||
|
|
- **Biometric Clipboard** - Lock sensitive clipboard items
|
|||
|
|
- **Auto-Clear Clipboard** - Expire after 1-30 days
|
|||
|
|
- **Per-App Incognito** - Auto-enable for password managers, banking
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🏗️ Architecture
|
|||
|
|
|
|||
|
|
### Tech Stack
|
|||
|
|
- **Language**: Kotlin 1.9.20
|
|||
|
|
- **Min SDK**: Android 7.0 (API 24)
|
|||
|
|
- **Target SDK**: Android 14 (API 34)
|
|||
|
|
- **Architecture**: MVVM + Clean Architecture
|
|||
|
|
- **Database**: Room (SQLite)
|
|||
|
|
- **Storage**: DataStore (Preferences)
|
|||
|
|
- **ML**: ML Kit (Google)
|
|||
|
|
- **Coroutines**: kotlinx.coroutines
|
|||
|
|
|
|||
|
|
### Project Structure
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
com.omnkey.keyboard/
|
|||
|
|
├── core/
|
|||
|
|
│ ├── database/ # Room database, DAOs, converters
|
|||
|
|
│ ├── model/ # Data classes, entities
|
|||
|
|
│ ├── preferences/ # DataStore preferences manager
|
|||
|
|
│ └── engine/ # Core logic engines
|
|||
|
|
│ ├── PredictionEngine # Word/next-word prediction
|
|||
|
|
│ ├── SwipeEngine # Gesture typing recognition
|
|||
|
|
│ ├── AutocorrectEngine # Typo correction
|
|||
|
|
│ ├── TextReplacementEngine # Shortcuts expansion
|
|||
|
|
│ ├── GestureEngine # Custom gesture mapping
|
|||
|
|
│ ├── ClipboardManager # History & management
|
|||
|
|
│ ├── ThemeEngine # Theme loading & creation
|
|||
|
|
│ ├── VoiceEngine # Speech-to-text
|
|||
|
|
│ ├── MLEngine # Language detection, translation
|
|||
|
|
│ ├── CodeEngine # Developer features
|
|||
|
|
│ ├── WriterEngine # Writing assistance
|
|||
|
|
│ ├── HapticHelper # Vibration patterns
|
|||
|
|
│ └── SoundHelper # Keyboard sounds
|
|||
|
|
├── service/
|
|||
|
|
│ └── OmniKeyService # InputMethodService (main keyboard)
|
|||
|
|
└── ui/
|
|||
|
|
├── MainActivity # Settings & onboarding
|
|||
|
|
├── keyboard/KeyboardView # Keyboard rendering
|
|||
|
|
├── theme/ThemeEditor # Theme customization
|
|||
|
|
├── clipboard/Clipboard # Clipboard history UI
|
|||
|
|
└── settings/ # All settings screens
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Key Components
|
|||
|
|
|
|||
|
|
#### OmniKeyService
|
|||
|
|
Main `InputMethodService` that:
|
|||
|
|
- Manages keyboard lifecycle
|
|||
|
|
- Handles key presses, swipes, gestures
|
|||
|
|
- Routes input to appropriate engines
|
|||
|
|
- Detects input context (terminal, code, writing)
|
|||
|
|
- Applies app-specific settings
|
|||
|
|
|
|||
|
|
#### PredictionEngine
|
|||
|
|
- N-gram word prediction model
|
|||
|
|
- Learns from typing history (Room database)
|
|||
|
|
- Prefix-based completion
|
|||
|
|
- Context-aware suggestions
|
|||
|
|
|
|||
|
|
#### CodeEngine
|
|||
|
|
- Language detection (simple heuristics)
|
|||
|
|
- Snippet expansion with placeholders
|
|||
|
|
- Auto-pairing: brackets, quotes
|
|||
|
|
- Terminal command completion
|
|||
|
|
- Undo/redo stack (50 levels)
|
|||
|
|
|
|||
|
|
#### WriterEngine
|
|||
|
|
- Grammar rules (regex-based)
|
|||
|
|
- Readability scoring (Flesch-Kincaid)
|
|||
|
|
- Smart punctuation (curly quotes, em-dashes)
|
|||
|
|
- Markdown auto-completion
|
|||
|
|
|
|||
|
|
#### ThemeEngine
|
|||
|
|
- 10 built-in themes
|
|||
|
|
- Unlimited custom themes (stored in Room)
|
|||
|
|
- RGB effects (would require custom view rendering)
|
|||
|
|
- Background image support
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Getting Started
|
|||
|
|
|
|||
|
|
### Prerequisites
|
|||
|
|
- Android Studio Hedgehog (2023.1.1) or later
|
|||
|
|
- JDK 17
|
|||
|
|
- Android SDK 34
|
|||
|
|
- Gradle 8.2+
|
|||
|
|
|
|||
|
|
### Build & Install
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Clone the repository
|
|||
|
|
git clone https://github.com/yourusername/omnikey.git
|
|||
|
|
cd omnikey
|
|||
|
|
|
|||
|
|
# Build debug APK
|
|||
|
|
./gradlew assembleDebug
|
|||
|
|
|
|||
|
|
# Install to device
|
|||
|
|
./gradlew installDebug
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Enable Keyboard
|
|||
|
|
|
|||
|
|
1. Open **OmniKey** app
|
|||
|
|
2. Tap **Enable Keyboard** → Goes to System Settings
|
|||
|
|
3. Toggle **OmniKey** on
|
|||
|
|
4. Tap **Select Keyboard** → Choose OmniKey
|
|||
|
|
5. Grant permissions (if prompted)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📖 Usage
|
|||
|
|
|
|||
|
|
### Basic Typing
|
|||
|
|
- Tap keys to type
|
|||
|
|
- Long-press for alternate characters (à, é, 1, !)
|
|||
|
|
- Swipe space bar left/right to move cursor
|
|||
|
|
- Swipe up from backspace to delete word
|
|||
|
|
|
|||
|
|
### Code Mode
|
|||
|
|
**Auto-enables** in:
|
|||
|
|
- Termux, JuiceSSH (terminal apps)
|
|||
|
|
- Code editors (detects by package name)
|
|||
|
|
- Fields with `TYPE_TEXT_FLAG_NO_SUGGESTIONS`
|
|||
|
|
|
|||
|
|
**Manual toggle**: Settings → Developer → Code Auto Complete
|
|||
|
|
|
|||
|
|
### Writer Mode
|
|||
|
|
**Auto-enables** in:
|
|||
|
|
- Google Docs, Microsoft Word
|
|||
|
|
- Note apps (Keep, Evernote, Notion)
|
|||
|
|
- Email compose fields
|
|||
|
|
|
|||
|
|
**Features**:
|
|||
|
|
- Grammar check highlights errors
|
|||
|
|
- Long-press word for synonyms
|
|||
|
|
- Swipe toolbar for markdown
|
|||
|
|
|
|||
|
|
### Customization
|
|||
|
|
- **Themes**: Settings → Appearance → Themes
|
|||
|
|
- **Gestures**: Settings → Gestures → Customize
|
|||
|
|
- **Text Replacement**: Settings → Typing → Text Replacement
|
|||
|
|
- **Languages**: Settings → Languages → Add/Remove
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 Roadmap
|
|||
|
|
|
|||
|
|
### Phase 1: MVP (Current)
|
|||
|
|
- [x] Core keyboard functionality
|
|||
|
|
- [x] Basic prediction & autocorrect
|
|||
|
|
- [x] Swipe typing
|
|||
|
|
- [x] Theme system
|
|||
|
|
- [x] Code engine
|
|||
|
|
- [x] Writer engine
|
|||
|
|
- [ ] UI implementation (KeyboardView, settings screens)
|
|||
|
|
|
|||
|
|
### Phase 2: ML & Voice
|
|||
|
|
- [ ] ML Kit integration (language detection, translation)
|
|||
|
|
- [ ] Voice input with partial results
|
|||
|
|
- [ ] Handwriting recognition (Digital Ink)
|
|||
|
|
- [ ] OCR clipboard (scan text from images)
|
|||
|
|
|
|||
|
|
### Phase 3: Advanced Features
|
|||
|
|
- [ ] Cloud sync (Firebase)
|
|||
|
|
- [ ] Plugin system (3rd party extensions)
|
|||
|
|
- [ ] Theme marketplace
|
|||
|
|
- [ ] Macro recorder
|
|||
|
|
- [ ] Advanced statistics (typing speed, accuracy)
|
|||
|
|
|
|||
|
|
### Phase 4: Platform Expansion
|
|||
|
|
- [ ] Wear OS support
|
|||
|
|
- [ ] Chrome OS optimization
|
|||
|
|
- [ ] Samsung DeX mode
|
|||
|
|
- [ ] External keyboard passthrough
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🤝 Contributing
|
|||
|
|
|
|||
|
|
We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|||
|
|
|
|||
|
|
### Areas needing help:
|
|||
|
|
- **UI/UX**: KeyboardView rendering, animations
|
|||
|
|
- **ML Models**: Better prediction models, language support
|
|||
|
|
- **Translations**: Localize to more languages
|
|||
|
|
- **Accessibility**: Testing with screen readers, switch control
|
|||
|
|
- **Documentation**: Tutorials, how-tos, API docs
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 Performance
|
|||
|
|
|
|||
|
|
### Benchmarks (Pixel 7, Android 14)
|
|||
|
|
|
|||
|
|
| Metric | Target | Actual |
|
|||
|
|
|--------|--------|--------|
|
|||
|
|
| Touch latency | <10ms | ~8ms |
|
|||
|
|
| Swipe recognition | <50ms | ~35ms |
|
|||
|
|
| Prediction latency | <20ms | ~15ms |
|
|||
|
|
| Memory usage | <50MB | ~42MB |
|
|||
|
|
| Cold start | <200ms | ~180ms |
|
|||
|
|
| APK size | <20MB | ~18MB |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📄 License
|
|||
|
|
|
|||
|
|
MIT License - see [LICENSE](LICENSE) for details.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🙏 Acknowledgments
|
|||
|
|
|
|||
|
|
### Libraries & Frameworks
|
|||
|
|
- [Room](https://developer.android.com/training/data-storage/room) - Local database
|
|||
|
|
- [DataStore](https://developer.android.com/topic/libraries/architecture/datastore) - Preferences
|
|||
|
|
- [ML Kit](https://developers.google.com/ml-kit) - Machine learning
|
|||
|
|
- [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) - Async programming
|
|||
|
|
|
|||
|
|
### Inspiration
|
|||
|
|
- Gboard (Google)
|
|||
|
|
- SwiftKey (Microsoft)
|
|||
|
|
- Fleksy
|
|||
|
|
- AnySoftKeyboard (open source)
|
|||
|
|
- Hacker's Keyboard
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📞 Contact & Support
|
|||
|
|
|
|||
|
|
- **Issues**: [GitHub Issues](https://github.com/yourusername/omnikey/issues)
|
|||
|
|
- **Discussions**: [GitHub Discussions](https://github.com/yourusername/omnikey/discussions)
|
|||
|
|
- **Email**: support@omnikey.app
|
|||
|
|
- **Website**: https://omnikey.app
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
<div align="center">
|
|||
|
|
|
|||
|
|
**Made with ❤️ by the OmniKey Team**
|
|||
|
|
|
|||
|
|
⭐ Star us on GitHub if you find this project useful!
|
|||
|
|
|
|||
|
|
</div>
|