From daf22c499a63c0d27bd38fc88c1b37fc843f73f9 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 8 Jan 2025 15:07:13 +0100 Subject: [PATCH] fix: wrong back order when new fragment opened from audio/video player --- .../github/libretube/ui/fragments/AudioPlayerFragment.kt | 7 +++++++ .../com/github/libretube/ui/fragments/PlayerFragment.kt | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt index 243ecff1d..bf76bf4ff 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt @@ -262,6 +262,13 @@ class AudioPlayerFragment : Fragment(), AudioPlayerOptions { setOnBackPressed(onBackPressedCallback) viewModel.isMiniPlayerVisible.observe(viewLifecycleOwner) { isMiniPlayerVisible -> + // re-add the callback on top of the back pressed dispatcher listeners stack, + // so that it's the first one to become called while the full player is visible + if (!isMiniPlayerVisible) { + onBackPressedCallback.remove() + setOnBackPressed(onBackPressedCallback) + } + // if the player is minimized, the fragment behind the player should handle the event onBackPressedCallback.isEnabled = isMiniPlayerVisible != true } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index e82451773..c1e15c63f 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -486,6 +486,13 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions { setOnBackPressed(onBackPressedCallback) commonPlayerViewModel.isMiniPlayerVisible.observe(viewLifecycleOwner) { isMiniPlayerVisible -> + // re-add the callback on top of the back pressed dispatcher listeners stack, + // so that it's the first one to become called while the full player is visible + if (!isMiniPlayerVisible) { + onBackPressedCallback.remove() + setOnBackPressed(onBackPressedCallback) + } + // if the player is minimized, the fragment behind the player should handle the event onBackPressedCallback.isEnabled = isMiniPlayerVisible != true }