From e8c0a60f7f20a657a50b96fe587614e9cebe5598 Mon Sep 17 00:00:00 2001 From: inotia00 Date: Mon, 8 May 2023 05:02:54 +0900 Subject: [PATCH] feat(youtube): use better patch descriptions --- .../fingerprints/HideSnackBarFingerprint.kt | 12 ++++ .../snackbar/patch/HideSnackBarPatch.kt | 59 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/general/snackbar/fingerprints/HideSnackBarFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/general/snackbar/patch/HideSnackBarPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/general/snackbar/fingerprints/HideSnackBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/general/snackbar/fingerprints/HideSnackBarFingerprint.kt new file mode 100644 index 000000000..39a552c0d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/general/snackbar/fingerprints/HideSnackBarFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.youtube.layout.general.snackbar.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags + +object HideSnackBarFingerprint : MethodFingerprint( + returnType = "V", + access = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("L", "L"), + customFingerprint = { it.definingClass.endsWith("BottomUiContainer;") } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/general/snackbar/patch/HideSnackBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/general/snackbar/patch/HideSnackBarPatch.kt new file mode 100644 index 000000000..fa0966b34 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/general/snackbar/patch/HideSnackBarPatch.kt @@ -0,0 +1,59 @@ +package app.revanced.patches.youtube.layout.general.snackbar.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.extensions.instruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.shared.annotation.YouTubeCompatibility +import app.revanced.patches.youtube.layout.general.snackbar.fingerprints.HideSnackBarFingerprint +import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch +import app.revanced.util.integrations.Constants.GENERAL + +@Patch +@Name("hide-snack-bar") +@Description("Hides the snack bar action popup.") +@DependsOn([SettingsPatch::class]) +@YouTubeCompatibility +@Version("0.0.1") +class HideSnackBarPatch : BytecodePatch( + listOf( + HideSnackBarFingerprint + ) +) { + override fun execute(context: BytecodeContext): PatchResult { + + HideSnackBarFingerprint.result?.mutableMethod?.let { + it.addInstructions( + 0, """ + invoke-static {}, $GENERAL->hideSnackBar()Z + move-result v0 + if-eqz v0, :default + return-void + """, listOf(ExternalLabel("default", it.instruction(0))) + ) + } ?: return HideSnackBarFingerprint.toErrorResult() + + /* + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE: GENERAL_SETTINGS", + "SETTINGS: HIDE_SNACK_BAR" + ) + ) + + SettingsPatch.updatePatchStatus("hide-snack-bar") + + return PatchResultSuccess() + } +}