feat(coding): improve keyboard UI with icons, layers, and emoji #2

Merged
addison merged 51 commits from exe-dev-bot/keyboard:feat/keyboard-ui-improvements into main 2026-01-29 07:09:57 -05:00
Contributor

Summary

Major UI improvements to the coding keyboard mode.

Changes

Visual Improvements

  • Replace UTF-8 symbols with Material vector icons (backspace, enter, shift, space, arrows)
  • Remove gaps between keys (reduced to 1px margins)
  • Fix keyboard height to ~1/3 of screen (matches standard keyboards)
  • Add staggered row offsets (ASDF row offset by 0.5 key width on each side)

Layer 3 (New)

  • Function keys F1-F12
  • Navigation keys (Home, End, PgUp, PgDn, Ins, Del, PrtSc, Pause)
  • Common emoji (😀😂❤️👍👎🔥🎉👏🤔😢😠👀💯🚀👋🙏💪🤷👌)

Consistency Fixes

  • Layer buttons always in bottom right corner across all layers
  • Consistent row weights and structure between layers
  • Backspace always on row 4, enter always on row 5

Developer Experience

  • New justfile recipes: show-keyboard, open-textfield, tap
  • Updated AGENTS.md with keyboard layout conventions and ADB tips

Testing

just run && just show-keyboard

Then tap L2 → L3 to see all layers.

## Summary Major UI improvements to the coding keyboard mode. ## Changes ### Visual Improvements - Replace UTF-8 symbols with Material vector icons (backspace, enter, shift, space, arrows) - Remove gaps between keys (reduced to 1px margins) - Fix keyboard height to ~1/3 of screen (matches standard keyboards) - Add staggered row offsets (ASDF row offset by 0.5 key width on each side) ### Layer 3 (New) - Function keys F1-F12 - Navigation keys (Home, End, PgUp, PgDn, Ins, Del, PrtSc, Pause) - Common emoji (😀😂❤️👍👎🔥✅❌⭐🎉👏🤔😢😠👀💯🚀✨👋🙏💪🤷👌) ### Consistency Fixes - Layer buttons always in bottom right corner across all layers - Consistent row weights and structure between layers - Backspace always on row 4, enter always on row 5 ### Developer Experience - New justfile recipes: `show-keyboard`, `open-textfield`, `tap` - Updated AGENTS.md with keyboard layout conventions and ADB tips ## Testing ```bash just run && just show-keyboard ``` Then tap L2 → L3 to see all layers.
- InputMethodService with three modes (Image, Coding, Voice)
- Image/OCR mode using ML Kit text recognition
- Coding mode with sticky modifier keys (Ctrl, Alt, Super, Tab, Esc)
- Voice mode with OpenRouter Whisper transcription
- Settings activity with encrypted API key storage
- Material 3 dark theme
- Gradle Kotlin DSL build configuration
- justfile for common tasks
- Forgejo Actions CI/CD workflows

