diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/fingerprints/NavButtonOnClickFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/fingerprints/NavButtonOnClickFingerprint.kt index 5ad522a8c..eca9aae16 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/fingerprints/NavButtonOnClickFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/fingerprints/NavButtonOnClickFingerprint.kt @@ -2,7 +2,6 @@ package app.revanced.patches.youtube.utils.navbarindex.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import app.revanced.util.bytecode.isNarrowLiteralExists import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode @@ -11,6 +10,10 @@ object NavButtonOnClickFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Landroid/view/View;"), opcodes = listOf( + Opcode.NEW_INSTANCE, + null, + Opcode.INVOKE_DIRECT, + Opcode.INVOKE_VIRTUAL, Opcode.RETURN_VOID, Opcode.IGET_OBJECT, Opcode.CHECK_CAST, @@ -21,6 +24,6 @@ object NavButtonOnClickFingerprint : MethodFingerprint( Opcode.RETURN_VOID ), customFingerprint = { methodDef, _ -> - methodDef.name == "onClick" && methodDef.isNarrowLiteralExists(16843611) + methodDef.name == "onClick" } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/fingerprints/NavButtonOnClickLegacyFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/fingerprints/NavButtonOnClickLegacyFingerprint.kt new file mode 100644 index 000000000..73b258546 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/fingerprints/NavButtonOnClickLegacyFingerprint.kt @@ -0,0 +1,26 @@ +package app.revanced.patches.youtube.utils.navbarindex.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.util.bytecode.isNarrowLiteralExists +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +object NavButtonOnClickLegacyFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Landroid/view/View;"), + opcodes = listOf( + Opcode.RETURN_VOID, + Opcode.IGET_OBJECT, + Opcode.CHECK_CAST, + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.INVOKE_VIRTUAL, // insert index + Opcode.RETURN_VOID + ), + customFingerprint = { methodDef, _ -> + methodDef.name == "onClick" && methodDef.isNarrowLiteralExists(16843611) + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/patch/NavBarIndexHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/patch/NavBarIndexHookPatch.kt index ed8437685..8aa975f5c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/patch/NavBarIndexHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navbarindex/patch/NavBarIndexHookPatch.kt @@ -9,10 +9,7 @@ import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patches.youtube.utils.fingerprints.OnBackPressedFingerprint -import app.revanced.patches.youtube.utils.navbarindex.fingerprints.MobileTopBarButtonOnClickFingerprint -import app.revanced.patches.youtube.utils.navbarindex.fingerprints.NavButtonOnClickFingerprint -import app.revanced.patches.youtube.utils.navbarindex.fingerprints.OnResumeFragmentsFingerprints -import app.revanced.patches.youtube.utils.navbarindex.fingerprints.SettingsActivityOnBackPressedFingerprint +import app.revanced.patches.youtube.utils.navbarindex.fingerprints.* import app.revanced.util.integrations.Constants.UTILS_PATH import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction35c import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -21,6 +18,7 @@ class NavBarIndexHookPatch : BytecodePatch( listOf( MobileTopBarButtonOnClickFingerprint, NavButtonOnClickFingerprint, + NavButtonOnClickLegacyFingerprint, OnBackPressedFingerprint, OnResumeFragmentsFingerprints, SettingsActivityOnBackPressedFingerprint @@ -28,10 +26,14 @@ class NavBarIndexHookPatch : BytecodePatch( ) { override fun execute(context: BytecodeContext) { + val navButtonOnClickFingerprintResult = + NavButtonOnClickFingerprint.result + ?: NavButtonOnClickLegacyFingerprint.result + ?: throw NavButtonOnClickFingerprint.exception /** * Change NavBar Index value according to selected Tab */ - NavButtonOnClickFingerprint.result?.let { + navButtonOnClickFingerprintResult.let { it.mutableMethod.apply { val insertIndex = it.scanResult.patternScanResult!!.endIndex - 1 val targetString = @@ -46,7 +48,7 @@ class NavBarIndexHookPatch : BytecodePatch( "invoke-static {v$indexRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->setCurrentNavBarIndex(I)V" ) } - } ?: throw NavButtonOnClickFingerprint.exception + } /** * Set NavBar index to last index on back press