Skip to content

kit: Add support mobile applications in GPUI Kit - #3045

Merged
huacnlee merged 5 commits into
mainfrom
codex/mobile-platform-gating
Sep 11, 2026
Merged

kit: Add support mobile applications in GPUI Kit#3045
huacnlee merged 5 commits into
mainfrom
codex/mobile-platform-gating

Conversation

@huacnlee

@huacnlee huacnlee commented Sep 11, 2026

Copy link
Copy Markdown
Member

Summary

Support GPUI Kit applications hosted by an external mobile platform. iOS and Android builds exclude the desktop/web platform selector dependency and exports while retaining GPUI and component initialization.

Expose gpui_kit::is_mobile() as an inline const target check shared by Base. On iOS and Android, Base-managed tooltips ignore show requests and HoverCard opens/closes on tap, stays open when its content is tapped, and dismisses on an outside tap. Desktop hover behavior is preserved. Direct GPUI tooltip APIs and editor LSP hover remain outside these changes.

Add English and Chinese /docs/mobile guides for temporary gpui-pre-mobile packaging, credited to the original community gpui-mobile project. Cover simulator setup, Swift UIView embedding, lifecycle and keyboard layout, touch interactions, platform checks, and integration limits; link installation and component docs.

Test Plan

  • Tooltip regression tests: 3 passed, including disabled-provider delayed/immediate requests.
  • HoverCard regression tests: 3 passed, including tap toggling, outside dismissal, content interaction, and hover suppression.
  • iOS cross-checks for GPUI Base and the GPUI Kit facade passed.
  • Website build and Pagefind passed; localized mobile routes/navigation verified.
  • iOS simulator smoke test with gpui-mobile touch cleanup: tap opens HoverCard, content tap keeps it open, outside tap closes it, and ordinary ghost-button hover clears after release.
  • Android and physical iPhone execution have not been tested. No crates published.

Co-authored-by: Codex <codex@openai.com>
huacnlee added a commit to longbridge/gpui-mobile that referenced this pull request Sep 11, 2026
## Summary

Embed GPUI Kit's Markdown TextView in a Swift-owned UIKit window instead
of letting GPUI create the iOS example's window. A child controller
renders into `GPUITextView: UIView`; native Compact / Expanded controls
exercise layout changes. The light English sample puts emphasis, quotes,
nested lists, code, tables, and tasks on the first screen.

Fix two startup failures exposed by the simulator: supply the UIKit
display handle to wgpu 29, and retain the `run_embedded` application
handle so native callbacks cannot outlive the GPUI app. Synchronize
layout and redraw without implicit animations during size changes.
Correct the Xcode static-library paths and build directory.

Pins GPUI Kit to commit `7d9efcd2069f9eaa6eb3ba6345aac4aa7d87c9f7` from
longbridge/gpui-kit#3045, so a sibling local
checkout is not required. No crates are published.

The embedding example supports one GPUI view for the application
lifetime; independent destruction and multiple instances are not
implemented.

## Test Plan

- Passed `cargo check --manifest-path example/Cargo.toml --target
aarch64-apple-ios-sim` with the pinned Git dependency.
- Built the Swift app with Xcode for the iOS simulator and ran it on
iPhone 17 Pro / iOS 26.5 using the same GPUI Kit source revision
locally.
- Verified light Markdown rendering, native controls, and Compact /
Expanded resizing.
- Passed `git diff --check` and `bash -n example/build.sh`.
- Embedded scrolling needs manual verification: the automation tool
emitted touch begin/end without move events. Transient resize jitter
also needs visual confirmation.
- No Android, physical-device, or performance testing performed.

---------

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
@huacnlee huacnlee changed the title fix: support external mobile platforms in GPUI Kit fix: support mobile applications in GPUI Kit Sep 11, 2026
@huacnlee huacnlee changed the title fix: support mobile applications in GPUI Kit kit: Add support mobile applications in GPUI Kit Sep 11, 2026
huacnlee and others added 2 commits September 11, 2026 23:40
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
@huacnlee
huacnlee enabled auto-merge (squash) September 11, 2026 15:53
@huacnlee
huacnlee disabled auto-merge September 11, 2026 15:58
huacnlee added a commit to longbridge/gpui-mobile that referenced this pull request Sep 11, 2026
## Summary

A released iOS touch currently leaves GPUI's synthetic mouse over the
last control, keeping hover feedback active. Clear the pointer hit test
and emit MouseExited after touch end/cancellation and momentum frames,
while preserving the original position for click and scroll dispatch.

Handle UIKit cancellation separately so it never commits a deferred tap
or starts a momentum fling. Cancel an active scroll with
TouchPhase::Cancelled.

Update the example's GPUI Kit revision to include mobile tooltip
suppression, tap-triggered HoverCard behavior, and the inline is_mobile
helper from longbridge/gpui-kit#3045.

## Test Plan

- Built the Swift-hosted iOS example for aarch64-apple-ios-sim.
- Used a temporary simulator smoke view to check HoverCard opens on tap,
remains open when its content is tapped, and closes on outside tap.
- Checked a normal ghost button with a configured tooltip: no lingering
hover background or tooltip after release.
- Restored the original chat example and rebuilt it with the final Kit
revision.
- GPUI Kit regression tests cover desktop hover and mobile tap
interaction.
- UIKit cancellation was reviewed in code; no system-cancellation
gesture was injected. Android was not changed or tested. No crates
published.

Co-authored-by: Codex <codex@openai.com>
@huacnlee
huacnlee merged commit 84f57fd into main Sep 11, 2026
9 checks passed
@huacnlee
huacnlee deleted the codex/mobile-platform-gating branch September 11, 2026 16:32
huacnlee added a commit to longbridge/gpui-mobile that referenced this pull request Sep 11, 2026
## Summary

Update the example GPUI Kit dependency to merged main commit
`84f57fdfcb4910623fb0bb7f795b077e249f9271` from
longbridge/gpui-kit#3045.

## Test Plan

- iOS simulator arm64: `cargo check --lib --target
aarch64-apple-ios-sim` passed (existing unused-function warning).
- Android arm64/API 31: `cargo ndk -t arm64-v8a --platform 31 check
--lib` passed.
- Both checks ran in the example directory.

Co-authored-by: Codex <codex@openai.com>
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.

1 participant