From a70aa372a8aab8ce9b5bc4fdd54f7b464b4e853e Mon Sep 17 00:00:00 2001 From: inotia00 Date: Wed, 12 Apr 2023 20:24:11 +0900 Subject: [PATCH] refactor(hide-shorts-navbar): minor improvements --- .../NavigationEndpointFingerprint.kt | 14 +++++++++ .../shortsnavbar/patch/ShortsNavBarPatch.kt | 29 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/navigation/shortsnavbar/fingerprints/NavigationEndpointFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/shortsnavbar/fingerprints/NavigationEndpointFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/shortsnavbar/fingerprints/NavigationEndpointFingerprint.kt new file mode 100644 index 000000000..a81ad3f44 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/shortsnavbar/fingerprints/NavigationEndpointFingerprint.kt @@ -0,0 +1,14 @@ +package app.revanced.patches.youtube.layout.navigation.shortsnavbar.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.Opcode + +object NavigationEndpointFingerprint : MethodFingerprint( + returnType = "V", + opcodes = listOf( + Opcode.RETURN_VOID, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT + ), + strings = listOf("r_pfvc", "navigation_endpoint_interaction_logging_extension") +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/shortsnavbar/patch/ShortsNavBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/shortsnavbar/patch/ShortsNavBarPatch.kt index 9ad5b8c56..0720951fb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/shortsnavbar/patch/ShortsNavBarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/shortsnavbar/patch/ShortsNavBarPatch.kt @@ -7,6 +7,8 @@ import app.revanced.patcher.annotation.Version import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.data.toMethodWalker import app.revanced.patcher.extensions.addInstruction +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.extensions.instruction import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult @@ -22,6 +24,7 @@ import app.revanced.util.integrations.Constants.NAVIGATION import org.jf.dexlib2.dexbacked.reference.DexBackedTypeReference import org.jf.dexlib2.iface.instruction.OneRegisterInstruction import org.jf.dexlib2.iface.instruction.ReferenceInstruction +import org.jf.dexlib2.iface.reference.FieldReference @Patch @Name("hide-shorts-navbar") @@ -31,6 +34,7 @@ import org.jf.dexlib2.iface.instruction.ReferenceInstruction @Version("0.0.1") class ShortsNavBarPatch : BytecodePatch( listOf( + NavigationEndpointFingerprint, PivotBarCreateButtonViewFingerprint, ReelWatchBundleFingerprint, ReelWatchEndpointParentFingerprint @@ -76,6 +80,31 @@ class ShortsNavBarPatch : BytecodePatch( ) ?: return ReelWatchEndpointFingerprint.toErrorResult() } ?: return ReelWatchEndpointParentFingerprint.toErrorResult() + NavigationEndpointFingerprint.result?.let { result -> + val navigationEndpointMethod = result.mutableMethod + + with (navigationEndpointMethod.implementation!!.instructions) { + filter { instruction -> + val fieldReference = + (instruction as? ReferenceInstruction)?.reference as? FieldReference + fieldReference?.let { it.type == "Lcom/google/android/apps/youtube/app/extensions/reel/watch/player/ReelObscuredPlaybackSuspender;" } == true + }.forEach { instruction -> + val insertIndex = indexOf(instruction) + 4 + val targetRegister = + (navigationEndpointMethod.instruction(insertIndex) as OneRegisterInstruction).registerA + + navigationEndpointMethod.addInstructions( + insertIndex, + """ + invoke-static {v$targetRegister}, $NAVIGATION->hideShortsPlayerNavBar(Landroid/view/View;)Landroid/view/View; + move-result-object v$targetRegister + """ + ) + } + } + + } ?: return NavigationEndpointFingerprint.toErrorResult() + /* * Add settings */