How whoxamxl/aalyrics works
AALyrics observes Android media playback, converts it into shared playback state, looks up and selects lyrics through independent providers, then exposes the result to phone and Android Auto surfaces. The README documents concurrent provider orchestration, playback-identity ownership, and demand-based lookup; several composition and UI links are represented at module level because their wiring was not sampled. Translation and release-update code are present in the app tree, but their runtime flow is not established by the excerpts.
Main entry points: LyricsCoordinator.kt Lyrics coordinator · PhoneRuntimeHost.kt Phone runtime host · PlaybackLyricsController.kt Playback lyrics owner · MediaSessionListenerService.kt Media listener
Components 20
App runtime
- Phone runtime host
app/src/main/java/io/github/whoxamxl/aalyrics/PhoneRuntimeHost.kt - App composition
app/src/main/java/io/github/whoxamxl/aalyrics/AALyricsApplication.kt - Lyrics demand gate
app/src/main/java/io/github/whoxamxl/aalyrics/LyricsDemandGate.kt - Translation runtime
app/src/main/java/io/github/whoxamxl/aalyrics/TranslationExecutionRuntime.kt
Playback integration
- Media listener
platform/media/src/main/kotlin/io/github/whoxamxl/aalyrics/platform/media/MediaSessionListenerService.kt - Snapshot adapter
platform/media/src/main/kotlin/io/github/whoxamxl/aalyrics/platform/media/MediaControllerSnapshotAdapter.kt
Lyrics engine
- Playback lyrics owner
core/lyrics/src/main/kotlin/io/github/whoxamxl/aalyrics/core/lyrics/PlaybackLyricsController.kt - Lyrics coordinator
core/lyrics/src/main/kotlin/io/github/whoxamxl/aalyrics/core/lyrics/LyricsCoordinator.kt - Lookup lifecycle
core/lyrics/src/main/kotlin/io/github/whoxamxl/aalyrics/core/lyrics/LyricsLookupLifecycle.kt - Shared domain models
core/model/src/main/kotlin/io/github/whoxamxl/aalyrics/core/model/Playback.kt
Lyrics providers
- Candidate selection
provider/selection/src/main/kotlin/io/github/whoxamxl/aalyrics/provider/selection/CrossProviderCandidateSelector.kt - LRCLIB adapter
provider/lrclib/src/main/kotlin/io/github/whoxamxl/aalyrics/provider/lrclib/LrcLibProvider.kt - PetitLyrics adapter
provider/petitlyrics/src/main/kotlin/io/github/whoxamxl/aalyrics/provider/petitlyrics/PetitLyricsProvider.kt - Musixmatch adapter
provider/musixmatch/src/main/kotlin/io/github/whoxamxl/aalyrics/provider/musixmatch/MusixmatchProvider.kt - SyncLRC adapter
provider/synclrc/src/main/kotlin/io/github/whoxamxl/aalyrics/provider/synclrc/SyncLrcProvider.kt
Presentation
- Phone presentation
ui/phone/src/main/java/io/github/whoxamxl/aalyrics/ui/phone/lyrics/LyricsRoute.kt - Auto browser service
ui/automotive/src/main/java/io/github/whoxamxl/aalyrics/ui/automotive/service/LyricsBrowserService.kt - Auto presentation
ui/automotive/src/main/java/io/github/whoxamxl/aalyrics/ui/automotive/screen/NowPlayingScreen.kt
Other components
- Android media sessions
- Lyrics services
Connections 21
- Android media sessions → Media listener: notifies sessions
- Media listener → Snapshot adapter: observes playback
- Snapshot adapter → Shared domain models: normalizes state
- Phone runtime host → Playback lyrics owner: forwards playback
- App composition → Phone runtime host: composes runtime
- Lyrics demand gate → Playback lyrics owner: gates lookup
- Playback lyrics owner → Lookup lifecycle: starts lookup
- Lookup lifecycle → Lyrics coordinator: runs lookup
- Lyrics coordinator → LRCLIB adapter: queries provider
- Lyrics coordinator → PetitLyrics adapter: queries provider
- Lyrics coordinator → Musixmatch adapter: queries provider
- Lyrics coordinator → SyncLRC adapter: queries provider
- LRCLIB adapter → Lyrics services: requests lyrics
- PetitLyrics adapter → Lyrics services: requests lyrics
- Musixmatch adapter → Lyrics services: requests lyrics
- SyncLRC adapter → Lyrics services: requests lyrics
- Lyrics coordinator → Candidate selection: selects winner
- Lyrics coordinator → Shared domain models: produces lyrics state
- Phone runtime host → Phone presentation: exposes app state
- Phone runtime host → Auto browser service: exposes app state
- Auto browser service → Auto presentation: renders metadata