Skip to content

feat: add Android support#49

Open
Farori wants to merge 2 commits into
ickshonpe:masterfrom
Farori:android
Open

feat: add Android support#49
Farori wants to merge 2 commits into
ickshonpe:masterfrom
Farori:android

Conversation

@Farori

@Farori Farori commented Mar 3, 2026

Copy link
Copy Markdown

Overview

Adds Android platform support for text input, as a workaround until
winit provides proper virtual keyboard support upstream.

What changed and why

Clipboard: arboard does not support Android, so it is now excluded
from Android targets. Clipboard operations return ClipboardNotSupported
on Android — copy/paste is not available for now.

Virtual keyboard input: Since winit currently does not expose virtual
keyboard events on Android (even though bevy_winit has some internal
handling, it still relies on winit), text input is wired directly to
android-activity with the game-activity backend.

Duplicate input signals: Virtual keyboard on Android can produce
duplicate input events. enqueue_text_diff is used to suppress most of
these. In rare cases a duplicate may still slip through — since this is a
temporary workaround until winit gains proper Android support, it was not
investigated further. Should be sufficient for practical use.

Opening the virtual keyboard on tap: on_text_input_pressed_android
observer is registered for each text input entity. This handles the case
where a field is already focused — in that situation the normal
focus-change mechanism does not trigger the keyboard to open, so it needs
to be handled separately.

Touma-Kazusa2 and others added 2 commits February 12, 2026 01:57
Add support for IME composition input (Chinese, Japanese, Korean, etc.):

- Add TextInputImeState component to track preedit composition state
- Add ImePreedit and ImeCommit action types
- Add ime_focus_system to enable/disable IME and position candidate box
- Add ime_event_system to route Bevy Ime messages to text inputs
- Add ime_cleanup_on_unfocus_system to cancel preedit on focus loss
- Suppress keyboard input during IME composition to prevent double input
- Render preedit underline beneath composing text (color follows TextColor
  by default, configurable via TextInputStyle)
- Use selection-based preedit removal for robustness
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.

2 participants