diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt index 795a0cd16..faa1d6870 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt @@ -8,7 +8,9 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod +import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.patches.youtube.utils.fingerprints.InitializeButtonsFingerprint +import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.SHARED_PATH import app.revanced.patches.youtube.utils.navigation.fingerprints.NavigationEnumFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsCreateDrawableViewFingerprint @@ -29,6 +31,7 @@ import com.android.tools.smali.dexlib2.util.MethodUtil @Patch( description = "Hooks the active navigation or search bar.", dependencies = [ + LithoFilterPatch::class, PlayerTypeHookPatch::class, SharedResourceIdPatch::class ], @@ -43,11 +46,12 @@ object NavigationBarHookPatch : BytecodePatch( PivotBarConstructorFingerprint ), ) { - internal const val INTEGRATIONS_CLASS_DESCRIPTOR = + private const val INTEGRATIONS_CLASS_DESCRIPTOR = "$SHARED_PATH/NavigationBar;" - private const val INTEGRATIONS_NAVIGATION_BUTTON_DESCRIPTOR = "$SHARED_PATH/NavigationBar\$NavigationButton;" + private const val FILTER_CLASS_DESCRIPTOR = + "$COMPONENTS_PATH/NavigationButtonIndexFilter;" private lateinit var navigationTabCreatedCallback: MutableMethod @@ -101,11 +105,16 @@ object NavigationBarHookPatch : BytecodePatch( val instruction = getInstruction(index) val viewRegister = instruction.registerC val isSelectedRegister = instruction.registerD + val freeRegister = implementation!!.registerCount - parameters.size - 2 addInstruction( index + 1, - "invoke-static { v$viewRegister, v$isSelectedRegister }, " + - "$INTEGRATIONS_CLASS_DESCRIPTOR->navigationTabSelected(Landroid/view/View;Z)V", + "invoke-static { v$viewRegister, v$freeRegister, v$isSelectedRegister }, " + + "$INTEGRATIONS_CLASS_DESCRIPTOR->navigationTabSelected(Landroid/view/View;IZ)V", + ) + addInstruction( + 0, + "move/16 v$freeRegister, p1" ) } } @@ -113,6 +122,8 @@ object NavigationBarHookPatch : BytecodePatch( navigationTabCreatedCallback = context.findClass(INTEGRATIONS_CLASS_DESCRIPTOR)?.mutableClass?.methods?.first { method -> method.name == "navigationTabCreatedCallback" } ?: throw PatchException("Could not find navigationTabCreatedCallback method") + + LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) } val hookNavigationButtonCreated: (String) -> Unit by lazy {