Bug description
On Android devices with gesture navigation (full-screen gestures) or 3-button navigation, the prompt composer at the bottom of a session is partially covered by the virtual navigation bar. The text field and the send button are hard to see and tap.
This happens because the app calls enableEdgeToEdge() (content extends behind the system bars) while the composer's bottom container only applies imePadding() — which handles the software keyboard but not the system navigation bar insets.
Steps to reproduce
- Install the Android client (v1.0.1) and connect it to a Codeg server.
- Open or start a session.
- With the keyboard closed, look at the composer pinned at the bottom of the screen.
- On a device with gesture navigation (e.g. Xiaomi MIUI/HyperOS with full-screen gestures — especially with the gesture hint bar enabled), the lower part of the composer is hidden behind the gesture bar. The send button and part of the text field become hard to reach.
Expected behavior
The composer (text field + send button) should sit fully above the system navigation bar with no overlap, regardless of the navigation mode.
Actual behavior
The bottom of the composer is covered by the virtual navigation bar when the keyboard is closed. When the keyboard opens, imePadding() kicks in and the overlap disappears — confirming the issue is specifically the missing navigation-bar insets handling.
Environment
- Device: Xiaomi (MIUI/HyperOS, gesture navigation with visible gesture hint bar)
- Android: 12+ (app
minSdk 31, targets API 36)
- App version: v1.0.1
- More affected devices: any device with on-screen navigation (Samsung, Pixel gesture mode, etc.)
Root cause (from source)
MainActivity.kt: calls enableEdgeToEdge() — UI extends behind system bars by design.
SessionDetailScreen.kt bottomBar: Column(Modifier.imePadding()) — no navigationBarsPadding(), so the composer ignores navigation-bar insets.
AgentDetailScreen.kt: Column(Modifier.fillMaxSize().imePadding()) — same issue in the agent editor (the bottom save/action area).
Proposed fix
Add navigationBarsPadding() after imePadding() on both bottom-anchored containers. See PR #5.
Column(Modifier.imePadding().navigationBarsPadding()) { ... }
- Keyboard open: IME already consumes the navigation-bar area → no extra padding.
- Keyboard closed:
navigationBarsPadding() lifts the composer above the navigation bar.
Bug description
On Android devices with gesture navigation (full-screen gestures) or 3-button navigation, the prompt composer at the bottom of a session is partially covered by the virtual navigation bar. The text field and the send button are hard to see and tap.
This happens because the app calls
enableEdgeToEdge()(content extends behind the system bars) while the composer's bottom container only appliesimePadding()— which handles the software keyboard but not the system navigation bar insets.Steps to reproduce
Expected behavior
The composer (text field + send button) should sit fully above the system navigation bar with no overlap, regardless of the navigation mode.
Actual behavior
The bottom of the composer is covered by the virtual navigation bar when the keyboard is closed. When the keyboard opens,
imePadding()kicks in and the overlap disappears — confirming the issue is specifically the missing navigation-bar insets handling.Environment
minSdk 31, targets API 36)Root cause (from source)
MainActivity.kt: callsenableEdgeToEdge()— UI extends behind system bars by design.SessionDetailScreen.ktbottomBar:Column(Modifier.imePadding())— nonavigationBarsPadding(), so the composer ignores navigation-bar insets.AgentDetailScreen.kt:Column(Modifier.fillMaxSize().imePadding())— same issue in the agent editor (the bottom save/action area).Proposed fix
Add
navigationBarsPadding()afterimePadding()on both bottom-anchored containers. See PR #5.navigationBarsPadding()lifts the composer above the navigation bar.