8574424fb7
Lint & Test / test (push) Successful in 2m10s
Adds a native Android TV application that runs the full LedGrab Python server in-process via Chaquopy. Captures the TV box screen using the MediaProjection API and exposes the existing web UI on the device's local network — users configure via phone/tablet browser. Android (new /android/ module): - Kotlin shell: MainActivity, CaptureService (foreground service), ScreenCapture (MediaProjection + ImageReader), PythonBridge (Chaquopy). - Polished Leanback-themed UI with QR code for easy web UI access. - AGP 8.9 + Chaquopy 17 + Gradle 8.11 (avoids the AGP 8.7 thread-lock bug). - Pre-built pydantic-core wheels for arm64-v8a, x86_64, x86 cross-compiled with maturin + Android NDK, linked against Chaquopy's libpython3.11.so. Python server platform guards: - New utils/platform.py with is_android()/is_windows()/is_linux() helpers. - Guard every top-level import of desktop-only packages (mss, psutil, sounddevice, pyserial, PyAudioWPatch, etc.) with try/except ImportError. - Android-incompatible calls gated with None-checks so the server runs on reduced capabilities on Android (no CPU/RAM metrics, no mss displays). - utils/image_codec.py gains a Pillow fallback for resize + JPEG encode when cv2 is unavailable; all internal cv2.resize callers migrated. - New android_entry.py start_server/stop_server invoked from Kotlin. - get_displays API falls back to best available engine when mss fails. New capture engines: - MediaProjectionEngine: receives RGBA frames pushed from Kotlin through a thread-safe queue; caches last frame for static-screen previews. - ScrcpyClientEngine: optional H.264 streaming via scrcpy-client library (priority 10, overrides the ADB-screencap engine when installed). Frontend: - Tab loaders previously required an apiKey; now correctly treat "auth disabled" as authenticated (Android has no auth by default). - Re-trigger the active tab's loader after loadServerInfo resolves authRequired, since initTabs runs earlier. - Add i18n keys for the demo / mediaprojection / scrcpy_client engines. Docs: - TODO.md: follow-ups for multi-ABI wheel rebuilds, CI pipeline, USB serial LED controllers, root-only capture, perf metrics abstraction. - CLAUDE.md: Android dependency sync policy (pip --exclude doesn't exist). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
89 lines
982 B
Plaintext
89 lines
982 B
Plaintext
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*$py.class
|
|
*.so
|
|
.Python
|
|
# Build output artifacts (LedGrab/, *.zip, *.exe, *.tar.gz, cached downloads)
|
|
build/LedGrab/
|
|
build/*.zip
|
|
build/*.exe
|
|
build/*.tar.gz
|
|
build/*.msi
|
|
build/python-embed-*.zip
|
|
build/pip-wheels/
|
|
build/win-wheels/
|
|
build/tk-extract/
|
|
develop-eggs/
|
|
dist/
|
|
downloads/
|
|
eggs/
|
|
.eggs/
|
|
lib/
|
|
lib64/
|
|
parts/
|
|
sdist/
|
|
var/
|
|
wheels/
|
|
# …but keep pre-built Android wheels (pydantic-core cross-compiled for
|
|
# arm64-v8a / x86_64 / x86, required by the Chaquopy build)
|
|
!android/wheels/
|
|
!android/wheels/*
|
|
*.egg-info/
|
|
.installed.cfg
|
|
*.egg
|
|
|
|
# Virtual Environment
|
|
venv/
|
|
ENV/
|
|
env/
|
|
.venv
|
|
|
|
# Node
|
|
node_modules/
|
|
|
|
# IDE
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
.DS_Store
|
|
.claude/
|
|
|
|
# Testing
|
|
.pytest_cache/
|
|
.coverage
|
|
htmlcov/
|
|
.tox/
|
|
|
|
# Logs
|
|
*.log
|
|
logs/
|
|
*.log.*
|
|
|
|
# Runtime data
|
|
data/
|
|
*.db
|
|
*.sqlite
|
|
*.json.bak
|
|
|
|
# Environment variables
|
|
.env
|
|
.env.local
|
|
|
|
# Docker
|
|
.dockerignore
|
|
|
|
# Home Assistant
|
|
homeassistant/.storage/
|
|
|
|
# Temporary files
|
|
*.tmp
|
|
temp/
|
|
tmp/
|
|
|
|
# OS
|
|
Thumbs.db
|
|
.DS_Store
|