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 cae0789d2..92b600ca5 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 @@ -2,6 +2,7 @@ package app.revanced.patches.youtube.utils.navigation import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstructions import app.revanced.patcher.patch.BytecodePatch @@ -11,11 +12,13 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.utils.fingerprints.InitializeButtonsFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.SHARED_PATH import app.revanced.patches.youtube.utils.mainactivity.MainActivityResolvePatch +import app.revanced.patches.youtube.utils.navigation.fingerprints.MobileTopBarButtonOnClickFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.NavigationEnumFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsCreateDrawableViewFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsCreateResourceViewFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsViewSetSelectedFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarConstructorFingerprint +import app.revanced.patches.youtube.utils.navigation.fingerprints.SettingsActivityOnBackPressedFingerprint import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.util.getReference @@ -38,11 +41,13 @@ import com.android.tools.smali.dexlib2.util.MethodUtil @Suppress("unused") object NavigationBarHookPatch : BytecodePatch( setOf( + MobileTopBarButtonOnClickFingerprint, NavigationEnumFingerprint, PivotBarButtonsCreateDrawableViewFingerprint, PivotBarButtonsCreateResourceViewFingerprint, PivotBarButtonsViewSetSelectedFingerprint, - PivotBarConstructorFingerprint + PivotBarConstructorFingerprint, + SettingsActivityOnBackPressedFingerprint ), ) { private const val INTEGRATIONS_CLASS_DESCRIPTOR = @@ -105,11 +110,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" ) } } @@ -123,6 +133,21 @@ object NavigationBarHookPatch : BytecodePatch( INTEGRATIONS_CLASS_DESCRIPTOR, "onBackPressed" ) + + /** + * Since it is used only after opening the library tab, set index to 3. + */ + arrayOf( + MobileTopBarButtonOnClickFingerprint, + SettingsActivityOnBackPressedFingerprint + ).forEach { fingerprint -> + fingerprint.resultOrThrow().mutableMethod.addInstructions( + 0, """ + const/4 v0, 0x3 + invoke-static {v0}, $INTEGRATIONS_CLASS_DESCRIPTOR->setNavigationTabIndex(I)V + """ + ) + } } val hookNavigationButtonCreated: (String) -> Unit by lazy { diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint.kt new file mode 100644 index 000000000..48215f9c8 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.youtube.utils.navigation.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +object MobileTopBarButtonOnClickFingerprint : MethodFingerprint( + strings = listOf("MenuButtonRendererKey"), + customFingerprint = { methodDef, _ -> methodDef.name == "onClick" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint.kt new file mode 100644 index 000000000..03fe1c87c --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint.kt @@ -0,0 +1,14 @@ +package app.revanced.patches.youtube.utils.navigation.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +object SettingsActivityOnBackPressedFingerprint : MethodFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + returnType = "V", + customFingerprint = { methodDef, _ -> + methodDef.definingClass.endsWith("/SettingsActivity;") + && methodDef.name == "onBackPressed" + } +) \ No newline at end of file