How caninjpn/xmb-launcher works
Ember XMB is an Android TV launcher with a PS3-style XMB interface. A remote-key event enters through MainActivity, which dispatches navigation to XmbViewModel; the model loads installed apps and Continue Watching items, combines them with launcher state, and supplies the Compose screen. The screen presents categories, item columns, menus and themes, while a separate GLES view renders the animated background. The README also documents category assignment, favourites, rearrangement and theme options. Some listed modules were not excerpted, so their internal links are omitted where evidence is unavailable.
Main entry points: XmbViewModel.kt Launcher state · MainActivity.kt Main activity · XmbScreen.kt XMB screen · XmbParts.kt Menus and parts
Components 15
App entry and state
- Main activity
app/src/main/java/com/ember/xmb/MainActivity.kt - Launcher state
app/src/main/java/com/ember/xmb/XmbViewModel.kt - Launcher models
app/src/main/java/com/ember/xmb/model/Models.kt - System state
app/src/main/java/com/ember/xmb/system/SystemState.kt
App and recency data
- App catalog
app/src/main/java/com/ember/xmb/data/AppRepository.kt - Continue Watching
app/src/main/java/com/ember/xmb/data/ContinueWatchingRepository.kt - Launcher preferences
app/src/main/java/com/ember/xmb/data/Prefs.kt - Artwork loading
app/src/main/java/com/ember/xmb/data/Images.kt
XMB interface
- XMB screen
app/src/main/java/com/ember/xmb/ui/XmbScreen.kt - Menus and parts
app/src/main/java/com/ember/xmb/ui/XmbParts.kt - XMB icons
app/src/main/java/com/ember/xmb/ui/XmbIcons.kt - Theme palette
app/src/main/java/com/ember/xmb/ui/XmbPalette.kt
Background rendering
- Animated background
app/src/main/java/com/ember/xmb/gl/WaveView.kt - GLES shaders
app/src/main/java/com/ember/xmb/gl/Shaders.kt
Other components
- TV remote
Connections 18
- TV remote → Main activity: sends keys
app/src/main/java/com/ember/xmb/MainActivity.kt - Main activity → Launcher state: dispatches input
app/src/main/java/com/ember/xmb/MainActivity.kt - Main activity → XMB screen: hosts Compose UI
app/src/main/java/com/ember/xmb/MainActivity.kt - Main activity → Animated background: hosts renderer
app/src/main/java/com/ember/xmb/MainActivity.kt - Main activity → Theme palette: uses theme
app/src/main/java/com/ember/xmb/MainActivity.kt - Launcher state → App catalog: loads catalog
app/src/main/java/com/ember/xmb/XmbViewModel.kt - Launcher state → Continue Watching: loads recency
app/src/main/java/com/ember/xmb/XmbViewModel.kt - Launcher state → Launcher preferences: reads and writes
app/src/main/java/com/ember/xmb/XmbViewModel.kt - App catalog → Launcher preferences: reads assignments
app/src/main/java/com/ember/xmb/data/AppRepository.kt - Continue Watching → App catalog: uses app catalog
app/src/main/java/com/ember/xmb/data/ContinueWatchingRepository.kt - Continue Watching → Launcher preferences: uses launch history
app/src/main/java/com/ember/xmb/data/ContinueWatchingRepository.kt - XMB screen → Launcher state: renders state
app/src/main/java/com/ember/xmb/ui/XmbScreen.kt - XMB screen → Theme palette: uses colors
app/src/main/java/com/ember/xmb/ui/XmbScreen.kt - XMB screen → XMB icons: uses icons
app/src/main/java/com/ember/xmb/ui/XmbScreen.kt - Menus and parts → Launcher state: invokes actions
app/src/main/java/com/ember/xmb/ui/XmbParts.kt - Menus and parts → Theme palette: uses colors
app/src/main/java/com/ember/xmb/ui/XmbParts.kt - Menus and parts → XMB icons: uses icons
app/src/main/java/com/ember/xmb/ui/XmbParts.kt - Animated background → GLES shaders: uses programs
app/src/main/java/com/ember/xmb/gl/WaveView.kt