// Overview

Kid Player is a kid-friendly Android tablet application for Jellyfin streaming with parental controls, screen time limits, and safe UI for children ages 4-10.

Designed specifically for tablets, it features an intuitive, child-safe interface with large touch targets and comprehensive parental control features to give parents peace of mind.

// Architecture

Compose UI
ViewModels
Repository
Jellyfin SDK
Media3 Player
Room DB
|
DataStore
|
Download Manager

Built with clean architecture principles - the UI layer uses Jetpack Compose with Hilt dependency injection, while the data layer abstracts Jellyfin API calls behind repository interfaces for testability.

// Key Features

  • Large touch targets (56-64dp) optimized for small hands
  • Jellyfin streaming integration for media access
  • PIN-protected parental controls
  • Daily screen time limits with enforcement
  • Access schedules to control viewing hours
  • Offline support for downloaded content
  • Autoplay with countdown timer
  • Favorites management for easy access
  • Download manager for offline viewing

// Technical Details

Kotlin & Jetpack Compose: Built entirely with modern Android development tools, providing a native, performant experience with declarative UI patterns.

Media3 ExoPlayer: Leverages Google's powerful media playback library for smooth, reliable streaming and offline playback capabilities.

Material Design 3: Implements the latest Material Design guidelines with child-friendly adaptations for better usability and accessibility.

// Challenges & Solutions

Challenge: Enforcing screen time limits reliably without children finding workarounds like force-stopping the app.

Solution: Implemented a foreground service that tracks active usage time independently of the app lifecycle. Combined with Android's Device Admin API for kiosk-like lock mode, ensuring time limits persist even after app restarts.

Challenge: Making the download manager reliable across flaky network connections common with tablets.

Solution: Built a resume-capable download system using HTTP range requests. Downloads are chunked and tracked in Room database, allowing automatic retry from the last successful chunk after connectivity loss.

// What I'd Improve

  • Add multi-profile support for families with multiple children
  • Implement content rating filters based on age settings
  • Add casting support to Chromecast and smart TVs
  • Build usage reports dashboard for parents

// Requirements

  • Android Studio Hedgehog or later
  • JDK 17
  • Jellyfin Server 10.8.0 or later