Skip to content

fix(android): keep composer above IME on Android 15+ - #210

Closed
xtiang7c0 wants to merge 1 commit into
dzianisv:mainfrom
xtiang7c0:fix/android-keyboard-ime-insets
Closed

xtiang7c0 wants to merge 1 commit into
dzianisv:mainfrom
xtiang7c0:fix/android-keyboard-ime-insets

Conversation

@xtiang7c0

Copy link
Copy Markdown

Closes #194

Summary

  • apply Android IME insets to the native root view on Android 15+
  • retain the native change after expo prebuild with an idempotent config plugin
  • add a focused plugin test

Verification

  • npm test (334 passing)
  • npm run typecheck
  • Android release APK build
  • Nothing Phone 2a (A142), Android 16, Gboard: composer stayed fully visible after the keyboard settled

This is an alternative to #208. On the same device, #208 still left the composer behind the keyboard after Gboard finished opening.

@meramsey

meramsey commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Is there a public test apk people can use without having to build themselves to try this fix out in the meantime?

@xtiang7c0 xtiang7c0 closed this by deleting the head repository Oct 10, 2026
niteria pushed a commit to niteria/opencode-mobile that referenced this pull request Oct 26, 2026
…screens

Two issues found while testing against OpenCode 1.18.34:

1. Permission prompts never appeared for tool calls. The server emits
   permission.v2.asked events with {id, sessionID, action, resources},
   but the SSE handler only matched the legacy permission.asked format.
   Added a normalization layer (src/lib/permissions.ts) that converts
   both protocol generations into a single internal model, and updated
   the event handler to process v2 asked/replied events. Pending
   permissions are also reconciled on SSE reconnect and app foreground
   so a missed event doesn't leave the session stuck.

2. Keyboard covered input fields on the connection add/edit screens.
   The chat screen already used KeyboardAvoidingView with
   behavior="padding", but the connection screens used a bare ScrollView.
   On Android 15+ edge-to-edge, adjustResize is a no-op so the keyboard
   stays on top of the content. Wrapped both connection screens in the
   same KeyboardAvoidingView pattern.

Includes PR dzianisv#210 (IME insets) which was already open.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Android: chat input hidden behind keyboard

2 participants