A modern, immersive Android application built with Jetpack Compose that allows users to capture, describe, and relive their memories through short video clips.
- Immersive Video Feed: A full-screen, vertical snapping feed (similar to modern social apps) for seamless browsing of recorded clips.
- Video Capture: Quick access to the device camera to record spontaneous moments.
- Post-Capture Journaling: Add optional text descriptions to your videos via a focused dialog immediately after recording.
- Optimized Playback: Smart, lifecycle-aware video playback using Media3 ExoPlayer, optimized for vertical scrolling performance.
- Edge-to-Edge Design: Fully immersive UI that utilizes the entire screen real estate.
- Local Storage: All videos and metadata are stored securely on your device.
- Language: Kotlin
- UI Framework: Jetpack Compose
- Media: Media3 ExoPlayer for high-performance video rendering.
- Database: SQLDelight for type-safe local metadata storage.
- Dependency Injection: Koin for lightweight and idiomatic DI.
- Image Loading: Coil with Video Frame support for thumbnails.
- Architecture: Clean Architecture (Presentation, Domain, Data layers) following SOLID principles.
The project follows a strict Clean Architecture pattern to ensure testability, scalability, and maintainability:
- Presentation: Compose UI, ViewModels, and UI State management (MVI/MVVM hybrid).
- Domain: Pure Kotlin business logic containing Use Cases and Repository interfaces.
- Data: Implementation of repositories, SQLDelight database management, and File System storage for video assets.
- Clone the repository:
git clone https://github.com/yourusername/JornalApp.git
- Open in Android Studio: Import the project as a Gradle project (Ladybug or newer recommended).
- Build and Run: Deploy to a physical device or emulator (API 28+).
- Note: A physical device is recommended for the best camera and video playback experience.
The project includes unit tests for core business logic and ViewModels:
- MockK for dependency mocking.
- Turbine for testing Kotlin Flows.
- JUnit 5 for the test runner.