mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-20 16:27:17 +02:00
add share-button-hook
patch
This commit is contained in:
parent
0cab17189c
commit
4e244edd83
@ -0,0 +1,10 @@
|
||||
package app.revanced.patches.music.layout.sharebuttonhook.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object ConnectionTrackerFingerprint : MethodFingerprint(
|
||||
returnType = "Z",
|
||||
opcodes = listOf(Opcode.THROW),
|
||||
strings = listOf("ConnectionTracker")
|
||||
)
|
@ -0,0 +1,9 @@
|
||||
package app.revanced.patches.music.layout.sharebuttonhook.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
|
||||
object MusicSettingsFingerprint : MethodFingerprint(
|
||||
customFingerprint = {
|
||||
it.definingClass.endsWith("MusicSettings;") && it.name == "getDownloaderPackageName"
|
||||
}
|
||||
)
|
@ -0,0 +1,10 @@
|
||||
package app.revanced.patches.music.layout.sharebuttonhook.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object SharePanelFingerprint : MethodFingerprint(
|
||||
returnType = "V",
|
||||
opcodes = listOf(Opcode.INVOKE_VIRTUAL),
|
||||
strings = listOf("share/get_share_panel")
|
||||
)
|
@ -0,0 +1,10 @@
|
||||
package app.revanced.patches.music.layout.sharebuttonhook.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object ShowToastFingerprint : MethodFingerprint(
|
||||
returnType = "V",
|
||||
parameters = listOf("Landroid/content/Context;","Ljava/lang/CharSequence;","I"),
|
||||
opcodes = listOf(Opcode.IF_EQZ)
|
||||
)
|
@ -0,0 +1,83 @@
|
||||
package app.revanced.patches.music.layout.sharebuttonhook.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.addInstruction
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.instruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
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.music.layout.sharebuttonhook.fingerprints.*
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.videoid.patch.MusicVideoIdPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.patch.options.PatchOptions
|
||||
import app.revanced.patches.shared.patch.options.PatchOptions.Companion.MusicDownloaderPackageName
|
||||
import app.revanced.util.integrations.Constants.MUSIC_PATH
|
||||
|
||||
@Patch
|
||||
@Name("share-button-hook")
|
||||
@Description("Replace share button with external download button.")
|
||||
@DependsOn(
|
||||
[
|
||||
MusicSettingsPatch::class,
|
||||
MusicVideoIdPatch::class,
|
||||
PatchOptions::class
|
||||
]
|
||||
)
|
||||
@YouTubeMusicCompatibility
|
||||
@Version("0.0.1")
|
||||
class ShareButtonHookPatch : BytecodePatch(
|
||||
listOf(
|
||||
ConnectionTrackerFingerprint,
|
||||
MusicSettingsFingerprint,
|
||||
SharePanelFingerprint,
|
||||
ShowToastFingerprint
|
||||
)
|
||||
) {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
SharePanelFingerprint.result?.let {
|
||||
with (it.mutableMethod) {
|
||||
val targetIndex = it.scanResult.patternScanResult!!.startIndex
|
||||
|
||||
addInstructions(
|
||||
targetIndex,"""
|
||||
invoke-static {}, $MUSIC_PATH/HookShareButtonPatch;->overrideSharePanel()Z
|
||||
move-result p1
|
||||
if-eqz p1, :default
|
||||
return-void
|
||||
""", listOf(ExternalLabel("default", instruction(targetIndex)))
|
||||
)
|
||||
}
|
||||
} ?: return SharePanelFingerprint.toErrorResult()
|
||||
|
||||
ConnectionTrackerFingerprint.result?.mutableMethod?.addInstruction(
|
||||
0,
|
||||
"sput-object p1, $MUSIC_PATH/HookShareButtonPatch;->context:Landroid/content/Context;"
|
||||
) ?: return ConnectionTrackerFingerprint.toErrorResult()
|
||||
|
||||
ShowToastFingerprint.result?.mutableMethod?.addInstructions(
|
||||
0,"""
|
||||
invoke-static {p0}, $MUSIC_PATH/HookShareButtonPatch;->dismissContext(Landroid/content/Context;)Landroid/content/Context;
|
||||
move-result-object p0
|
||||
"""
|
||||
) ?: return ShowToastFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsFingerprint.result?.mutableMethod?.replaceInstruction(
|
||||
0,
|
||||
"const-string v0, \"$MusicDownloaderPackageName\""
|
||||
)?: return MusicSettingsFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_hook_share_button", "false")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
@ -60,6 +60,18 @@ class PatchOptions : ResourcePatch {
|
||||
)
|
||||
)
|
||||
|
||||
/**
|
||||
* Downloader Package Name (YouTube Music)
|
||||
*/
|
||||
internal var MusicDownloaderPackageName: String? by option(
|
||||
PatchOption.StringOption(
|
||||
key = "MusicDownloaderPackageName",
|
||||
default = "ussr.razar.youtube_dl",
|
||||
title = "Downloader Package Name for YouTube Music",
|
||||
description = "Downloader package name of the YouTube Music. (default: PowerTube)"
|
||||
)
|
||||
)
|
||||
|
||||
/**
|
||||
* Custom Speed Values
|
||||
*/
|
||||
|
@ -19,6 +19,8 @@ internal object Constants {
|
||||
|
||||
const val MISC_PATH = "$PATCHES_PATH/misc"
|
||||
|
||||
const val MUSIC_PATH = "$PATCHES_PATH/music"
|
||||
|
||||
const val BUTTON_PATH = "$PATCHES_PATH/button"
|
||||
const val VIDEO_PATH = "$PATCHES_PATH/video"
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
<string name="revanced_category_navigation">Navigation</string>
|
||||
<string name="revanced_disable_auto_captions_summary">Disable forced captions from automatically enabling in video player.</string>
|
||||
<string name="revanced_disable_auto_captions_title">Disable auto captions</string>
|
||||
<string name="revanced_downloader_not_installed" formatted="false">%s is not installed. Please install it.</string>
|
||||
<string name="revanced_enable_black_navbar_summary">Sets the navigation bar color to black.</string>
|
||||
<string name="revanced_enable_black_navbar_title">Enable black navbar</string>
|
||||
<string name="revanced_enable_color_match_player_summary">Matches the fullscreen player color with the minimized one.</string>
|
||||
@ -41,4 +42,7 @@
|
||||
<string name="revanced_hide_playlist_card_summary">"Hides the playlist card from homepage.
|
||||
(requires an app restart)"</string>
|
||||
<string name="revanced_hide_playlist_card_title">Hide playlist card</string>
|
||||
<string name="revanced_hook_share_button_summary">"Replace share button with external download button.
|
||||
(Experimental Flags)"</string>
|
||||
<string name="revanced_hook_share_button_title">Hook share button</string>
|
||||
</resources>
|
||||
|
Loading…
x
Reference in New Issue
Block a user