Technologies
List of main technologies, libraries and frameworks used in the Mirror Android app.
Language, Runtime & Build
- Kotlin (2.0.20) — primary development language.
- Jetpack Compose — modern declarative UI toolkit used for the app’s screens and widgets.
- Gradle (AGP 8.7.1) — build system; Java 17 compatibility.
- ViewBinding — interoperability for hybrid Compose + XML layouts.
- Proguard/R8 — enabled for release builds with optimized rules.
App Architecture
-
Activities:
- Journey Activity — navigation until glasses are selected.
- Try-On Activity — integrates Mediapipe (face landmarker), CameraX, and WebView with a local React-based renderer.
-
Navigation:
- Jetpack Navigation Compose for handling flows.
- Orientation-aware UI: layouts adapt between portrait and landscape modes, controlled by configuration in Firebase.
-
Persistence:
- Realm Kotlin (3.0.0) used for local caching of downloaded assets (images, 3D models, videos).
- Local file paths stored in Realm ensure offline-first operation.
Core Libraries & Frameworks
Firebase
- Firestore — stores mirror configuration (brands, orientations, assets).
- Storage — source for media files (images, videos, 3D assets).
- BoM (33.5.1) — centralized dependency management.
AR & Vision
- Mediapipe Tasks Vision (0.10.18) — face landmark detection in Kotlin.
- SceneView (2.2.1) — renders transparent-background 3D models (glasses overlay).
- CameraX (1.4.0) — provides camera feed to Mediapipe and AR renderer.
Media & Playback
- AndroidX Media3 ExoPlayer (1.4.0) — video playback for immersive intro and looping showcase.
- Dash extension for adaptive streaming.
- Media3 UI for controls (customized for kiosk use).
UI & Imaging
- Material3 — Compose Material components.
- Coil (2.2.2) — image loading, includes SVG support for logos/backgrounds.
- AndroidSVG — background removal & SVG parsing.
- QR Generator — generates QR codes for mirror pairing or user interactions.
Networking & Local Server
- NanoHTTPD (2.3.1) — lightweight embedded web server.
- WebSockets — real-time communication between the Kotlin app and the local React frontend in WebView.
- Kotlinx Serialization (1.7.1) — JSON serialization/deserialization for config and data exchange.
Testing
- JUnit 4.13.2 — unit testing.
- AndroidX Test / Espresso — UI instrumentation.
- Compose UI Test — for validating composables and flows.
Performance & UX
- Offline-first strategy: all assets downloaded upfront → Realm stores local paths → app runs without network.
- Orientation-aware layouts: portrait vs. landscape flows differ, controlled by Firebase mirror config.
- Transparent WebView overlay: React-based renderer sits above camera feed for lifelike AR glasses try-on.
- Video-driven entry: ExoPlayer handles seamless looping showcase after synchronization.