From f5834ab7421bab821ff51a93f67d4d33f8a2367e Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Fri, 3 Jan 2025 22:12:35 +0900 Subject: [PATCH] fix(YouTube - Overlay buttons): Overlay buttons do not disappear immediately when fullscreen button is clicked --- .../patches/utils/PlayerControlsPatch.java | 2 +- .../extension/youtube/shared/BottomSheetState.kt | 2 +- .../extension/youtube/shared/LockModeState.kt | 2 +- .../youtube/shared/PlayerControlsVisibility.kt | 1 + .../extension/youtube/shared/PlayerType.kt | 2 +- .../youtube/shared/ShortsPlayerState.kt | 2 +- .../extension/youtube/shared/VideoState.kt | 1 + .../utils/playercontrols/PlayerControlsPatch.kt | 16 ++++++++++++++++ 8 files changed, 23 insertions(+), 5 deletions(-) diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/utils/PlayerControlsPatch.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/utils/PlayerControlsPatch.java index 5a6e56f6a..7a3442505 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/utils/PlayerControlsPatch.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/utils/PlayerControlsPatch.java @@ -106,7 +106,7 @@ public class PlayerControlsPatch { } } - private static void changeVisibilityNegatedImmediately() { + public static void changeVisibilityNegatedImmediately() { // AlwaysRepeat.changeVisibilityNegatedImmediate(); // CopyVideoUrl.changeVisibilityNegatedImmediate(); // CopyVideoUrlTimestamp.changeVisibilityNegatedImmediate(); diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/BottomSheetState.kt b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/BottomSheetState.kt index 2d8b513a3..83e4dd514 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/BottomSheetState.kt +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/BottomSheetState.kt @@ -31,7 +31,7 @@ enum class BottomSheetState { onChange(currentBottomSheetState) } - @Volatile // value is read/write from different threads + @Volatile // Read/write from different threads. private var currentBottomSheetState = CLOSED /** diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/LockModeState.kt b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/LockModeState.kt index 9a330e687..2b7063664 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/LockModeState.kt +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/LockModeState.kt @@ -40,7 +40,7 @@ enum class LockModeState { onChange(value) } - @Volatile // value is read/write from different threads + @Volatile // Read/write from different threads. private var currentLockModeState = LOCK_MODE_STATE_ENUM_UNKNOWN /** diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlayerControlsVisibility.kt b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlayerControlsVisibility.kt index e5c8e6639..c7cf1bbd7 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlayerControlsVisibility.kt +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlayerControlsVisibility.kt @@ -38,6 +38,7 @@ enum class PlayerControlsVisibility { currentPlayerControlsVisibility = value } + @Volatile // Read/write from different threads. private var currentPlayerControlsVisibility: PlayerControlsVisibility? = null } } \ No newline at end of file diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlayerType.kt b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlayerType.kt index 9bfaffe58..201d32085 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlayerType.kt +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/PlayerType.kt @@ -71,7 +71,7 @@ enum class PlayerType { onChange(value) } - @Volatile // value is read/write from different threads + @Volatile // Read/write from different threads. private var currentPlayerType = NONE /** diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/ShortsPlayerState.kt b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/ShortsPlayerState.kt index b0aed2e79..e3e56c58e 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/ShortsPlayerState.kt +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/ShortsPlayerState.kt @@ -31,7 +31,7 @@ enum class ShortsPlayerState { onChange(value) } - @Volatile // value is read/write from different threads + @Volatile // Read/write from different threads. private var currentShortsPlayerState = CLOSED /** diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/VideoState.kt b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/VideoState.kt index 4e1888a7c..b26759ce9 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/VideoState.kt +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/VideoState.kt @@ -39,6 +39,7 @@ enum class VideoState { currentVideoState = value } + @Volatile // Read/write from different threads. private var currentVideoState: VideoState? = null } } \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsPatch.kt index 8a648f0f4..e0e54f204 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsPatch.kt @@ -9,8 +9,11 @@ import app.revanced.patcher.patch.resourcePatch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.utils.extension.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.extension.sharedExtensionPatch +import app.revanced.patches.youtube.utils.fullscreen.enterFullscreenMethod +import app.revanced.patches.youtube.utils.fullscreen.fullscreenButtonHookPatch import app.revanced.patches.youtube.utils.playerButtonsResourcesFingerprint import app.revanced.patches.youtube.utils.playerButtonsVisibilityFingerprint +import app.revanced.patches.youtube.utils.playservice.is_19_23_or_greater import app.revanced.patches.youtube.utils.playservice.is_19_25_or_greater import app.revanced.patches.youtube.utils.playservice.versionCheckPatch import app.revanced.patches.youtube.utils.resourceid.sharedResourceIdPatch @@ -46,6 +49,7 @@ private val playerControlsBytecodePatch = bytecodePatch( sharedExtensionPatch, sharedResourceIdPatch, versionCheckPatch, + fullscreenButtonHookPatch, ) execute { @@ -114,6 +118,18 @@ private val playerControlsBytecodePatch = bytecodePatch( // endregion + // region patch for fix buttons do not hide immediately when fullscreen button is clicked + + // Reproduced only in RVX + if (is_19_23_or_greater) { + enterFullscreenMethod.addInstruction( + 0, + "invoke-static {}, $EXTENSION_PLAYER_CONTROLS_CLASS_DESCRIPTOR->changeVisibilityNegatedImmediately()V" + ) + } + + // endregion + // region patch initialize of overlay button or SponsorBlock button mapOf(