Co-authored-by: Shelley <shelley@exe.dev>
- Add high-quality launcher icons for all Android densities
- Add adaptive icon foreground PNG for Android 8+
- Icon features bold K letter in primary purple (#BB86FC) on dark background
- Generated from 512x512 source and resized with ImageMagick

Co-authored-by: Shelley <shelley@exe.dev>
- Full QWERTY layout with numbers and symbols
- Arrow keys (←↑↓→) for cursor navigation
- Enter, Backspace, Space keys
- Shift key (sticky like other modifiers)
- All keys work with Ctrl/Alt/Super modifiers
- Modifiers auto-release after keypress

Co-authored-by: Shelley <shelley@exe.dev>
feat(coding): implement two-layer shell-optimized keyboard
Some checks failed
PR Build / build (pull_request) Failing after 51s
4e233a72cc
Layer 1 (Primary):
- Full QWERTY with numbers
- High-frequency symbols: - / . $ (ranks 1-4 in shell usage)
- Esc, Ctrl, Tab on bottom row
- Tap L2 to toggle layers

Layer 2 (Navigation & Symbols):
- All brackets: [] {} () <>
- Terminal symbols: | > : ~ = ; " ' \ `
- Arrow keys in natural cluster
- Alt, Super modifiers
- Tap L1 to return

Sticky modifiers with visual feedback (purple highlight when armed)

Co-authored-by: Shelley <shelley@exe.dev>
fix(ci): use full GitHub URLs for actions
Some checks failed
PR Build / build (pull_request) Failing after 8m30s
6d1a1da3e1
Co-authored-by: Shelley <shelley@exe.dev>
fix(ci): use upload-artifact v3 for Forgejo compatibility
All checks were successful
PR Build / build (pull_request) Successful in 7m54s
27741589f1
Co-authored-by: Shelley <shelley@exe.dev>
fix: use MaterialComponents theme for TabLayout compatibility
Some checks failed
PR Build / build (pull_request) Has been cancelled
43cab8e218
Co-authored-by: Shelley <shelley@exe.dev>
refactor: change package to dev.kwila.keyboard and use kwila logo
Some checks failed
PR Build / build (pull_request) Has been cancelled
7002a9dbfa
- Changed app ID from cloud.kwila.keyboard to dev.kwila.keyboard
- Updated launcher icons to use official Kwila logo from kwila.dev

Co-authored-by: Shelley <shelley@exe.dev>
fix: use app name for launcher activity label
All checks were successful
PR Build / build (pull_request) Successful in 10m13s
e7fe4556c0
Co-authored-by: Shelley <shelley@exe.dev>
fix: show helpful message when API key not configured
Some checks failed
PR Build / build (pull_request) Has been cancelled
d53793602e
Voice mode now shows 'Set OpenRouter API key in settings' and
disables the mic button when no API key is set.

Co-authored-by: Shelley <shelley@exe.dev>
fix: update package name in justfile uninstall recipe
Some checks failed
PR Build / build (pull_request) Has been cancelled
2d32e5b2d1
Co-authored-by: Shelley <shelley@exe.dev>
fix: use NoActionBar theme variant for Material Components
Some checks failed
PR Build / build (pull_request) Has been cancelled
b63e8cf82f
Co-authored-by: Shelley <shelley@exe.dev>
feat(settings): add buttons to enable and select keyboard
All checks were successful
PR Build / build (pull_request) Successful in 8m49s
8634adbc28
- 'Enable Kwila Keyboard' opens system input method settings
- 'Select Input Method' shows the keyboard picker dialog
- Changed Material3 styles to MaterialComponents for compatibility
- Allow clearing API key (voice mode is optional)

Co-authored-by: Shelley <shelley@exe.dev>
fix(service): wrap inflater with themed context for Material components
All checks were successful
PR Build / build (pull_request) Successful in 7m50s
ebe1f6622a
InputMethodService doesn't inherit app theme, causing TabLayout crash.
Use ContextThemeWrapper to apply Theme.KwilaKeyboard to inflated views.

Co-authored-by: Shelley <shelley@exe.dev>
fix(settings): remove duplicate hint from API key input
Some checks failed
PR Build / build (pull_request) Has been cancelled
b792f40d37
Co-authored-by: Shelley <shelley@exe.dev>
feat(keyboard): ui improvements
All checks were successful
PR Build / build (pull_request) Successful in 8m43s
1111069ff6
- remove rounded corners from keys
- make coding mode the default
- move period next to $ and enter above L2
- mark image and voice modes as coming soon

Co-authored-by: Shelley <shelley@exe.dev>
fix(ime): correct settings activity package name in method.xml
All checks were successful
PR Build / build (pull_request) Successful in 9m4s
9db574e259
Co-authored-by: Shelley <shelley@exe.dev>
Co-authored-by: Shelley <shelley@exe.dev>
feat(dev): add emulator management commands to justfile
All checks were successful
PR Build / build (pull_request) Successful in 7m20s
e4e62121d8
Co-authored-by: Shelley <shelley@exe.dev>
docs: update AGENTS.md with emulator testing workflow
All checks were successful
PR Build / build (pull_request) Successful in 11m11s
43314b5df8
Co-authored-by: Shelley <shelley@exe.dev>
docs: make emulator instructions more general
All checks were successful
PR Build / build (pull_request) Successful in 10m32s
b36f169ffa
Co-authored-by: Shelley <shelley@exe.dev>
feat(coding): improve keyboard UI with icons, layers, and emoji
All checks were successful
PR Build / build (pull_request) Successful in 11m19s
0c35af27e2
- Replace UTF-8 symbols with Material vector icons for backspace, enter,
  shift, space, and arrow keys
- Remove gaps between keys (1px margins)
- Fix keyboard height to ~1/3 screen
- Add staggered row offsets (ASDF row offset by 0.5 key)
- Add Layer 3 with function keys (F1-F12), navigation, and common emoji
- Make layer buttons consistent (always bottom right corner)
- Update AGENTS.md with keyboard layout conventions and ADB tips
- Add justfile recipes: show-keyboard, open-textfield, tap

Co-authored-by: Shelley <shelley@exe.dev>

📦 Build Successful!

Commit: 0c35af2
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `0c35af2` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/445/artifacts/kwila-keyboard-debug)
fix(coding): handle shift key on layer 3
All checks were successful
PR Build / build (pull_request) Successful in 8m36s
973cde6591
Co-authored-by: Shelley <shelley@exe.dev>
ci: use shared debug keystore for consistent APK signing
Some checks failed
PR Build / build (pull_request) Failing after 8m49s
e070fee88b
Co-authored-by: Shelley <shelley@exe.dev>

📦 Build Successful!

Commit: 973cde6
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `973cde6` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/446/artifacts/kwila-keyboard-debug)
feat(coding): reduce to 4 rows, move numbers to L2
Some checks failed
PR Build / build (pull_request) Failing after 8m37s
b8fe89991c
- Layer 1: QWERTY only (4 rows, bigger keys for easier tapping)
- Layer 2: Numbers + symbols + modifiers (Esc, Tab, Ctrl, Alt, Super)
- Layer 3: F1-F12, navigation keys, emoji

All layers now have consistent 4-row layout.

Co-authored-by: Shelley <shelley@exe.dev>
feat(coding): consistent space position, add / to L1, simplify L3
Some checks failed
PR Build / build (pull_request) Failing after 8m16s
816db96567
- Space is now 3 keys wide at consistent position on L1 and L2
- Added / key to L1 bottom row
- Removed arrows and space from L3 (available on L2)
- L3 now has more emoji space

Co-authored-by: Shelley <shelley@exe.dev>
docs+feat: add layer design rules, L3 only has L1 button
Some checks failed
PR Build / build (pull_request) Failing after 8m50s
3c81396bd2
AGENTS.md:
- Document layer design rules for consistent key positions
- L3 only accessible from L2
- L1 accessible from all layers
- Space/Enter/Backspace only on L1/L2

CodingModeHandler:
- Remove backspace and L2 button from L3
- L3 now only has L1 button for easy return to default

Co-authored-by: Shelley <shelley@exe.dev>
feat(coding): arrows at hjkl positions, better centered space, bigger layer buttons
Some checks failed
PR Build / build (pull_request) Failing after 8m13s
04cc1aae0d
- Arrows on L2 row 2 now align with hjkl on L1 row 2 (vim-style)
- Space bar shifted one key right for better centering on L1 and L2
- L1/L3 buttons on L2 are now 0.75 weight instead of 0.5 (easier to tap)

Co-authored-by: Shelley <shelley@exe.dev>
fix(coding): ensure shared keys at same position across layers
Some checks failed
PR Build / build (pull_request) Failing after 8m22s
088245ec36
- Ctrl now at position 0 on both L1 and L2
- Backspace now 1.5 weight on L2 row 3 (same as L1)
- Space and Enter already consistent

Co-authored-by: Shelley <shelley@exe.dev>
feat(coding): add Esc to L1, Alt to L2, fix shared key positions
Some checks failed
PR Build / build (pull_request) Failing after 8m33s
1a58e9bb1a
- Esc now on L1 row 4 (position 1-2)
- Alt now on L2 row 4 (position 1-2)
- Comma on L2 at same position as period on L1 (position 2-3)
- Tab moved to L2 row 2
- All keys >= 1 width (no tiny buttons)
- Shared keys (Ctrl, Space, Enter) at same positions on both layers

