A native Android/Kotlin app that transforms an Amazon Fire TV Stick into an ambient wall clock display with dual timezone clocks, rotating wallpapers, YouTube playlist playback, hourly chimes, and anti-burn-in protection.
Large primary clock (86sp monospace) with a compact secondary clock in a glass-morphism card. Supports 20 timezones across all major regions. Configurable 12-hour or 24-hour format. Updates every second.
ExoPlayer-based player in the top-right corner with rounded corners and a subtle glow border. Supports playlist URLs, single video URLs, short URLs, and bare IDs. Playlists play sequentially with lazy stream resolution via NewPipeExtractor. Transport controls (previous, rewind 10s, fast-forward 10s, next) appear on D-pad press and auto-hide after 5 seconds. Handles stream URL expiration (HTTP 403) by automatically re-resolving.
Full-screen wallpapers from Lorem Picsum with smooth 2-second crossfade transitions. Configurable intervals: 1, 5, 10, or 30 minutes. Falls back to procedurally generated gradients when offline.
Synthesized major chord (C5-E5-G5) with exponential decay, played at half-hour intervals. Visual pill indicator with pulsing dot appears briefly on chime.
Smooth random walk animation moves the clock container by up to 30 pixels every 2 minutes, preventing OLED/LCD burn-in on always-on displays.
Screen dims to 45% opacity between 11 PM and 6 AM (based on primary timezone) with a gradual 60-second fade transition.
All interaction is via the Fire TV remote D-pad:
| Key | Normal Mode | Settings Mode | Transport Mode |
|---|---|---|---|
| Center/Enter | Open settings | Toggle/cycle value | Activate button |
| Up/Down | Show transport controls | Navigate settings | Reset auto-hide |
| Left/Right | -- | Adjust value | Navigate buttons |
| Back | Exit app | Close settings | Dismiss controls |
| Play/Pause | Toggle video playback | -- | -- |
| Setting | Default | Options |
|---|---|---|
| Primary Timezone | US Eastern | 20 timezones |
| Secondary Timezone | India IST | 20 timezones |
| Time Format | 12-hour | 12h / 24h |
| Chime | ON | ON / OFF |
| Wallpaper | ON | ON / OFF |
| Wallpaper Interval | 5 min | 1 / 5 / 10 / 30 min |
| Drift | ON | ON / OFF |
| Night Dim | ON | ON / OFF |
| YouTube URL | (empty) | Any YouTube URL or ID |
| Player Size | Medium | Small (240x135) / Medium (320x180) / Large (426x240) |
| Show Player | ON | ON / OFF |
- Language: Kotlin 1.9.20
- Video: Media3 ExoPlayer 1.5.1
- Stream Resolution: NewPipeExtractor 0.26.0
- HTTP: OkHttp 4.12.0
- Images: Coil 2.5.0
- Concurrency: Kotlin Coroutines 1.7.3
- UI: AndroidX AppCompat, Leanback, ConstraintLayout
app/src/main/java/com/clock/firetv/
MainActivity.kt Main activity, UI, D-pad handling, settings
YouTubePlayerManager.kt ExoPlayer wrapper, playlist logic, transport methods
StreamResolver.kt NewPipeExtractor integration for stream URLs
WallpaperManager.kt Image rotation with crossfade transitions
ChimeManager.kt Synthesized audio chime with visual indicator
DriftAnimator.kt Anti-burn-in random walk animation
SettingsManager.kt SharedPreferences-based settings
OkHttpDownloader.kt OkHttp bridge for NewPipeExtractor
openspec/specs/ Feature specifications (requirements & scenarios)
native-media-player/ ExoPlayer playback, lifecycle, persistent playback
youtube-stream-extraction/ URL parsing, stream resolution, playlist extraction
player-transport-controls/ Transport overlay, D-pad navigation, auto-hide
Prerequisites: Android SDK with API 35, Java 8+
# Build debug APK
./gradlew assembleDebug
# Connect to Fire TV over ADB (replace with your device IP)
adb connect 192.168.1.52:5555
# Install
adb install -r app/build/outputs/apk/debug/app-debug.apkTo find your Fire TV's IP address: Settings > My Fire TV > About > Network.
ADB debugging must be enabled: Settings > My Fire TV > Developer Options > ADB Debugging.
The UI uses a glass-morphism aesthetic with semi-transparent panels, subtle borders with glow effects, and a warm color palette:
- Primary text: #F0EEE6 (warm white)
- Accent: #E8A44A (gold)
- Backgrounds: Semi-transparent dark panels with rounded corners
- Typography: Monospace throughout for fixed-width digit alignment
This project is licensed under the MIT License.