feat(android): Compose app with bundled yt-dlp, theme pack, nav & progress

Turn android/ into a real Gradle app (Kotlin + Jetpack Compose + Material3)
that bundles an on-device yt-dlp engine and reuses the Phase-4 Rust JNI core.

- Bundled engine: youtubedl-android (Python + yt-dlp + ffmpeg + aria2c) via
  Engine.kt; initialises off the main thread on first launch. Requires legacy
  jniLib packaging so the bundled .zip.so payloads extract to disk.
- Intuitive navigation: bottom NavigationBar — Download / Files / Settings.
- Settings section: dedicated screen with a live theme picker, default-quality
  chips, engine info, and a Rust-core demo.
- All 19 desktop themes ported from src/theme.rs into Theme.kt as Material3
  colour schemes, shown as tappable swatches; selection persisted (Prefs.kt).
- Download screen: live platform detection through the Rust core as you type,
  plus an improved animated determinate progress indicator (%/ETA/status/
  success-error) and a scrollable log.

Toolchain pinned for reproducibility: Gradle 8.9 wrapper, AGP 8.5.2, Kotlin
1.9.24, Compose BOM 2024.06.00, compileSdk 34, minSdk 24, ABIs arm64-v8a +
x86_64. build-apk.sh runs Gradle on a JDK <= 21 (system JDK may break R8) and
builds the Rust libs first.

Verified on an Android 14 x86_64 emulator: installs, launches, engine reports
"yt-dlp ready", Rust .so loads, theme switching re-themes live and persists
across restart, all screens render. (A real YouTube download still depends on
the anti-bot/POT question — Phases 2-3, device-only.)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Luna 2026-07-03 17:03:26 -07:00
parent 1790fd1a22
commit 3a55ff5b8a
22 changed files with 1607 additions and 83 deletions

7
android/.gitignore vendored
View file

@ -5,14 +5,15 @@ rust/catacomb_core/target/
# rather than commit binaries.
app/src/main/jniLibs/
# Manual APK build outputs (APK, signing artifacts, debug keystore) — build
# products, never committed.
# Manual APK build outputs (demo/)
demo/out/
# Gradle / Android build outputs (Phase 1, not yet scaffolded here)
# Gradle / Android build outputs
.gradle/
build/
app/build/
local.properties
debug.keystore
*.iml
.idea/
captures/