Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Featuring TheMovieDB API, Jetpack Compose, MVVM, Clean Architecture and ExoPlayer integration

enesky/MovieCatalog

Repository files navigation

MovieCatalog

API Kotlin AGP JVM

Detekt Lint Check, Tests & Build Maestro UI Tests

Screenshots

Home Screen

Dark Theme Light Theme
Home Screen - Dark Home Screen - Light

Details Screen

Dark Theme Light Theme
Details Screen - Dark Details Screen - Light

Adaptive Screen

Dark Theme Light Theme
Adaptive Screen - Dark Adaptive Screen - Light

Player Screen

Dark Theme Light Theme Landscape
Player Screen - Dark Player Screen - Light Player Screen - Landscape

Additional Features

Localization Network Connectivity Listener
Home Screen Turkish Network Connectivity Listener

Features

  • Kotlin based, Compose for UI Toolkit, Coroutines + Flow for asynchronous jobs.

  • Jetpack

    • Compose: Android’s recommended modern toolkit for building native UI.
    • Android Architecture Components: Collection of libraries that help you design robust, testable, and maintainable apps.
      • Coroutines: Concurrency design pattern that you can use on Android to simplify code that executes asynchronously.
      • Hilt Dependency Injection: Hilt is a dependency injection library for Android that reduces the boilerplate of doing manual dependency injection in your project.
      • Stateflow: StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.
      • Flow: A flow is an asynchronous version of a Sequence, a type of collection whose values are lazily produced.
      • Navigation with Compose: Navigation component for Compose.
      • DataStore: Jetpack DataStore is a data storage solution that allows you to store key-value pairs or typed objects with protocol buffers. DataStore uses Kotlin coroutines and Flow to store data asynchronously, consistently, and transactionally.
      • Splash Screen API: Smooth app launch experience
      • Media3 - ExoPlayer: Media playback library that supports adaptive streaming, DRM-protected content and custom controls.
      • Material 3 Adaptive Layout: Responsive UI components for different screen sizes and orientations including tablet support.
      • Pagin g3: Library that helps load and display pages of data from a larger dataset from local storage or over network.
  • Firebase

  • Architecture

    • Multi-Module Architecture with lots of customized convention plugins (build_logic - app - core - feature)
    • MVVM Architecture
    • Clean Architecture approach (Data - Domain - Presentation(UI))
  • 3rd Part Libraries

    • ksp: Kotlin Symbol Processing API.
    • Retrofit2 & OkHttp3: Construct the REST APIs and paging network data.
    • Coil for async image loading library
    • Detekt for static code analysis with compose specific rules
    • GitHub Actions for simple ci pipeline
    • GitHooks for running static analysis and code formatters before commit and push actions
    • LeakCanary for leak detection on runtime
    • Chucker for network inspector on debug builds
    • Maestro: Mobile UI testing framework.
    • JankStats: The JankStats library helps you track and analyze performance problems in your applications.
    • Lottie: Library for rendering Adobe After Effects animations natively on Android.
  • Unit Test

    • Turbine: A small testing library for kotlinx.coroutines Flow.
    • JUnit: Testing framework for Java and Kotlin applications.
    • MockK: Mocking library for Kotlin.

Configuration

Add this to your local.properties in order to use MovieDB API

# Project specific variables
moviecatalog.api.url="https://api.themoviedb.org/3/"
moviecatalog.api.key="ec4c51244bdef75d9f6f4dcf9dde1ae6"
moviecatalog.image.url="https://image.tmdb.org/t/p/w500"

Module Dependency Graph

%%{
    init: {
    'theme': 'base',
    'themeVariables': {
        "primaryTextColor":"#ffffff",
        "primaryColor":"#5a4f7c",
        "primaryBorderColor":"#ffffff",
        "tertiaryBorderColor":"#40375c",
        "lineColor":"#f5a623",
        "tertiaryColor":"#40375c",
        "fontSize":"14px"
        }
    }
}%%
graph TD
    subgraph Application Modules
        app
    end
    subgraph Core Modules
        common
        data
        datastore
        domain
        navigation
        network
        ui
    end
    subgraph Feature Modules
        adaptive
        detail
        home
        player
        splash
    end
    app-->ui
    app-->common
    app-->navigation
    ui-->common
    ui-->domain
    navigation-->ui
    navigation-->splash
    navigation-->home
    navigation-->detail
    navigation-->player
    navigation-->adaptive
    splash-->common
    splash-->domain
    splash-->ui
    home-->common
    home-->domain
    home-->ui
    detail-->ui
    detail-->domain
    detail-->common
    detail-->network
    player-->common
    player-->domain
    player-->ui
    adaptive-->common
    adaptive-->domain
    adaptive-->ui
    adaptive-->home
    adaptive-->detail
    domain-->data
    domain-->network
    domain-->common
    datastore-->domain
    network-->data
    network-->common

%% Auto generated by ModuleDependencyGraphPlugin.kt

Loading

Next Steps

  • WIP - Datastore Impl for Cache Mechanism
  • UI Tests using Maestro
  • Benchmark Module and Baseline Profiles
  • Transition animation for HomeScreen to DetailScreen
  • JaCoCo for Code Coverage

- Back to top -