diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/DescriptionComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/DescriptionComponentsPatch.kt index dfa35333d..d34b66427 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/DescriptionComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/DescriptionComponentsPatch.kt @@ -1,19 +1,26 @@ package app.revanced.patches.youtube.player.descriptions import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.youtube.player.descriptions.fingerprints.EngagementPanelSubHeaderFingerprint import app.revanced.patches.youtube.player.descriptions.fingerprints.TextViewComponentFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.recyclerview.BottomSheetRecyclerViewPatch +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.getTargetIndexReversed import app.revanced.util.getTargetIndexWithMethodReferenceName import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow +import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Suppress("unused") object DescriptionComponentsPatch : BaseBytecodePatch( @@ -22,17 +29,22 @@ object DescriptionComponentsPatch : BaseBytecodePatch( dependencies = setOf( BottomSheetRecyclerViewPatch::class, LithoFilterPatch::class, - SettingsPatch::class + PlayerTypeHookPatch::class, + SettingsPatch::class, + SharedResourceIdPatch::class ), compatiblePackages = COMPATIBLE_PACKAGE, - fingerprints = setOf(TextViewComponentFingerprint) + fingerprints = setOf( + EngagementPanelSubHeaderFingerprint, + TextViewComponentFingerprint + ) ) { private const val FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/DescriptionsFilter;" override fun execute(context: BytecodeContext) { - // patch for ‘Expand video description’ and ‘Disable video description interaction’. + // patch for disable video description interaction and expand video description. // since these patches are still A/B tested, they are classified as 'Experimental flags'. if (SettingsPatch.upward1902) { TextViewComponentFingerprint.resultOrThrow().let { @@ -48,6 +60,17 @@ object DescriptionComponentsPatch : BaseBytecodePatch( } } + EngagementPanelSubHeaderFingerprint.resultOrThrow().mutableMethod.apply { + val instructionIndex = getTargetIndexReversed(Opcode.INVOKE_INTERFACE) + 1 + val viewRegister = getInstruction(instructionIndex).registerA + + addInstruction( + instructionIndex + 1, + "invoke-static { v$viewRegister }, " + + "$PLAYER_CLASS_DESCRIPTOR->engagementPanelSubHeaderViewLoaded(Landroid/view/View;)V", + ) + } + BottomSheetRecyclerViewPatch.injectCall("$PLAYER_CLASS_DESCRIPTOR->onVideoDescriptionCreate(Landroid/support/v7/widget/RecyclerView;)V") /** diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/fingerprints/EngagementPanelSubHeaderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/fingerprints/EngagementPanelSubHeaderFingerprint.kt new file mode 100644 index 000000000..dacc0b053 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/fingerprints/EngagementPanelSubHeaderFingerprint.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.youtube.player.descriptions.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.PanelSubHeader +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object EngagementPanelSubHeaderFingerprint : LiteralValueFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, + returnType = "V", + parameters = listOf("Landroid/view/ViewGroup;", "L"), + literalSupplier = { PanelSubHeader } +) \ No newline at end of file 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 5c2a070f1..47d31f4b4 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 @@ -58,6 +58,7 @@ object SharedResourceIdPatch : ResourcePatch() { var InterstitialsContainer = -1L var MenuItemView = -1L var MusicAppDeeplinkButtonView = -1L + var PanelSubHeader = -1L var PosterArtWidthDefault = -1L var QualityAuto = -1L var QuickActionsElementContainer = -1L @@ -133,6 +134,7 @@ object SharedResourceIdPatch : ResourcePatch() { InterstitialsContainer = getId(ID, "interstitials_container") MenuItemView = getId(ID, "menu_item_view") MusicAppDeeplinkButtonView = getId(ID, "music_app_deeplink_button_view") + PanelSubHeader = getId(ID, "panel_subheader") PosterArtWidthDefault = getId(DIMEN, "poster_art_width_default") QualityAuto = getId(STRING, "quality_auto") QuickActionsElementContainer = getId(ID, "quick_actions_element_container")