diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ExitFullscreenPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ExitFullscreenPatch.java index dddea1387c..02d53fa696 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ExitFullscreenPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ExitFullscreenPatch.java @@ -38,13 +38,20 @@ public static void endOfVideoReached() { } } - ImageView fullscreenButton = PlayerControlsPatch.fullscreenButtonRef.get(); - if (fullscreenButton == null) { - Logger.printDebug(() -> "Fullscreen button is null, cannot click"); - } else { - Logger.printDebug(() -> "Clicking fullscreen button"); - fullscreenButton.performClick(); - } + // If the user cold launches the app and plays a video but does not + // tap to show the overlay controls, the fullscreen button is not + // set because the overlay controls are not attached. + // To fix this, push the perform click to the back fo the main thread, + // and by then the overlay controls will be visible since the video is now finished. + Utils.runOnMainThread(() -> { + ImageView button = PlayerControlsPatch.fullscreenButtonRef.get(); + if (button == null) { + Logger.printDebug(() -> "Fullscreen button is null, cannot click"); + } else { + Logger.printDebug(() -> "Clicking fullscreen button"); + button.performClick(); + } + }); } } catch (Exception ex) { Logger.printException(() -> "endOfVideoReached failure", ex); diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/fullscreen/ExitFullscreenPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/fullscreen/ExitFullscreenPatch.kt index d1d93748d5..105494a221 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/fullscreen/ExitFullscreenPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/fullscreen/ExitFullscreenPatch.kt @@ -1,6 +1,5 @@ package app.revanced.patches.youtube.layout.player.fullscreen -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.patch.bytecodePatch import app.revanced.patches.all.misc.resources.addResources import app.revanced.patches.all.misc.resources.addResourcesPatch @@ -12,6 +11,7 @@ import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch import app.revanced.patches.youtube.shared.autoRepeatFingerprint import app.revanced.patches.youtube.shared.autoRepeatParentFingerprint +import app.revanced.util.addInstructionsAtControlFlowLabel @Suppress("unused") internal val exitFullscreenPatch = bytecodePatch( @@ -57,9 +57,11 @@ internal val exitFullscreenPatch = bytecodePatch( ) ) - autoRepeatFingerprint.match(autoRepeatParentFingerprint.originalClassDef).method.addInstruction( - 0, - "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->endOfVideoReached()V", - ) + autoRepeatFingerprint.match(autoRepeatParentFingerprint.originalClassDef).method.apply { + addInstructionsAtControlFlowLabel( + implementation!!.instructions.lastIndex, + "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->endOfVideoReached()V", + ) + } } }