fix(ui): keep toolbar visible above keyboard (closes #147) (#148)

The session/chat screen's KeyboardAvoidingView used behavior={undefined}
on Android, relying entirely on the native android:windowSoftInputMode
adjustResize (set in AndroidManifest.xml) to shrink the window and push
the agent/model toolbar + composer above the keyboard.

Since the app adopted Expo's mandatory edge-to-edge display, Android no
longer resizes the window when the keyboard opens (the system assumes
insets are handled dynamically), so adjustResize became a no-op —
leaving the toolbar and input completely hidden behind the keyboard.

Switch to behavior="padding" on both platforms so KeyboardAvoidingView
pushes the composer up using its own JS-measured keyboard height,
independent of native window resize.

Co-authored-by: test <test@test.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Den
2026-07-24 00:40:10 -07:00
committed by GitHub
parent d6e24e9f99
commit 6c103ac7f3

View File

@@ -593,7 +593,19 @@ export default function SessionScreen() {
<KeyboardAvoidingView
style={[s.container, isDark && s.containerDark]}
behavior={Platform.OS === "ios" ? "padding" : undefined}
// Both platforms use "padding" so the composer/toolbar is pushed up
// above the keyboard via JS-measured keyboard height.
//
// Android previously relied on the native android:windowSoftInputMode
// (adjustResize, see AndroidManifest.xml) with behavior={undefined}
// to let the OS resize the window (see #70/#53). Since adopting
// Expo's mandatory edge-to-edge display, Android no longer resizes
// the window when the keyboard opens — the system assumes insets are
// handled dynamically — so adjustResize became a no-op and the
// bottom toolbar + input were left completely hidden behind the
// keyboard (#147). "padding" restores avoidance without depending
// on native resize.
behavior="padding"
keyboardVerticalOffset={Platform.OS === "ios" ? 90 : 0}
>
{/* Session info pulldown */}