Skip to content

Zdroid 0.2.0

Choose a tag to compare

@Dylanmurzello Dylanmurzello released this 15 May 09:24
· 399 commits to main since this release

Highlights

Animated cold-start splash

The launcher → editor transition is no longer a "brick then upper-punch". An animated Zdroid sigil (counter-rotating ripple rings + breathing orb) covers the entire boot path from app tap through gpui's first paint, fading out into the editor with a ripple-dissipates exit. Built as a sibling-View overlay above the GameActivity SurfaceView; safe against the prior cursor white-tint regression because the wgpu surface now clears to opaque brand indigo on every frame.

Hardware-composited cursor via SurfaceControl

Replaces the disabled View-based cursor with a child SurfaceControl of the editor SurfaceView. SurfaceFlinger composites the sprite over the main surface via HWC2 — same hardware overlay path the OS uses for the system pointer on devices with a cursor plane. Cursor moves are Transaction.setPosition().apply() with zero gpui paint and zero wgpu work per move. API 29+ only; older devices keep trackpad gestures without a visible sprite.

Trackpad gestures

  • libinput-style drag-lock for tap-tap-drag
  • Hold-and-drag selection cursor follows the dragging finger
  • Multi-window capture parity — spawned ExtraWindowActivity instances inherit the same gesture state machine
  • Touchpad ACTION_BUTTON_PRESS firmware noise filtered out
  • Click-storm fixed during sustained drags
  • AXIS_RELATIVE_X/AXIS_RELATIVE_Y historical samples summed so fast finger motion doesn't lose ~80% of its travel

Runtime adapter command-bridge fix

The env-root → zd-exec rewrite in util::command::new_command was unconditional, breaking every absolute-path subprocess spawn for bootstrap-mode users (rust-analyzer, gopls, bash, every LSP). Now gated on RuntimeProvider::needs_command_bridge(): chroot adapter opts in, bootstrap and external-Termux let execve run the binary directly. Apt-installed LSPs work without any zd-exec hop.

External-storage CWD fallback

Command::current_dir on Android rewrites /storage/emulated/0/* and other FUSE-emulated prefixes to $HOME to avoid the chdir-ENOENT-in-forked-subprocess gate. LSP servers still receive the real project path via workspaceFolders in LSP initialize so rust-analyzer / pyright / etc. locate the project root correctly.

Vim mode wiring

VimModeSetting (and HelixModeSetting) now correctly load VIM_KEYMAP_PATH on init and on settings change, with a SettingsStore observer for live reload.

Misc

  • Android rust-analyzer asset name points at upstream unknown-linux-gnu (was malformed unknown-linux).
  • WgpuRenderer::set_clear_color lets embedders override the main-pass clear (default stays transparent for desktop compositors).
  • Gitignored the Kotlin incremental cache.

Install

Download app-release.apk below. APK is signed; reinstalls upgrade in place. Tab S9 Ultra / Android 14 is the primary tested target.