# HorrorTV A horror movie streaming app for Android TV and Chromecast with Google TV 4K. ## Features - **Featured Horror Categories**: Browse curated horror movie collections (Scream, Halloween, Conjuring, Exorcist, Nightmare, Insidious, Terrifier, Hereditary, It, Poltergeist, Saw, Paranormal) - **Search Movies**: Search by movie name or IMDB ID (e.g., `tt1234567`) - **WebView Streaming**: Stream movies via playimdb.com integration - **TV-Optimized UI**: Built with Jetpack Compose for TV with D-pad navigation support - **Movie Details**: View plot, year, rating, and poster information from OMDb API ## Tech Stack | Category | Technology | |----------|------------| | Language | Kotlin | | UI Framework | Jetpack Compose for TV (tv-foundation, tv-material) | | Networking | Retrofit + OkHttp + Gson | | Image Loading | Coil | | Dependency Injection | Hilt | | Architecture | MVVM with Clean Architecture layers | | API | OMDb API | ## Project Structure ``` HorrorTV/ ├── app/ │ ├── src/main/ │ │ ├── java/com/horrortv/app/ │ │ │ ├── data/ │ │ │ │ ├── remote/omdb/ # OMDb API service & DTOs │ │ │ │ └── repository/ # Repository implementations │ │ │ ├── di/ # Hilt modules │ │ │ ├── domain/ │ │ │ │ ├── model/ # Domain models (Movie) │ │ │ │ └ repository/ # Repository interfaces │ │ │ ├── presentation/ │ │ │ │ ├── home/ # Home screen, rows, cards │ │ │ │ ├── search/ # Search screen & ViewModel │ │ │ │ ├── detail/ # Movie detail screen │ │ │ │ ├── player/ # WebView streaming player │ │ │ │ └ theme/ # Horror-themed colors, typography │ │ │ ├── util/ # Constants, utilities │ │ │ └── MainApplication.kt # Hilt entry point │ │ ├── res/ │ │ │ ├── drawable/ # Launcher background │ │ │ ├── mipmap/ # App icons & banner │ │ │ └ values/strings.xml # App name │ │ └ AndroidManifest.xml # TV features & activities │ ├── build.gradle.kts # App dependencies │ └ proguard-rules.pro ├── gradle/ │ └ wrapper/gradle-wrapper.properties ├── build.gradle.kts # Project config ├── settings.gradle.kts └ .gitignore ``` ## How to Build ### Prerequisites - Android Studio with Android SDK 34 - JDK 17 - Gradle 8.x ### Build Commands ```bash # Debug APK ./gradlew assembleDebug # Release APK ./gradlew assembleRelease # Clean build ./gradlew clean assembleDebug # Install on connected device ./gradlew installDebug ``` On Windows: ```powershell gradlew.bat assembleDebug ``` ## How to Install on Chromecast 4K 1. **Enable Developer Options**: - Go to Settings → System → About - Click on "Build" 7 times until "Developer options unlocked" 2. **Enable ADB Debugging**: - Settings → System → Developer options → ADB debugging → On 3. **Connect via ADB**: ```bash # Find Chromecast IP in Settings → Network → WiFi adb connect :5555 ``` 4. **Install APK**: ```bash adb install -r app/build/outputs/apk/debug/app-debug.apk ``` 5. **Launch App**: - The app will appear in your Apps section on Chromecast - Select "HorrorTV" from the home screen ## API Configuration The app uses the **OMDb API** to fetch movie metadata: - **API Key**: `5854c81e` (hardcoded in `Constants.kt`) - **Base URL**: `https://www.omdbapi.com/` To use your own API key, modify `Constants.kt`: ```kotlin const val OMDB_API_KEY = "your_api_key_here" ``` Get a free API key at: https://www.omdbapi.com/apikey.aspx ## Usage ### Navigation | Action | D-Pad Control | |--------|---------------| | Move focus | Arrow keys (Up/Down/Left/Right) | | Select | Center button (Enter) | | Back | Back button | | Search | Search button or menu | ### Features 1. **Browse Categories**: Navigate through horror movie rows using Up/Down arrows 2. **View Movie**: Press Select on a movie poster to see details 3. **Play Movie**: Press Play button on detail screen to stream via WebView 4. **Search**: Access search from the top menu, type movie name or IMDB ID ### IMDB ID Search Enter an IMDB ID in the format `tt1234567` or `tt12345678` to find specific movies. ## Architecture The app follows Clean Architecture principles: - **Presentation Layer**: Jetpack Compose TV UI with ViewModels - **Domain Layer**: Business models and repository interfaces - **Data Layer**: OMDb API implementation and repository Dependency flow: Presentation → Domain → Data ## License This project is for educational purposes. Movie streaming via playimdb.com may require appropriate licensing in your region.