Skip to content

Repository files navigation

MovieTVArtist

MovieTVArtist is a compact Android discovery app for finding something worth watching and the people behind it. It pulls current movies, shows, and popular artists from TMDB, displays them in focused collections, and keeps the last successful results available through an in-memory cache and Room database.

Screenshots

MovieTVArtist home screen MovieTVArtist movies screen
MovieTVArtist artists screen MovieTVArtist shows screen

What it does

  • Browses movies currently playing.
  • Browses shows currently on the air.
  • Browses popular artists.
  • Opens any movie, show, or artist in a shared details screen.
  • Refreshes each collection from the network without discarding the last good data when a request fails.
  • Uses Room for local persistence and an in-memory cache for fast repeat visits.
  • Uses a clean separation between presentation, domain use cases, data sources, repositories, and dependency injection.

Run it locally

  1. Open the project in Android Studio.

  2. Provide a TMDB API key without committing it to the repository:

    export TMDB_API_KEY=your_tmdb_api_key

    Android Studio users can also add TMDB_API_KEY=your_tmdb_api_key to their user-level Gradle properties file.

  3. Sync the project and run the app configuration on an Android 8.0+ device or emulator.

The project targets the current Android toolchain used by this modernization pass: JDK 17, Gradle 9.7.1, Android Gradle Plugin 9.3.0, and compile/target SDK 37.

Architecture

The app follows a one-way dependency direction:

Presentation → Domain use cases → Repository interfaces ← Data implementations
                                      ↑
                         Dagger binds the implementation

The ViewModels receive use cases. The use cases depend on repository interfaces from the domain layer. Only the data/DI graph knows about MovieRepositoryImpl, TvShowRepositoryImpl, and ActorRepositoryImpl.

Reusable details screen

Movies, shows, and artists all map into one presentation-level DetailsContent model and open the same DetailsActivity. This keeps the navigation and layout reusable while allowing each content type to provide the information it has available:

  • Movies show the poster, full overview, and release date.
  • Shows show the poster, full overview, and first air date.
  • Artists show the profile image and TMDB popularity score.

The selected item comes from the app’s existing cached or persisted collection, so opening details does not require another API request. List and detail images are also parsed through one canonical TMDB w500 URL builder. Using the same URL in both places gives Glide the same cache key, allowing the details screen to reuse an image already loaded by the collection screen.

Launch experience

The launcher uses AndroidX SplashScreen rather than a dedicated splash activity. A starting theme gives Android the branded background and icon immediately while the process starts, then postSplashScreenTheme hands the existing HomeActivity back to the regular app theme. This avoids duplicate splash screens on Android 12+, adds no artificial loading delay, and provides the same launch behavior on the app’s older supported Android versions.

Stack

  • Kotlin and Android Views with Data Binding
  • MVVM and LiveData
  • Dagger 2 with KSP
  • Retrofit, OkHttp, and Gson
  • Room
  • Glide
  • Material Components

Attribution

Movie and television data and imagery are provided by TMDB. This project is not endorsed or certified by TMDB.

License

See LICENSE.

Releases

Packages

Contributors

Languages