Co-authored-by: Shelley <shelley@exe.dev>
docs: update AGENTS.md with layer design rules and layouts
Some checks failed
PR Build / build (pull_request) Failing after 7m33s
909812a819
- Add minimum key width rule (no key < 1 unit)
- Document current layer layouts for L1, L2, L3
- Document shared key positions (Ctrl, Space, Enter, Backspace)
- Note arrows at hjkl positions (vim-style)
- Update keyboard layout conventions for 4-row design

Co-authored-by: Shelley <shelley@exe.dev>
ci: trigger rebuild with new keystore
Some checks failed
PR Build / build (pull_request) Failing after 9m1s
f7d72e363c
Co-authored-by: Shelley <shelley@exe.dev>
feat(coding): update emoji selection per user preference
Some checks failed
PR Build / build (pull_request) Failing after 9m5s
707a1f1e69
Co-authored-by: Shelley <shelley@exe.dev>
ci: trigger rebuild with updated keystore
Some checks failed
PR Build / build (pull_request) Failing after 8m19s
2478015247
Co-authored-by: Shelley <shelley@exe.dev>
ci: trigger rebuild with JKS keystore
Some checks failed
PR Build / build (pull_request) Failing after 8m3s
fa6afc6192
Co-authored-by: Shelley <shelley@exe.dev>
ci: add debug output for keystore
Some checks failed
PR Build / build (pull_request) Failing after 7m51s
ffaba538c4
Co-authored-by: Shelley <shelley@exe.dev>
ci: trigger rebuild after secret fix
Some checks failed
PR Build / build (pull_request) Failing after 8m31s
23b606cd75
Co-authored-by: Shelley <shelley@exe.dev>
ci: generate debug keystore dynamically (secrets unavailable in fork PRs)
All checks were successful
PR Build / build (pull_request) Successful in 8m45s
65e0c733f4
Co-authored-by: Shelley <shelley@exe.dev>

📦 Build Successful!

Commit: 65e0c73
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `65e0c73` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/461/artifacts/kwila-keyboard-debug)
feat(coding): improve layout per user feedback
All checks were successful
PR Build / build (pull_request) Successful in 12m14s
fddc0fb1f3
- Move / to left side of keyboard (L1 row 4)
- Move Tab to beginning of L2 row 3 (1.5 width)
- Move <> to L2 row 2
- Add $ to L2 row 4
- L1 button on L3 now at same position as L2 (pos 8.5-10)
- Layer 3 max 10 keys per row (split F1-F12 across 2 rows)
- Keyboard 25% taller (220dp vs 196dp)

Co-authored-by: Shelley <shelley@exe.dev>
docs: update AGENTS.md with current layout
All checks were successful
PR Build / build (pull_request) Successful in 11m59s
c56fc445a1
Co-authored-by: Shelley <shelley@exe.dev>
fix(layout): increase keyboard height to 245dp (25% taller)
All checks were successful
PR Build / build (pull_request) Successful in 9m12s
a1eabfafc0
The modeContainer in keyboard_view.xml was clipping the keyboard.
Increased it from 220dp to 269dp (245dp keyboard + 24dp status bar).

Co-authored-by: Shelley <shelley@exe.dev>

📦 Build Successful!

Commit: fddc0fb
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `fddc0fb` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/462/artifacts/kwila-keyboard-debug)

📦 Build Successful!

Commit: c56fc44
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `c56fc44` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/463/artifacts/kwila-keyboard-debug)
fix(coding): move / to position after Esc on L1 row 4
All checks were successful
PR Build / build (pull_request) Successful in 8m30s
4d9f707e09
Co-authored-by: Shelley <shelley@exe.dev>

📦 Build Successful!

Commit: a1eabfa
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `a1eabfa` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/464/artifacts/kwila-keyboard-debug)

📦 Build Successful!

