Idiomatic kotlin API for Player Events (media3-common-ktx)
Open
@oceanjules is already working on this.
Since Jan 8, 2025.
enhancement
- Dominant language
- Java
- Stars
- 3k
- Forks
- 955
- Avg merge
- 12d 14h
- Merged PRs (30d)
- 2
Description
Use case description
Please provide a idiomatic kotlin API for player events using Flow in androidx.media3:media3-common-ktx
Proposed solution
Current API is a suspend API with a callback. suspend API is typically meant for a one-time async request. For a stream of player events, please provide a Flow<Player.Events> using callbackFlow.
suspend fun Player.listen(onEvents: Player.(Player.Events) -> Unit): Nothing {
if (Looper.myLooper() == applicationLooper) {
listenImpl(onEvents)
} else
withContext(HandlerCompat.createAsync(applicationLooper).asCoroutineDispatcher()) {
listenImpl(onEvents)
}
}
Alternatives considered
// use callbackFlow to convert callback into Flow
val Player.eventsFlow: Flow<Player.Events> get() = callbackFlow {
val listener = object: Player.Listener {
override fun onEvents(player: Player, events: Player.Events) {
trySend(events)
}
}
addListener(listener)
awaitClose {
removeListener(listener)
}
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.