Bind PlayerChange before handlers to report correct isLocalPlayer (#7376)

PlayerChange was firing before the subscriber rebound its player, so the
first media session update could send `isLocalPlayer: false` (player undefined)
and Android treated playback as remote (cast volume UI). Rewire PlaybackSubscriber
so PlayerChange binds the current player before invoking handlers, ensuring media
session updates always have a bound player and report the correct local/remote
state.

Fixes: https://github.com/jellyfin/jellyfin-android/issues/1745
Fixes: https://github.com/jellyfin/jellyfin-android/issues/1854
This commit is contained in:
Roberto Romero
2025-12-02 03:23:24 +01:00
committed by GitHub
parent 06f5442fc9
commit 4e9c2e71a9

View File

@@ -78,12 +78,14 @@ export abstract class PlaybackSubscriber {
constructor(
protected readonly playbackManager: PlaybackManager
) {
// Bind player events before invoking any player change handlers
Events.on(playbackManager, PlaybackManagerEvent.PlayerChange, this.bindPlayerEvents.bind(this));
Object.entries(this.playbackManagerEvents).forEach(([event, handler]) => {
if (handler) Events.on(playbackManager, event, handler);
});
this.bindPlayerEvents();
Events.on(playbackManager, PlaybackManagerEvent.PlayerChange, this.bindPlayerEvents.bind(this));
}
private bindPlayerEvents() {