Commit: 4d9f707
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `4d9f707` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/465/artifacts/kwila-keyboard-debug)
fix(coding): update L1 and L2 bottom row layouts
All checks were successful
PR Build / build (pull_request) Successful in 10m47s
ba1abcb043
L1: Ctrl Esc . / [Space] Enter L2
L2: Ctrl Alt Super $ [Space] L3 L1
Co-authored-by: Shelley <shelley@exe.dev>
fix(coding): align nav keys with arrows, reduce Super width
All checks were successful
PR Build / build (pull_request) Successful in 10m47s
613f4bd1a4
- Home/PgDn/PgUp/End on L3 now at same positions as ←↓↑→ on L2
- Super key reduced from 1.5 to 1 width
- L3/L1 buttons increased to 1.5 width each

Co-authored-by: Shelley <shelley@exe.dev>
fix(coding): backslash at same pos as slash, shift shows L2 values
All checks were successful
PR Build / build (pull_request) Successful in 12m17s
583d9f7dd7
- Backslash on L2 row 4 at position 3 (same as / on L1)
- L1 row 4 shift labels now show L2 equivalents (Alt, Super, $)
- Added semicolon to L2 row 3 (replaced backslash)

Co-authored-by: Shelley <shelley@exe.dev>
fix(coding): correct colors for shifted keys on L1 bottom row
All checks were successful
PR Build / build (pull_request) Successful in 12m4s
03e6c3c593
Alt and Super now show in purple (modifier color) when shift is active

Co-authored-by: Shelley <shelley@exe.dev>
fix(coding): slash+shift=backslash, replace () with |$ on L2 row 3
All checks were successful
PR Build / build (pull_request) Successful in 11m24s
3ebac4c467
- Shift+/ on L1 now produces \ (was $)
- L2 row 3: replaced duplicate () with | and $

Co-authored-by: Shelley <shelley@exe.dev>

📦 Build Successful!

Commit: ba1abcb
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `ba1abcb` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/466/artifacts/kwila-keyboard-debug)

📦 Build Successful!

Commit: 613f4bd
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `613f4bd` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/467/artifacts/kwila-keyboard-debug)

📦 Build Successful!

Commit: 583d9f7
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `583d9f7` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/468/artifacts/kwila-keyboard-debug)

📦 Build Successful!

Commit: 03e6c3c
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `03e6c3c` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/469/artifacts/kwila-keyboard-debug)

📦 Build Successful!

Commit: 3ebac4c
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `3ebac4c` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/470/artifacts/kwila-keyboard-debug)
feat(coding): major layout redesign - L3 as shift for L2
Some checks failed
PR Build / build (pull_request) Has been cancelled
c960f23677
Layer 2:
- Row 2: ` - = + ; arrows
- Row 3: L3 ( [ { < : ' ? ⌫ (opening brackets)
- Row 4: Ctrl Alt , \ Space Tab Super L1

Layer 3:
- Row 3: L2 ) ] } > _ " | ⌫ (closing brackets at same positions)
- Row 4: ~ $ @ # 😊 👍   L1

Key improvements:
- L3 acts as 'shift' for L2: opening → closing brackets
- ' on L2 maps to " on L3 at same position
- Tab and Super on L2 row 4
- Reduced emoji, added / pair
- L1 button is single width

Co-authored-by: Shelley <shelley@exe.dev>
docs: update AGENTS.md with new layout and design guidelines
All checks were successful
PR Build / build (pull_request) Successful in 8m49s
4a4e34e881
- Updated layer layouts to reflect L3-as-shift design
- Added L2→L3 position mapping table
- Added Design Process section with principles and common mistakes
- Clarified that L3 is the 'shift' for L2

Co-authored-by: Shelley <shelley@exe.dev>

📦 Build Successful!

Commit: 4a4e34e
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `4a4e34e` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/473/artifacts/kwila-keyboard-debug)

📦 Build Successful!

Commit: 84f1c99
APK: app-debug.apk
Size: 47M

Download Debug APK

## 📦 Build Successful! **Commit:** `84f1c99` **APK:** app-debug.apk **Size:** 47M [Download Debug APK](https://git.kwila.cloud/kwila/keyboard/actions/runs/474/artifacts/kwila-keyboard-debug)
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kwila/keyboard!2
No description provided.