- Rename test-apps to base-apps with proper manifest.json for each app
- Add is_system_app flag to app discovery and Lua API
- Fix icon path resolution for /system/icons/ paths
- Add layout.lua and layout.rcss for reusable UI components
- Update home screen to dynamically load all apps from manifests
- Update all app RML files to use layout components
- Comprehensive testing framework documentation with JSON action format
- Add tests/ directory structure for automated UI testing
- Add relative path resolution for filesystem-loaded documents in kernel.cpp
- SetDocumentBasePath() tracks document directory for relative resource resolution
- ResolvePath() resolves relative paths like "app.lua" against document base path
- Fix RmlUi context name lookup in sandbox test app (use "default" not "main")
- Add debug logging to timer_manager.cpp to trace timer creation and execution
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use internal files dir instead of external (fixes scoped storage permissions)
- Pass files directory from Android context via JNI instead of hardcoding
- Add exception handling in ScanAppsDirectory to prevent crashes on permission errors
- Use std::error_code overload of fs::exists() to avoid throwing on access denial
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace linear-gradient with solid colors (not supported in RmlUi)
- Replace border shorthand with border-width/border-color properties
- Replace display:grid with flexbox in music quick-access cards
- Remove unsupported transition property
- Fix border-radius: 50% to use 9999px in theme.rcss
- Fix third-party app icon/label sizes to match system apps (72x72px, 16px)
- Replace data-model bindings with static values in settings
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add file:// URL handling to AssetFilesInterface in kernel.cpp
- Update home.lua to use file:// prefix for absolute filesystem paths
- Add file:// URL handling to desktop file interface for consistency
This fixes RmlUi stripping the leading slash from absolute paths
when resolving img src URLs relative to the document base.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Register sandbox APIs (timer, JSON, crypto, VFS) into RmlUi's Lua state
- Add switchAppSandbox() function for context switching between apps
- Update goHome() to reset sandbox context when returning home
- Fix icon loading for third-party apps (handle full paths vs relative)
- Mirror changes between Android service (kernel.cpp) and desktop designer
This enables third-party apps to use sandbox APIs when running in RmlUi.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Designer click handling:
- Fix DPI scaling in MouseButtonCallback and CursorPosCallback
- Scale coordinates from window space to framebuffer/RmlUi context
- Remove window resizing in ResizeToPhone (caused DPI mismatches)
Test framework:
- Fix SendMouseDown to use MOUSEEVENTF_MOVE before button down
- Remove double-scaling in ScaleToPhysical (WindowController handles it)
- All 5 UI navigation tests now pass
Kernel API:
- Add goHome() Lua function to return to home screen
- Stops any running third-party apps before navigating
Test app:
- Update sandbox-test to use goHome() instead of goBack()
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove duplicate sandbox sources from Android (now in core/)
- Update Android CMakeLists to link mosis-core
- Add OpenSSL crypto support for Android
- Update all includes to use core library headers
- Remove duplicate logger from Android (use core logger)
- Add openssl to Android vcpkg dependencies
This removes ~5,500 lines of duplicate code by sharing
the sandbox implementation between desktop and Android.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>