PlayerUiStateProducer
Produces a flow of PlayerUiState based on events produced by a PlayerRepository.
This class should generally always be hosted inside a ViewModel to ensure it's tied to a lifecycle that survives configuration changes.