A modern Android TV application built using Kotlin, Jetpack Compose, MVVM, and ExoPlayer, designed to display a categorized movie list from a mock API, allowing users to browse, view details, and play videos with full seek functionality.
MVVM (Model-View-ViewModel) architecture is used for clean separation of concerns:
├── Model -> Data classes (MovieModel), API interfaces
├── Repository -> Data abstraction from API
├── UseCase -> Business logic layer
├── ViewModel -> UI-related logic and state
├── UI -> Jetpack Compose TV UI with navigation
Supporting libraries include:
- Hilt for dependency injection
- Retrofit for networking
- ExoPlayer for video playback
- Jetpack Compose TV for building the TV-optimized UI
✅ Fetch movie categories from a mock API
✅ Home screen with multi-style movie tiles (carousel, grid, etc.)
✅ Video player screen using ExoPlayer with seek functionality
✅ Fully navigable with D-Pad/remote control
✅ TV-optimized layout using Compose
✅ Fallback for empty or invalid data
✅ Modular code with proper layering
✅ Unit tests for UseCase and Repository layers
Tests are written using junit, mockito-kotlin, and kotlinx.coroutines-test.
Tested components:
- ✅
MovieDataUseCase - ✅
MovieDataRepoImpl - ✅ Edge cases and exception handling
- Clone the repository
- Open in Android Studio Hedgehog or later
- Run the app on an Android TV emulator or real TV device
- Navigate with the D-Pad/Remote
| Tool | Purpose |
|---|---|
| Kotlin | Programming Language |
| Jetpack Compose | UI for Android TV |
| Retrofit | REST API client |
| Hilt | Dependency Injection |
| ExoPlayer | Video Playback |
| Coroutines | Async code |
| JUnit + Mockito | Unit Testing |
