From 7bb14ac2c3d553f9fdb968ee0c5a302fb3a5d008 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Sat, 21 Oct 2023 10:26:52 +0900 Subject: [PATCH] fix(YouTube/Hide shorts components): toolbar buttons in shorts are not hidden unless you include the `Hide toolbar button` patch --- .../general/toolbar/ToolBarButtonPatch.kt | 16 ++--------- .../shortscomponent/ShortsToolBarPatch.kt | 19 ++++--------- .../youtube/utils/toolbar/ToolBarHookPatch.kt | 27 ++++++++++++++++--- .../fingerprints/ToolBarPatchFingerprint.kt | 2 +- 4 files changed, 31 insertions(+), 33 deletions(-) rename src/main/kotlin/app/revanced/patches/youtube/utils/{ => toolbar}/fingerprints/ToolBarPatchFingerprint.kt (88%) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarButtonPatch.kt index cec589e32..ab59c2aac 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarButtonPatch.kt @@ -1,12 +1,9 @@ package app.revanced.patches.youtube.general.toolbar -import app.revanced.extensions.exception import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch -import app.revanced.patches.youtube.utils.fingerprints.ToolBarPatchFingerprint import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.utils.toolbar.ToolBarHookPatch import app.revanced.util.integrations.Constants.GENERAL @@ -42,19 +39,10 @@ import app.revanced.util.integrations.Constants.GENERAL ] ) @Suppress("unused") -object ToolBarButtonPatch : BytecodePatch( - setOf(ToolBarPatchFingerprint) -) { +object ToolBarButtonPatch : BytecodePatch() { override fun execute(context: BytecodeContext) { - ToolBarPatchFingerprint.result?.let { - it.mutableMethod.apply { - addInstruction( - 0, - "invoke-static {p0, p1}, $GENERAL->hideToolBarButton(Ljava/lang/String;Landroid/view/View;)V" - ) - } - } ?: throw ToolBarPatchFingerprint.exception + ToolBarHookPatch.injectCall("$GENERAL->hideToolBarButton") /** * Add settings diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/shortscomponent/ShortsToolBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/shortscomponent/ShortsToolBarPatch.kt index 576868768..b643d462e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/shortscomponent/ShortsToolBarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/shortscomponent/ShortsToolBarPatch.kt @@ -2,21 +2,19 @@ package app.revanced.patches.youtube.shorts.shortscomponent import app.revanced.extensions.exception import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction 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.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.youtube.shorts.shortscomponent.fingerprints.ToolBarBannerFingerprint -import app.revanced.patches.youtube.utils.fingerprints.ToolBarPatchFingerprint +import app.revanced.patches.youtube.utils.toolbar.ToolBarHookPatch import app.revanced.util.integrations.Constants.SHORTS +@Patch(dependencies = [ToolBarHookPatch::class]) object ShortsToolBarPatch : BytecodePatch( - setOf( - ToolBarBannerFingerprint, - ToolBarPatchFingerprint - ) + setOf(ToolBarBannerFingerprint) ) { override fun execute(context: BytecodeContext) { ToolBarBannerFingerprint.result?.let { @@ -38,13 +36,6 @@ object ShortsToolBarPatch : BytecodePatch( } } ?: throw ToolBarBannerFingerprint.exception - ToolBarPatchFingerprint.result?.let { - it.mutableMethod.apply { - addInstruction( - 0, - "invoke-static {p0, p1}, $SHORTS->hideShortsToolBarButton(Ljava/lang/String;Landroid/view/View;)V" - ) - } - } ?: throw ToolBarPatchFingerprint.exception + ToolBarHookPatch.injectCall("$SHORTS->hideShortsToolBarButton") } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/ToolBarHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/ToolBarHookPatch.kt index e387c2c97..e25628f38 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/ToolBarHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/ToolBarHookPatch.kt @@ -6,8 +6,10 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructions 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.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.toolbar.fingerprints.ToolBarButtonFingerprint +import app.revanced.patches.youtube.utils.toolbar.fingerprints.ToolBarPatchFingerprint import app.revanced.util.integrations.Constants.UTILS_PATH import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @@ -15,11 +17,11 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @Patch(dependencies = [SharedResourceIdPatch::class]) object ToolBarHookPatch : BytecodePatch( - setOf(ToolBarButtonFingerprint) + setOf( + ToolBarButtonFingerprint, + ToolBarPatchFingerprint + ) ) { - private const val INTEGRATIONS_CLASS_DESCRIPTOR = - "$UTILS_PATH/ToolBarPatch;" - override fun execute(context: BytecodeContext) { ToolBarButtonFingerprint.result?.let { @@ -41,5 +43,22 @@ object ToolBarHookPatch : BytecodePatch( ) } } ?: throw ToolBarButtonFingerprint.exception + + insertMethod = ToolBarPatchFingerprint.result?.mutableMethod + ?: throw ToolBarPatchFingerprint.exception + } + + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$UTILS_PATH/ToolBarPatch;" + + private lateinit var insertMethod: MutableMethod + + internal fun injectCall( + descriptor: String + ) { + insertMethod.addInstructions( + 0, + "invoke-static {p0, p1}, $descriptor(Ljava/lang/String;Landroid/view/View;)V" + ) } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/ToolBarPatchFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/fingerprints/ToolBarPatchFingerprint.kt similarity index 88% rename from src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/ToolBarPatchFingerprint.kt rename to src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/fingerprints/ToolBarPatchFingerprint.kt index 2de08d8f2..5d877669f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/ToolBarPatchFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/fingerprints/ToolBarPatchFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.youtube.utils.fingerprints +package app.revanced.patches.youtube.utils.toolbar.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint