diff --git a/src/main/kotlin/app/revanced/patches/shared/patch/mapping/ResourceType.kt b/src/main/kotlin/app/revanced/patches/shared/patch/mapping/ResourceType.kt index 34654c0e7..6742e83d0 100644 --- a/src/main/kotlin/app/revanced/patches/shared/patch/mapping/ResourceType.kt +++ b/src/main/kotlin/app/revanced/patches/shared/patch/mapping/ResourceType.kt @@ -7,6 +7,7 @@ enum class ResourceType(val value: String) { DIMEN("dimen"), DRAWABLE("drawable"), ID("id"), + INTEGER("integer"), LAYOUT("layout"), STRING("string"), STYLE("style") diff --git a/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/fullscreen/FullscreenButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/fullscreen/FullscreenButtonPatch.kt new file mode 100644 index 000000000..184fd24ff --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/fullscreen/FullscreenButtonPatch.kt @@ -0,0 +1,39 @@ +package app.revanced.patches.youtube.overlaybutton.fullscreen + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.youtube.overlaybutton.fullscreen.fingerprints.FullScreenButtonFingerprint +import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch +import app.revanced.util.exception +import app.revanced.util.getTargetIndexWithReference +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction + +@Patch(dependencies = [SharedResourceIdPatch::class]) +object FullscreenButtonPatch : BytecodePatch( + setOf(FullScreenButtonFingerprint) +) { + override fun execute(context: BytecodeContext) { + + FullScreenButtonFingerprint.result?.let { + it.mutableMethod.apply { + val viewIndex = getTargetIndexWithReference("Landroid/widget/ImageView;->getResources()Landroid/content/res/Resources;") + val viewRegister = getInstruction(viewIndex).registerC + + addInstructionsWithLabels( + viewIndex, """ + invoke-static {v$viewRegister}, $UTILS_PATH/FullscreenButtonPatch;->hideFullscreenButton(Landroid/widget/ImageView;)Landroid/widget/ImageView; + move-result-object v$viewRegister + if-nez v$viewRegister, :show + return-void + """, ExternalLabel("show", getInstruction(viewIndex)) + ) + } + } ?: throw FullScreenButtonFingerprint.exception + + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/fullscreen/fingerprints/FullScreenButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/fullscreen/fingerprints/FullScreenButtonFingerprint.kt new file mode 100644 index 000000000..75a4fbf97 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/fullscreen/fingerprints/FullScreenButtonFingerprint.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.youtube.overlaybutton.fullscreen.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.FadeDurationFast +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.FullScreenButton +import app.revanced.util.containsWideLiteralInstructionIndex +import com.android.tools.smali.dexlib2.AccessFlags + +object FullScreenButtonFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Landroid/view/View;"), + customFingerprint = { methodDef, _ -> + methodDef.containsWideLiteralInstructionIndex(FadeDurationFast) + && methodDef.containsWideLiteralInstructionIndex(FullScreenButton) + }, +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/general/OverlayButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/general/OverlayButtonsPatch.kt index 692ca8893..96329e323 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/general/OverlayButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/overlaybutton/general/OverlayButtonsPatch.kt @@ -8,6 +8,7 @@ import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.booleanPat import app.revanced.patches.youtube.overlaybutton.alwaysrepeat.AlwaysRepeatPatch import app.revanced.patches.youtube.overlaybutton.download.hook.DownloadButtonHookPatch import app.revanced.patches.youtube.overlaybutton.download.pip.DisablePiPPatch +import app.revanced.patches.youtube.overlaybutton.fullscreen.FullscreenButtonPatch import app.revanced.patches.youtube.utils.integrations.Constants.OVERLAY_BUTTONS_PATH import app.revanced.patches.youtube.utils.overridespeed.OverrideSpeedHookPatch import app.revanced.patches.youtube.utils.playerbutton.PlayerButtonHookPatch @@ -28,6 +29,7 @@ import org.w3c.dom.Element AlwaysRepeatPatch::class, DisablePiPPatch::class, DownloadButtonHookPatch::class, + FullscreenButtonPatch::class, OverrideSpeedHookPatch::class, PlayerButtonHookPatch::class, PlayerControlsPatch::class, diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 3c0193489..7a8d7585b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -9,6 +9,7 @@ import app.revanced.patches.shared.patch.mapping.ResourceType.COLOR import app.revanced.patches.shared.patch.mapping.ResourceType.DIMEN import app.revanced.patches.shared.patch.mapping.ResourceType.DRAWABLE import app.revanced.patches.shared.patch.mapping.ResourceType.ID +import app.revanced.patches.shared.patch.mapping.ResourceType.INTEGER import app.revanced.patches.shared.patch.mapping.ResourceType.LAYOUT import app.revanced.patches.shared.patch.mapping.ResourceType.STRING @@ -42,8 +43,10 @@ object SharedResourceIdPatch : ResourcePatch() { var EmojiPickerIcon: Long = -1 var ExpandButtonDown: Long = -1 var Fab: Long = -1 + var FadeDurationFast: Long = -1 var FilterBarHeight: Long = -1 var FloatyBarTopMargin: Long = -1 + var FullScreenButton: Long = -1 var FullScreenEngagementOverlay: Long = -1 var FullScreenEngagementPanel: Long = -1 var HorizontalCardList: Long = -1 @@ -125,8 +128,10 @@ object SharedResourceIdPatch : ResourcePatch() { EmojiPickerIcon = find(ID, "emoji_picker_icon") ExpandButtonDown = find(LAYOUT, "expand_button_down") Fab = find(ID, "fab") + FadeDurationFast = find(INTEGER, "fade_duration_fast") FilterBarHeight = find(DIMEN, "filter_bar_height") FloatyBarTopMargin = find(DIMEN, "floaty_bar_button_top_margin") + FullScreenButton = find(ID, "fullscreen_button") FullScreenEngagementOverlay = find(LAYOUT, "fullscreen_engagement_overlay") FullScreenEngagementPanel = find(ID, "fullscreen_engagement_panel_holder") HorizontalCardList = find(LAYOUT, "horizontal_card_list") diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 4c62a3f00..9c7c2d5e3 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -423,6 +423,9 @@ Some components may not be hidden." "'For You' shelves are shown." "'For You' shelves are hidden." "Hide 'For You' shelf" + Fullscreen button is shown. + Fullscreen button is hidden. + Hide fullscreen button Fullscreen panels are shown. Fullscreen panels are hidden. Hide fullscreen panels diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index ebdba43e1..703b3cb3a 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -564,6 +564,7 @@