From 4e9c2e71a96481a1d0ef60d1d260afddc20fb932 Mon Sep 17 00:00:00 2001 From: Roberto Romero Date: Tue, 2 Dec 2025 03:23:24 +0100 Subject: [PATCH] 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 --- src/apps/stable/features/playback/utils/playbackSubscriber.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/apps/stable/features/playback/utils/playbackSubscriber.ts b/src/apps/stable/features/playback/utils/playbackSubscriber.ts index 05c9f53faa..5a746740b7 100644 --- a/src/apps/stable/features/playback/utils/playbackSubscriber.ts +++ b/src/apps/stable/features/playback/utils/playbackSubscriber.ts @@ -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() {