Kid Player
A kid-friendly Android tablet application for streaming media from Jellyfin servers, designed for children ages 4-10 with comprehensive parental controls.
// 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
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