refactor(share-button-hook): now downloader package name can be changed in settings

This commit is contained in:
inotia00 2023-04-28 11:25:26 +09:00
parent 40f8f68302
commit c5ffed8818
6 changed files with 36 additions and 31 deletions

View File

@ -1,9 +0,0 @@
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"
}
)

View File

@ -1,4 +1,4 @@
package app.revanced.patches.music.layout.sharebuttonhook.fingerprints package app.revanced.patches.music.misc.sharebuttonhook.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode import org.jf.dexlib2.Opcode

View File

@ -0,0 +1,9 @@
package app.revanced.patches.music.misc.sharebuttonhook.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object FullStackTraceActivityFingerprint : MethodFingerprint(
customFingerprint = {
it.definingClass.endsWith("FullStackTraceActivity;") && it.name == "onCreate"
}
)

View File

@ -1,4 +1,4 @@
package app.revanced.patches.music.layout.sharebuttonhook.fingerprints package app.revanced.patches.music.misc.sharebuttonhook.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode import org.jf.dexlib2.Opcode

View File

@ -1,4 +1,4 @@
package app.revanced.patches.music.layout.sharebuttonhook.fingerprints package app.revanced.patches.music.misc.sharebuttonhook.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode import org.jf.dexlib2.Opcode

View File

@ -1,4 +1,4 @@
package app.revanced.patches.music.layout.sharebuttonhook.patch package app.revanced.patches.music.misc.sharebuttonhook.patch
import app.revanced.extensions.toErrorResult import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Description import app.revanced.patcher.annotation.Description
@ -8,29 +8,27 @@ import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstruction import app.revanced.patcher.extensions.addInstruction
import app.revanced.patcher.extensions.addInstructions import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.extensions.instruction import app.revanced.patcher.extensions.instruction
import app.revanced.patcher.extensions.replaceInstruction
import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.music.layout.sharebuttonhook.fingerprints.* import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch import app.revanced.patches.music.misc.sharebuttonhook.fingerprints.*
import app.revanced.patches.music.misc.videoid.patch.MusicVideoIdPatch import app.revanced.patches.music.misc.videoid.patch.MusicVideoIdPatch
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
import app.revanced.patches.shared.patch.options.PatchOptions import app.revanced.util.enum.CategoryType
import app.revanced.patches.shared.patch.options.PatchOptions.Companion.MusicDownloaderPackageName import app.revanced.util.integrations.Constants.MUSIC_INTEGRATIONS_PATH
import app.revanced.util.integrations.Constants.MUSIC_PATH import app.revanced.util.integrations.Constants.MUSIC_MISC_PATH
@Patch @Patch
@Name("share-button-hook") @Name("share-button-hook")
@Description("Replace share button with external download button.") @Description("Replace share button with external download button or sleep timer dialog.")
@DependsOn( @DependsOn(
[ [
MusicSettingsPatch::class, MusicSettingsPatch::class,
MusicVideoIdPatch::class, MusicVideoIdPatch::class
PatchOptions::class
] ]
) )
@YouTubeMusicCompatibility @YouTubeMusicCompatibility
@ -38,7 +36,7 @@ import app.revanced.util.integrations.Constants.MUSIC_PATH
class ShareButtonHookPatch : BytecodePatch( class ShareButtonHookPatch : BytecodePatch(
listOf( listOf(
ConnectionTrackerFingerprint, ConnectionTrackerFingerprint,
MusicSettingsFingerprint, FullStackTraceActivityFingerprint,
SharePanelFingerprint, SharePanelFingerprint,
ShowToastFingerprint ShowToastFingerprint
) )
@ -50,7 +48,7 @@ class ShareButtonHookPatch : BytecodePatch(
addInstructions( addInstructions(
targetIndex,""" targetIndex,"""
invoke-static {}, $MUSIC_PATH/HookShareButtonPatch;->overrideSharePanel()Z invoke-static {}, $INTEGRATIONS_CLASS_DESCRIPTOR->overrideSharePanel()Z
move-result p1 move-result p1
if-eqz p1, :default if-eqz p1, :default
return-void return-void
@ -61,23 +59,30 @@ class ShareButtonHookPatch : BytecodePatch(
ConnectionTrackerFingerprint.result?.mutableMethod?.addInstruction( ConnectionTrackerFingerprint.result?.mutableMethod?.addInstruction(
0, 0,
"sput-object p1, $MUSIC_PATH/HookShareButtonPatch;->context:Landroid/content/Context;" "sput-object p1, $INTEGRATIONS_CLASS_DESCRIPTOR->context:Landroid/content/Context;"
) ?: return ConnectionTrackerFingerprint.toErrorResult() ) ?: return ConnectionTrackerFingerprint.toErrorResult()
ShowToastFingerprint.result?.mutableMethod?.addInstructions( ShowToastFingerprint.result?.mutableMethod?.addInstructions(
0,""" 0,"""
invoke-static {p0}, $MUSIC_PATH/HookShareButtonPatch;->dismissContext(Landroid/content/Context;)Landroid/content/Context; invoke-static {p0}, $INTEGRATIONS_CLASS_DESCRIPTOR->dismissContext(Landroid/content/Context;)Landroid/content/Context;
move-result-object p0 move-result-object p0
""" """
) ?: return ShowToastFingerprint.toErrorResult() ) ?: return ShowToastFingerprint.toErrorResult()
MusicSettingsFingerprint.result?.mutableMethod?.replaceInstruction( FullStackTraceActivityFingerprint.result?.mutableMethod?.addInstructions(
0, 1,"""
"const-string v0, \"$MusicDownloaderPackageName\"" invoke-static {p0}, $MUSIC_INTEGRATIONS_PATH/settingsmenu/SharedPreferenceChangeListener;->initializeSettings(Landroid/app/Activity;)V
)?: return MusicSettingsFingerprint.toErrorResult() return-void
"""
) ?: return FullStackTraceActivityFingerprint.toErrorResult()
MusicSettingsPatch.addMusicPreference("navigation", "revanced_hook_share_button", "false") MusicSettingsPatch.addMusicPreference(CategoryType.MISC, "revanced_hook_share_button", "false")
MusicSettingsPatch.addMusicPreferenceAlt(CategoryType.MISC, "revanced_hook_type", "false", "revanced_hook_share_button")
MusicSettingsPatch.addMusicPreferenceWithIntent(CategoryType.MISC, "revanced_default_downloader", "revanced_hook_share_button")
return PatchResultSuccess() return PatchResultSuccess()
} }
private companion object {
const val INTEGRATIONS_CLASS_DESCRIPTOR = "$MUSIC_MISC_PATH/HookShareButtonPatch;"
}
} }