Skip to content
/ KOLSAtest Public

KOLSA test assignment. Workouts app built with View-based UI, RecyclerView, AdapterDelegates, DiffUtil, Dagger Hilt, Coroutines, Flow, ViewModel, Retrofit, OkHttp, Media3 ExoPlayer.

Notifications You must be signed in to change notification settings

vgve/KOLSAtest

Repository files navigation

Fitness App for Kolsanovafit

Project Overview

A clean architecture Android application showcasing workout videos with seamless playback experience. This implementation demonstrates modern Android development best practices and modular app architecture.

Note on functionality:
⚠️ The workout API service this app depended on is no longer available (external circumstances). While the app can't fetch live data, the codebase fully represents:
✅ My current technical capabilities
✅ Production-grade architecture decisions
✅ Best practices in Android development

Tech Stack

  • Language: Kotlin
  • Architecture: Clean Architecture + MVI, Single Activity
  • DI: Dagger Hilt
  • Async: Kotlin Coroutines & Flow
  • Views: XML, Fragments, Navigation Component
  • Binding: ViewBinding, ViewBindingPropertyDelegate
  • Lists: RecyclerView, AdapterDelegates, DiffUtil
  • HTTP: REST API, Retrofit + OkHttp
  • Serialization: Gson
  • Video: Media 3 ExoPlayer

Project structure

KOLSAtest/
├── app/                              # Android Application Module
│   ├── src/main/
│   │   ├── java/com/vgve/kolsatest/
│   │   │   ├── App.kt                # Application Class
│   │   │   └── MainActivity.kt   
│   │   ├── res/                      # Resources
│   │   │   ├── drawable/             # Vector Assets
│   │   │   ├── values/               # Colors, Strings, Styles
│   │   │   └── ...
│   │   └── AndroidManifest.xml
│   └── build.gradle.kts              # Module Dependencies
├── core/                             # Core Module
│   ├── src/main/
│   │   ├── java/com/vgve/core/
│   │   │   ├── di/                   # Dependency Injection (Dagger Hilt)
│   │   │   │   ├── CoreModule.kt
│   │   │   │   └── NetworkModule.kt  # Retrofit instance creation
│   │   │   └── utils/extensions/
│   │   │       └── NetworkExtensions.kt
│   │   └── AndroidManifest.xml
│   └── build.gradle.kts              # Module Dependencies
├── player/                           # Player Module
│   ├── src/main/
│   │   ├── java/com/vgve/player/
│   │   │   ├── di/                   # Dependency Injection (Dagger Hilt)
│   │   │   │   └── VideoPlayerModule.kt
│   │   │   ├── data/
│   │   │   │   └── VideoPlayerServiceImpl.kt
│   │   │   ├── domain/
│   │   │   │   └── VideoPlayerService.kt
│   │   │   └── presentation/ui/
│   │   │       └── CustomPlayerView.kt
│   │   ├── res/                      # Resources
│   │   └── AndroidManifest.xml
│   └── build.gradle.kts              # Module Dependencies
├── workouts/                         # Feaure Module
│   ├── src/main/
│   │   ├── java/com/vgve/workout/
│   │   │   ├── di/                   # Dependency Injection (Dagger Hilt)
│   │   │   │   └── WorkoutsModule.kt
│   │   │   ├── data/
│   │   │   │   ├── models/
│   │   │   │   └── repository/
│   │   │   ├── domain/
│   │   │   │   ├── models/
│   │   │   │   └── repository/
│   │   │   └── presentation/
│   │   │       ├── workouts/         # Workouts Screen: Fragment, ViewModel, adapters
│   │   │       └── workoutcard/      # Workout Card Screen: Fragment, ViewModel
│   │   ├── res/                      # Resources
│   │   └── AndroidManifest.xml
│   └── build.gradle.kts
├── build.gradle.kts                  # Project-level Config
├── settings.gradle.kts               # Project Settings
├── gradle.properties                 # Gradle Properties
└── README.md                         # Project Documentation

Screenshots

Light Theme Screens

Modular Architecture

The project follows Clean Architecture principles with three distinct modules:

Core Module

The foundation module containing shared infrastructure:

  • Network layer:
  • OkHttp client configuration
  • Retrofit instance creation
  • Utilities: Shared extensions

Player Module

Dedicated media handling module:

  • ExoPlayer wrapper: Singleton implementation
  • Centralized playback control
  • Lifecycle-aware player management

Workouts Feature Module

The main feature module containing:

  • Workout list screen:
    • Fetching and displaying workout collection
    • Smooth scrolling performance
  • Workout detail screen:
    • Comprehensive workout information
    • Integrated video player (utilizing Player module)
    • State preservation during configuration changes

About

KOLSA test assignment. Workouts app built with View-based UI, RecyclerView, AdapterDelegates, DiffUtil, Dagger Hilt, Coroutines, Flow, ViewModel, Retrofit, OkHttp, Media3 ExoPlayer.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages