Skip to content

[codex] Add Android mobile support - #3579

Merged
juliusmarminge merged 48 commits into
mainfrom
android-dev-pr-3514
Jul 12, 2026
Merged

juliusmarminge merged 48 commits into
mainfrom
android-dev-pr-3514

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Jun 27, 2026 •

Copy link
Copy Markdown
Member

Summary

  • add Android implementations for the native composer, header controls, and review diff modules
  • introduce Android-specific navigation, headers, file browsing, composer controls, icons, and connection/settings layouts while preserving the iOS toolbar paths
  • make the native Android diff gutter fixed during horizontal scrolling, keep file headers sticky, and show line-range selection feedback
  • move review section controls into an Android header menu and rebuild review comments as a full-screen, keyboard-sticky flow
  • add Android markdown code highlighting, local build configuration, and mobile development documentation

Why

The mobile app inherited iOS-only native modules and navigation assumptions. Android could build only after filling those native module gaps, and several shared screens rendered with incorrect insets, missing icons, inaccessible controls, or desktop/iOS-oriented interaction patterns.

The review diff also scrolled its entire native canvas horizontally, which moved line gutters and file headers with the code. It now owns horizontal code offset internally so persistent chrome stays fixed.

Impact

Android now has a usable end-to-end thread, file, Git review, composer, and connection flow. The iOS implementation keeps using its existing native toolbar and form-sheet behavior through platform-specific branches.

Validation

  • vp check
  • vp run typecheck
  • vp run lint:mobile
  • ./gradlew :t3tools-mobile-review-diff-native:compileDebugKotlin
  • ./gradlew :app:assembleDebug
  • manually exercised light and dark mode on the visible Android emulator
  • installed and launched the debug build on a USB-connected Pixel 7a

Note

Add Android support to the mobile app

  • Adds a native Android terminal renderer via JNI using libghostty-vt with a custom canvas view (TerminalCanvasView.kt) for font metrics, styling, and cursor blinking
  • Introduces AppSymbol.tsx to map SF Symbols and Material icons to Tabler icons on Android, replacing direct expo-symbols usage across the codebase
  • Replaces native stack headers with in-content AndroidScreenHeader on all major screens (home, thread, settings, files, review, connections, new task)
  • Adds AndroidAnchoredMenu for context menus rendered via OverlayPortal to avoid keyboard focus loss, and wires ControlPillMenu to use it on Android
  • Adds Android-specific build infrastructure: Gradle configs for native modules, CMake setup for the terminal JNI library, and Expo config plugins for heap sizing, modern alert/popup dialogs, and predictive back gesture compat
  • Implements Android launcher shortcuts via useAppShortcuts.ts that persist and sync recent threads to launcher quick actions
  • Adds a native Android composer editor module (T3ComposerEditorView.kt) with structured event dispatch, token spans, and selection management
  • Risk: The terminal backend now uses JNI with prebuilt .so libraries for four ABIs; any ABI mismatch or library loading failure will crash the terminal view

Changes since #3579 opened

  • Implemented native text selection system for Android terminal [80cf687]
  • Implemented terminal session lifecycle management with auto-close, respawn, and fallback navigation [80cf687]
  • Integrated bundled MesloLGS NF fonts for Android terminal rendering [80cf687]
  • Added Android-specific in-flow header with terminal menu and actions [80cf687]
  • Changed composer expansion behavior on Android to focus-based model [80cf687]
  • Added inertial fling scrolling to terminal canvas [80cf687]
  • Changed Enter key behavior to send carriage return instead of line feed [80cf687]
📊 Macroscope summarized 80cf687. 10 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.


Note

High Risk
Large new native/Android surface (review diff, composer, terminal JNI and prebuilt libs) plus iOS entitlement gating; regressions or load failures would hit core editing, review, and terminal flows.

Overview
Adds Android Expo modules for the composer editor, header buttons, and review diff so JS can use the same view contracts as iOS, including a custom canvas diff surface with fixed gutters, sticky file headers, async JSON decoding, and scroll/tap events.

Build and platform config: app.config.ts gains an opt-in iOS Personal Team mode (T3CODE_IOS_PERSONAL_TEAM + bundle ID validation) that drops widgets, push, app groups, and native Sign in with Apple; Clerk’s appleSignIn plugin flag follows that mode. Android picks up predictive back, expo-quick-actions, expo-asset, and several Gradle/UI config plugins. Docs add Personal Team and ios:release (Metro-free Release) flows; Metro blocks the repo .t3 directory from the bundle.

Terminal: Android is documented and vendored with pinned libghostty-vt (headers/libs) for VT parsing/rendering, separate from the existing iOS GhosttyKit fork.

Minor UI tweak: lighter translucent card tokens in global.css.

Reviewed by Cursor Bugbot for commit 80cf687. Bugbot is set up for automated code reviews on this repo. Configure here.

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants