mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-03 16:14:28 +02:00
refactor(music-settings): rebase integrations
This commit is contained in:
parent
d30aa88904
commit
02682b31ba
@ -10,10 +10,11 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.misc.litho.patch.MusicLithoFilterPatch
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.patch.videoads.GeneralVideoAdsPatch
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_ADS_PATH
|
||||
|
||||
@Patch
|
||||
@Name("hide-music-ads")
|
||||
@ -34,11 +35,11 @@ class MusicVideoAdsPatch : BytecodePatch() {
|
||||
|
||||
GeneralVideoAdsPatch.injectMainstreamAds(INTEGRATIONS_CLASS_DESCRIPTOR)
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("ads", "revanced_hide_music_ads", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.ADS, "revanced_hide_music_ads", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
private companion object {
|
||||
const val INTEGRATIONS_CLASS_DESCRIPTOR = "$MUSIC_SETTINGS_PATH->hideMusicAds()Z"
|
||||
const val INTEGRATIONS_CLASS_DESCRIPTOR = "$MUSIC_ADS_PATH/HideMusicAdsPatch;->hideMusicAds()Z"
|
||||
}
|
||||
}
|
||||
|
@ -11,10 +11,11 @@ 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.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.fingerprints.SubtitleTrackFingerprint
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_LAYOUT
|
||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Patch
|
||||
@ -36,14 +37,14 @@ class DisableAutoCaptionsPatch : BytecodePatch(
|
||||
val register = (elementAt(index) as OneRegisterInstruction).registerA
|
||||
it.addInstructions(
|
||||
index, """
|
||||
invoke-static {v$register}, $MUSIC_SETTINGS_PATH->disableAutoCaptions(Z)Z
|
||||
invoke-static {v$register}, $MUSIC_LAYOUT->disableAutoCaptions(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
} ?: return SubtitleTrackFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("design", "revanced_disable_auto_captions", "false")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_disable_auto_captions", "false")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -15,9 +15,10 @@ import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.music.layout.blacknavbar.fingerprints.TabLayoutFingerprint
|
||||
import app.revanced.patches.music.misc.resourceid.patch.SharedResourceIdPatch
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_LAYOUT
|
||||
import org.jf.dexlib2.iface.instruction.formats.Instruction11x
|
||||
import org.jf.dexlib2.iface.instruction.formats.Instruction31i
|
||||
|
||||
@ -50,7 +51,7 @@ class BlackNavbarPatch : BytecodePatch(
|
||||
|
||||
addInstructions(
|
||||
insertIndex, """
|
||||
invoke-static {}, $MUSIC_SETTINGS_PATH->enableBlackNavbar()Z
|
||||
invoke-static {}, $MUSIC_LAYOUT->enableBlackNavbar()Z
|
||||
move-result v$dummyRegister
|
||||
if-eqz v$dummyRegister, :default
|
||||
const/high16 v$targetRegister, -0x1000000
|
||||
@ -59,7 +60,7 @@ class BlackNavbarPatch : BytecodePatch(
|
||||
}
|
||||
} ?: return TabLayoutFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("design", "revanced_enable_black_navbar", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_black_navbar", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -14,10 +14,10 @@ import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.layout.castbutton.fingerprints.HideCastButtonFingerprint
|
||||
import app.revanced.patches.music.layout.castbutton.fingerprints.HideCastButtonParentFingerprint
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_LAYOUT
|
||||
@Patch
|
||||
@Name("hide-music-cast-button")
|
||||
@Description("Hides the cast button in the video player and header.")
|
||||
@ -34,13 +34,13 @@ class HideCastButtonPatch : BytecodePatch(
|
||||
HideCastButtonParentFingerprint.result?.let { parentResult ->
|
||||
HideCastButtonFingerprint.also { it.resolve(context, parentResult.classDef) }.result?.mutableMethod?.addInstructions(
|
||||
0, """
|
||||
invoke-static {p1}, $MUSIC_SETTINGS_PATH->hideCastButton(I)I
|
||||
invoke-static {p1}, $MUSIC_LAYOUT->hideCastButton(I)I
|
||||
move-result p1
|
||||
"""
|
||||
) ?: return HideCastButtonFingerprint.toErrorResult()
|
||||
} ?: return HideCastButtonParentFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_hide_cast_button", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_hide_cast_button", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -15,9 +15,10 @@ import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.music.layout.compactdialog.fingerprints.DialogSolidFingerprint
|
||||
import app.revanced.patches.music.misc.resourceid.patch.SharedResourceIdPatch
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_LAYOUT
|
||||
|
||||
@Patch
|
||||
@Name("enable-compact-dialog")
|
||||
@ -44,14 +45,14 @@ class CompactDialogPatch : BytecodePatch(
|
||||
) {
|
||||
addInstructions(
|
||||
2, """
|
||||
invoke-static {p0}, $MUSIC_SETTINGS_PATH->enableCompactDialog(I)I
|
||||
invoke-static {p0}, $MUSIC_LAYOUT->enableCompactDialog(I)I
|
||||
move-result p0
|
||||
"""
|
||||
)
|
||||
}
|
||||
} ?: return DialogSolidFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_enable_compact_dialog", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_compact_dialog", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -16,9 +16,10 @@ import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.music.layout.floatingbutton.fingerprints.*
|
||||
import app.revanced.patches.music.misc.resourceid.patch.SharedResourceIdPatch
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_LAYOUT
|
||||
|
||||
@Patch
|
||||
@Name("hide-new-playlist")
|
||||
@ -42,7 +43,7 @@ class NewPlaylistButtonPatch : BytecodePatch(
|
||||
FloatingButtonFingerprint.also { it.resolve(context, parentResult.classDef) }.result?.mutableMethod?.let {
|
||||
it.addInstructions(
|
||||
1, """
|
||||
invoke-static {}, $MUSIC_SETTINGS_PATH->hideNewPlaylistButton()Z
|
||||
invoke-static {}, $MUSIC_LAYOUT->hideNewPlaylistButton()Z
|
||||
move-result v0
|
||||
if-eqz v0, :show
|
||||
return-void
|
||||
@ -51,7 +52,7 @@ class NewPlaylistButtonPatch : BytecodePatch(
|
||||
} ?: return FloatingButtonFingerprint.toErrorResult()
|
||||
} ?: return FloatingButtonParentFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_hide_new_playlist_button", "false")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_hide_new_playlist_button", "false")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -12,9 +12,10 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.layout.minimizedplayer.fingerprints.MinimizedPlayerFingerprint
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_LAYOUT
|
||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Patch
|
||||
@ -37,14 +38,14 @@ class MinimizedPlayerPatch : BytecodePatch(
|
||||
|
||||
addInstructions(
|
||||
index, """
|
||||
invoke-static {v$register}, $MUSIC_SETTINGS_PATH->enableForceMinimizedPlayer(Z)Z
|
||||
invoke-static {v$register}, $MUSIC_LAYOUT->enableForceMinimizedPlayer(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
} ?: return MinimizedPlayerFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_force_minimized_player", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_force_minimized_player", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -15,10 +15,11 @@ 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.miniplayercolor.fingerprints.MiniplayerColorFingerprint
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.fingerprints.MiniplayerColorParentFingerprint
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_LAYOUT
|
||||
import org.jf.dexlib2.iface.instruction.Instruction
|
||||
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import org.jf.dexlib2.iface.reference.FieldReference
|
||||
@ -68,7 +69,7 @@ class MiniplayerColorPatch : BytecodePatch(
|
||||
|
||||
addInstructions(
|
||||
insertIndex, """
|
||||
invoke-static {}, $MUSIC_SETTINGS_PATH->enableColorMatchPlayer()Z
|
||||
invoke-static {}, $MUSIC_LAYOUT->enableColorMatchPlayer()Z
|
||||
move-result v2
|
||||
if-eqz v2, :off
|
||||
iget v0, p0, ${type}->${firstReference.name}:${firstReference.type}
|
||||
@ -92,7 +93,7 @@ class MiniplayerColorPatch : BytecodePatch(
|
||||
} ?: return MiniplayerColorFingerprint.toErrorResult()
|
||||
} ?: return MiniplayerColorParentFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("design", "revanced_enable_color_match_player", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_color_match_player", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -10,8 +10,9 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.misc.litho.patch.MusicLithoFilterPatch
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.enum.CategoryType
|
||||
|
||||
@Patch
|
||||
@Name("hide-playlist-card")
|
||||
@ -27,7 +28,7 @@ import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
class HidePlaylistCardPatch : BytecodePatch() {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_hide_playlist_card", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_hide_playlist_card", "false")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -13,10 +13,11 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.layout.zenmode.fingerprints.ZenModeFingerprint
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.fingerprints.MiniplayerColorParentFingerprint
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_LAYOUT
|
||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import org.jf.dexlib2.iface.reference.FieldReference
|
||||
@ -51,7 +52,7 @@ class ZenModePatch : BytecodePatch(
|
||||
|
||||
addInstructions(
|
||||
insertIndex, """
|
||||
invoke-static {}, $MUSIC_SETTINGS_PATH->enableZenMode()Z
|
||||
invoke-static {}, $MUSIC_LAYOUT->enableZenMode()Z
|
||||
move-result v$dummyRegister
|
||||
if-eqz v$dummyRegister, :off
|
||||
const v$dummyRegister, -0xfcfcfd
|
||||
@ -67,7 +68,7 @@ class ZenModePatch : BytecodePatch(
|
||||
} ?: return ZenModeFingerprint.toErrorResult()
|
||||
} ?: return MiniplayerColorParentFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("design", "revanced_enable_zen_mode", "false")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_zen_mode", "false")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.audio.codecs.fingerprints
|
||||
package app.revanced.patches.music.misc.codecs.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.audio.codecs.fingerprints
|
||||
package app.revanced.patches.music.misc.codecs.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.audio.codecs.fingerprints
|
||||
package app.revanced.patches.music.misc.codecs.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.audio.codecs.patch
|
||||
package app.revanced.patches.music.misc.codecs.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Description
|
||||
@ -15,10 +15,11 @@ 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.audio.codecs.fingerprints.*
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.codecs.fingerprints.*
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_MISC_PATH
|
||||
import org.jf.dexlib2.iface.Method
|
||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@ -53,7 +54,7 @@ class CodecsUnlockPatch : BytecodePatch(
|
||||
val register = (instruction(endIndex) as OneRegisterInstruction).registerA
|
||||
addInstructions(
|
||||
endIndex + 1, """
|
||||
invoke-static {}, $MUSIC_SETTINGS_PATH->enableOpusCodec()Z
|
||||
invoke-static {}, $MUSIC_MISC_PATH/OpusCodecPatch;->enableOpusCodec()Z
|
||||
move-result v7
|
||||
if-eqz v7, :mp4a
|
||||
invoke-static {}, ${allCodecsMethod.definingClass}->${allCodecsMethod.name}()Ljava/util/Set;
|
||||
@ -63,7 +64,7 @@ class CodecsUnlockPatch : BytecodePatch(
|
||||
}
|
||||
} ?: return CodecsLockFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_opus_codec", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.MISC, "revanced_enable_opus_codec", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.audio.exclusiveaudio.fingerprints
|
||||
package app.revanced.patches.music.misc.exclusiveaudio.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.audio.exclusiveaudio.patch
|
||||
package app.revanced.patches.music.misc.exclusiveaudio.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Description
|
||||
@ -11,7 +11,7 @@ import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.audio.exclusiveaudio.fingerprints.AudioOnlyEnablerFingerprint
|
||||
import app.revanced.patches.music.misc.exclusiveaudio.fingerprints.AudioOnlyEnablerFingerprint
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
|
||||
@Patch
|
@ -5,10 +5,12 @@ import app.revanced.patcher.patch.annotations.RequiresIntegrations
|
||||
import app.revanced.patches.music.misc.integrations.fingerprints.InitFingerprint
|
||||
import app.revanced.patches.shared.patch.integrations.AbstractIntegrationsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_INTEGRATIONS_PATH
|
||||
|
||||
@Name("music-integrations")
|
||||
@YouTubeMusicCompatibility
|
||||
@RequiresIntegrations
|
||||
class MusicIntegrationsPatch : AbstractIntegrationsPatch(
|
||||
"$MUSIC_INTEGRATIONS_PATH/utils/ReVancedUtils;",
|
||||
listOf(InitFingerprint),
|
||||
)
|
@ -11,7 +11,7 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.fingerprints.LithoFingerprint
|
||||
import app.revanced.util.integrations.Constants.ADS_PATH
|
||||
import app.revanced.util.integrations.Constants.MUSIC_ADS_PATH
|
||||
import org.jf.dexlib2.Opcode
|
||||
import org.jf.dexlib2.builder.instruction.BuilderInstruction21c
|
||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
@ -60,7 +60,7 @@ class MusicLithoFilterPatch : BytecodePatch(
|
||||
method.addInstructions(
|
||||
insertIndex, // right after setting the component.pathBuilder field,
|
||||
"""
|
||||
invoke-static {v$stringBuilderRegister, v$identifierRegister}, $ADS_PATH/MusicLithoFilterPatch;->filter(Ljava/lang/StringBuilder;Ljava/lang/String;)Z
|
||||
invoke-static {v$stringBuilderRegister, v$identifierRegister}, $MUSIC_ADS_PATH/MusicLithoFilterPatch;->filter(Ljava/lang/StringBuilder;Ljava/lang/String;)Z
|
||||
move-result v$bufferRegister
|
||||
if-eqz v$bufferRegister, :not_an_ad
|
||||
move-object/from16 v$identifierRegister, p1
|
||||
|
@ -9,7 +9,6 @@ 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.patches.music.misc.clientspoof.patch.ClientSpoofMusicPatch
|
||||
import app.revanced.patches.music.misc.microg.bytecode.fingerprints.*
|
||||
import app.revanced.patches.music.misc.microg.resource.patch.MusicMicroGResourcePatch
|
||||
import app.revanced.patches.music.misc.microg.shared.Constants.MUSIC_PACKAGE_NAME
|
||||
@ -21,7 +20,6 @@ import app.revanced.util.microg.MicroGBytecodeHelper
|
||||
@Patch
|
||||
@DependsOn(
|
||||
[
|
||||
ClientSpoofMusicPatch::class,
|
||||
MusicMicroGResourcePatch::class,
|
||||
PatchOptions::class
|
||||
]
|
||||
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.minimizedplayback.fingerprints
|
||||
package app.revanced.patches.music.misc.minimizedplayback.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.minimizedplayback.patch
|
||||
package app.revanced.patches.music.misc.minimizedplayback.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Description
|
||||
@ -10,7 +10,7 @@ import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.layout.minimizedplayback.fingerprints.MinimizedPlaybackManagerFingerprint
|
||||
import app.revanced.patches.music.misc.minimizedplayback.fingerprints.MinimizedPlaybackManagerFingerprint
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
|
||||
@Patch
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.premium.fingerprints
|
||||
package app.revanced.patches.music.misc.premium.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.premium.patch
|
||||
package app.revanced.patches.music.misc.premium.patch
|
||||
|
||||
import app.revanced.extensions.findMutableMethodOf
|
||||
import app.revanced.extensions.toErrorResult
|
||||
@ -14,7 +14,7 @@ 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.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.music.layout.premium.fingerprints.HideGetPremiumFingerprint
|
||||
import app.revanced.patches.music.misc.premium.fingerprints.HideGetPremiumFingerprint
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.patch.mapping.ResourceMappingPatch
|
||||
import org.jf.dexlib2.Opcode
|
@ -0,0 +1,23 @@
|
||||
package app.revanced.patches.music.misc.settings.bytecode.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object PreferenceFingerprint : MethodFingerprint(
|
||||
returnType = "V",
|
||||
parameters = listOf("Z"),
|
||||
opcodes = listOf(
|
||||
Opcode.RETURN_VOID,
|
||||
Opcode.XOR_INT_LIT8,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT,
|
||||
Opcode.IF_NE,
|
||||
Opcode.RETURN_VOID,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_INTERFACE
|
||||
),
|
||||
customFingerprint = { it.definingClass == "Landroidx/preference/Preference;" }
|
||||
)
|
@ -0,0 +1,16 @@
|
||||
package app.revanced.patches.music.misc.settings.bytecode.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object SettingsHeadersFragmentFingerprint : MethodFingerprint(
|
||||
returnType = "V",
|
||||
parameters = listOf("L"),
|
||||
opcodes = listOf(
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT_OBJECT
|
||||
|
||||
),
|
||||
customFingerprint = { it.definingClass.endsWith("/SettingsHeadersFragment;") && it.name == "onCreate" }
|
||||
)
|
@ -0,0 +1,61 @@
|
||||
package app.revanced.patches.music.misc.settings.bytecode.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
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.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.patches.music.misc.integrations.patch.MusicIntegrationsPatch
|
||||
import app.revanced.patches.music.misc.settings.bytecode.fingerprints.*
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_INTEGRATIONS_PATH
|
||||
import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Name("music-settings-bytecode-patch")
|
||||
@DependsOn([MusicIntegrationsPatch::class])
|
||||
@YouTubeMusicCompatibility
|
||||
@Version("0.0.1")
|
||||
class MusicSettingsBytecodePatch : BytecodePatch(
|
||||
listOf(
|
||||
PreferenceFingerprint,
|
||||
SettingsHeadersFragmentFingerprint
|
||||
)
|
||||
) {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
|
||||
SettingsHeadersFragmentFingerprint.result?.let {
|
||||
with(it.mutableMethod) {
|
||||
val targetIndex = it.scanResult.patternScanResult!!.endIndex
|
||||
val targetRegister = (instruction(targetIndex) as OneRegisterInstruction).registerA
|
||||
addInstruction(
|
||||
targetIndex + 1,
|
||||
"invoke-static {v$targetRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->setActivity(Ljava/lang/Object;)V"
|
||||
)
|
||||
}
|
||||
} ?: return SettingsHeadersFragmentFingerprint.toErrorResult()
|
||||
|
||||
PreferenceFingerprint.result?.let {
|
||||
with(it.mutableMethod) {
|
||||
val targetIndex = it.scanResult.patternScanResult!!.endIndex
|
||||
val keyRegister = (instruction(targetIndex) as FiveRegisterInstruction).registerD
|
||||
val valueRegister = (instruction(targetIndex) as FiveRegisterInstruction).registerE
|
||||
addInstruction(
|
||||
targetIndex,
|
||||
"invoke-static {v$keyRegister, v$valueRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->onPreferenceChanged(Ljava/lang/String;Z)V"
|
||||
)
|
||||
}
|
||||
} ?: return PreferenceFingerprint.toErrorResult()
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
companion object {
|
||||
const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||
"$MUSIC_INTEGRATIONS_PATH/settingsmenu/SharedPreferenceChangeListener;"
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.misc.settings.patch
|
||||
package app.revanced.patches.music.misc.settings.resource.patch
|
||||
|
||||
import app.revanced.patcher.annotation.Description
|
||||
import app.revanced.patcher.annotation.Name
|
||||
@ -7,18 +7,22 @@ import app.revanced.patcher.data.ResourceContext
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patches.music.misc.integrations.patch.MusicIntegrationsPatch
|
||||
import app.revanced.patches.music.misc.settings.bytecode.patch.MusicSettingsBytecodePatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.patch.settings.AbstractSettingsResourcePatch
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.enum.CategoryType.*
|
||||
import app.revanced.util.resources.MusicResourceHelper.addMusicPreference
|
||||
import app.revanced.util.resources.MusicResourceHelper.addMusicPreferenceAlt
|
||||
import app.revanced.util.resources.MusicResourceHelper.addMusicPreferenceCategory
|
||||
import app.revanced.util.resources.MusicResourceHelper.addMusicPreferenceWithIntent
|
||||
import app.revanced.util.resources.MusicResourceHelper.addReVancedMusicPreference
|
||||
import app.revanced.util.resources.MusicResourceHelper.sortMusicPreferenceCategory
|
||||
import org.w3c.dom.Element
|
||||
|
||||
@Name("music-settings")
|
||||
@Description("Adds settings for ReVanced to YouTube Music.")
|
||||
@DependsOn([MusicIntegrationsPatch::class])
|
||||
@DependsOn([MusicSettingsBytecodePatch::class])
|
||||
@YouTubeMusicCompatibility
|
||||
@Version("0.0.1")
|
||||
class MusicSettingsPatch : AbstractSettingsResourcePatch(
|
||||
@ -56,13 +60,39 @@ class MusicSettingsPatch : AbstractSettingsResourcePatch(
|
||||
private lateinit var contexts: ResourceContext
|
||||
|
||||
internal fun addMusicPreference(
|
||||
category: String,
|
||||
category: CategoryType,
|
||||
key: String,
|
||||
defaultValue: String
|
||||
) {
|
||||
contexts.addMusicPreferenceCategory(category)
|
||||
contexts.sortMusicPreferenceCategory()
|
||||
contexts.addMusicPreference(category, key, defaultValue)
|
||||
val categoryValue = category.value
|
||||
contexts.addMusicPreferenceCategory(categoryValue)
|
||||
contexts.addMusicPreference(categoryValue, key, defaultValue)
|
||||
contexts.sortMusicPreferenceCategory(categoryValue)
|
||||
}
|
||||
|
||||
internal fun addMusicPreferenceAlt(
|
||||
category: CategoryType,
|
||||
key: String,
|
||||
defaultValue: String,
|
||||
dependencyKey: String
|
||||
|
||||
) {
|
||||
val categoryValue = category.value
|
||||
contexts.addMusicPreferenceCategory(categoryValue)
|
||||
contexts.addMusicPreferenceAlt(categoryValue, key, defaultValue, dependencyKey)
|
||||
contexts.sortMusicPreferenceCategory(categoryValue)
|
||||
}
|
||||
|
||||
internal fun addMusicPreferenceWithIntent(
|
||||
category: CategoryType,
|
||||
key: String,
|
||||
dependencyKey: String
|
||||
|
||||
) {
|
||||
val categoryValue = category.value
|
||||
contexts.addMusicPreferenceCategory(categoryValue)
|
||||
contexts.addMusicPreferenceWithIntent(categoryValue, key, dependencyKey)
|
||||
contexts.sortMusicPreferenceCategory(categoryValue)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.shuffle.fingerprints
|
||||
package app.revanced.patches.music.misc.shuffle.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.shuffle.fingerprints
|
||||
package app.revanced.patches.music.misc.shuffle.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.shuffle.fingerprints
|
||||
package app.revanced.patches.music.misc.shuffle.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.shuffle.patch
|
||||
package app.revanced.patches.music.misc.shuffle.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.extensions.transformFields
|
||||
@ -16,13 +16,12 @@ import app.revanced.patcher.util.TypeUtil.traverseClassHierarchy
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patcher.util.smali.toInstructions
|
||||
import app.revanced.patches.music.layout.shuffle.fingerprints.MusicPlaybackControlsFingerprint
|
||||
import app.revanced.patches.music.layout.shuffle.fingerprints.ShuffleClassFingerprint
|
||||
import app.revanced.patches.music.layout.shuffle.fingerprints.ShuffleClassReferenceFingerprint
|
||||
import app.revanced.patches.music.misc.resourceid.patch.SharedResourceIdPatch
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.shuffle.fingerprints.*
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_MISC_PATH
|
||||
import org.jf.dexlib2.AccessFlags
|
||||
import org.jf.dexlib2.dexbacked.reference.DexBackedMethodReference
|
||||
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
|
||||
@ -132,7 +131,7 @@ class EnforceShufflePatch : BytecodePatch(
|
||||
null,
|
||||
ImmutableMethodImplementation(
|
||||
5, """
|
||||
invoke-static {}, $MUSIC_SETTINGS_PATH->enableForceShuffle()Z
|
||||
invoke-static {}, $MUSIC_MISC_PATH/ForceShufflePatch;->enableForceShuffle()Z
|
||||
move-result v0
|
||||
if-eqz v0, :cond_0
|
||||
new-instance v0, $SHUFFLE_CLASS
|
||||
@ -158,7 +157,7 @@ class EnforceShufflePatch : BytecodePatch(
|
||||
)
|
||||
} ?: return MusicPlaybackControlsFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_force_shuffle", "true")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.MISC, "revanced_enable_force_shuffle", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.tastebuilder.fingerprints
|
||||
package app.revanced.patches.music.misc.tastebuilder.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.music.layout.tastebuilder.patch
|
||||
package app.revanced.patches.music.misc.tastebuilder.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Description
|
||||
@ -10,7 +10,7 @@ import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.layout.tastebuilder.fingerprints.TasteBuilderConstructorFingerprint
|
||||
import app.revanced.patches.music.misc.tastebuilder.fingerprints.TasteBuilderConstructorFingerprint
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import org.jf.dexlib2.iface.instruction.formats.Instruction22c
|
||||
|
||||
@ -33,7 +33,7 @@ class RemoveTasteBuilderPatch : BytecodePatch(
|
||||
addInstructions(
|
||||
insertIndex, """
|
||||
const/16 v1, 0x8
|
||||
invoke-virtual {v${register}, v1}, Landroid/view/View;->setVisibility(I)V
|
||||
invoke-virtual {v$register, v1}, Landroid/view/View;->setVisibility(I)V
|
||||
"""
|
||||
)
|
||||
}
|
@ -9,7 +9,7 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.ResourcePatch
|
||||
import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.resources.ResourceHelper.addTranslations
|
||||
|
||||
|
@ -9,10 +9,11 @@ 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.patches.music.misc.settings.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.patches.shared.patch.versionspoof.GeneralVersionSpoofPatch
|
||||
import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
import app.revanced.util.enum.CategoryType
|
||||
import app.revanced.util.integrations.Constants.MUSIC_MISC_PATH
|
||||
|
||||
@Patch
|
||||
@Name("spoof-version")
|
||||
@ -28,9 +29,9 @@ import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH
|
||||
class SpoofAppVersionPatch : BytecodePatch() {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
|
||||
GeneralVersionSpoofPatch.injectSpoof("$MUSIC_SETTINGS_PATH->spoofVersion(Ljava/lang/String;)Ljava/lang/String;")
|
||||
GeneralVersionSpoofPatch.injectSpoof("$MUSIC_MISC_PATH/SpoofAppVersionPatch;->getVersionOverride(Ljava/lang/String;)Ljava/lang/String;")
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_enable_spoof_version", "false")
|
||||
MusicSettingsPatch.addMusicPreference(CategoryType.MISC, "revanced_spoof_app_version", "false")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.music.misc.videoid.fingerprint.MusicVideoIdFingerprint
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.integrations.Constants.VIDEO_PATH
|
||||
import app.revanced.util.integrations.Constants.MUSIC_UTILS_PATH
|
||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Name("music-video-id-hook")
|
||||
@ -42,7 +42,7 @@ class MusicVideoIdPatch : BytecodePatch(
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val INTEGRATIONS_CLASS_DESCRIPTOR = "$VIDEO_PATH/VideoInformation;"
|
||||
const val INTEGRATIONS_CLASS_DESCRIPTOR = "$MUSIC_UTILS_PATH/VideoInformation;"
|
||||
|
||||
private var offset = 0
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package app.revanced.patches.shared.patch.integrations
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Description
|
||||
import app.revanced.patcher.annotation.Version
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
@ -9,13 +10,13 @@ import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import app.revanced.patcher.patch.PatchResultError
|
||||
import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.util.integrations.Constants.INTEGRATIONS_PATH
|
||||
import app.revanced.patches.shared.patch.integrations.AbstractIntegrationsPatch.IntegrationsFingerprint.RegisterResolver
|
||||
import org.jf.dexlib2.iface.Method
|
||||
|
||||
@Description("Applies mandatory patches to implement the ReVanced integrations into the application.")
|
||||
@Version("0.0.1")
|
||||
abstract class AbstractIntegrationsPatch(
|
||||
private val integrationsDescriptor: String,
|
||||
private val hooks: Iterable<IntegrationsFingerprint>
|
||||
) : BytecodePatch(hooks) {
|
||||
/**
|
||||
@ -29,14 +30,15 @@ abstract class AbstractIntegrationsPatch(
|
||||
customFingerprint: ((methodDef: Method) -> Boolean)? = null,
|
||||
private val contextRegisterResolver: (Method) -> Int = object : RegisterResolver {}
|
||||
) : MethodFingerprint(strings = strings, customFingerprint = customFingerprint) {
|
||||
fun invoke(): PatchResult {
|
||||
|
||||
fun invoke(integrationsDescriptor: String): PatchResult {
|
||||
result?.mutableMethod?.let { method ->
|
||||
val contextRegister = contextRegisterResolver(method)
|
||||
|
||||
method.addInstruction(
|
||||
0,
|
||||
"sput-object v$contextRegister, " +
|
||||
"$INTEGRATIONS_CLASS_DESCRIPTOR->context:Landroid/content/Context;"
|
||||
"$integrationsDescriptor->context:Landroid/content/Context;"
|
||||
)
|
||||
} ?: return toErrorResult()
|
||||
return PatchResultSuccess()
|
||||
@ -48,9 +50,9 @@ abstract class AbstractIntegrationsPatch(
|
||||
}
|
||||
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
if (context.findClass(INTEGRATIONS_CLASS_DESCRIPTOR) == null) return MISSING_INTEGRATIONS
|
||||
if (context.findClass(integrationsDescriptor) == null) return MISSING_INTEGRATIONS
|
||||
|
||||
for (hook in hooks) hook.invoke().let {
|
||||
for (hook in hooks) hook.invoke(integrationsDescriptor).let {
|
||||
if (it is PatchResultError) return it
|
||||
}
|
||||
|
||||
@ -58,8 +60,6 @@ abstract class AbstractIntegrationsPatch(
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||
"$INTEGRATIONS_PATH/utils/ReVancedUtils;"
|
||||
val MISSING_INTEGRATIONS = PatchResultError(
|
||||
"Integrations have not been merged yet. " +
|
||||
"This patch can not succeed without merging the integrations."
|
||||
|
@ -5,10 +5,12 @@ import app.revanced.patcher.patch.annotations.RequiresIntegrations
|
||||
import app.revanced.patches.shared.annotation.YouTubeCompatibility
|
||||
import app.revanced.patches.shared.patch.integrations.AbstractIntegrationsPatch
|
||||
import app.revanced.patches.youtube.misc.integrations.fingerprints.*
|
||||
import app.revanced.util.integrations.Constants.INTEGRATIONS_PATH
|
||||
|
||||
@Name("integrations")
|
||||
@YouTubeCompatibility
|
||||
@RequiresIntegrations
|
||||
class IntegrationsPatch : AbstractIntegrationsPatch(
|
||||
"$INTEGRATIONS_PATH/utils/ReVancedUtils;",
|
||||
listOf(InitFingerprint, StandalonePlayerFingerprint, ServiceFingerprint),
|
||||
)
|
7
src/main/kotlin/app/revanced/util/enum/CategoryType.kt
Normal file
7
src/main/kotlin/app/revanced/util/enum/CategoryType.kt
Normal file
@ -0,0 +1,7 @@
|
||||
package app.revanced.util.enum
|
||||
|
||||
internal enum class CategoryType(val value: String) {
|
||||
ADS("ads"),
|
||||
LAYOUT("layout"),
|
||||
MISC("misc")
|
||||
}
|
@ -5,9 +5,7 @@ internal object Constants {
|
||||
const val PATCHES_PATH = "$INTEGRATIONS_PATH/patches"
|
||||
|
||||
const val ADS_PATH = "$PATCHES_PATH/ads"
|
||||
|
||||
const val SWIPE_PATH = "$PATCHES_PATH/swipe"
|
||||
|
||||
const val BOTTOM_PLAYER = "$PATCHES_PATH/layout/BottomPlayerPatch;"
|
||||
const val FLYOUT_PANEL = "$PATCHES_PATH/layout/FlyoutPanelPatch;"
|
||||
const val FULLSCREEN = "$PATCHES_PATH/layout/FullscreenPatch;"
|
||||
@ -16,15 +14,16 @@ internal object Constants {
|
||||
const val PLAYER = "$PATCHES_PATH/layout/PlayerPatch;"
|
||||
const val SEEKBAR = "$PATCHES_PATH/layout/SeekBarPatch;"
|
||||
const val SHORTS = "$PATCHES_PATH/layout/ShortsPatch;"
|
||||
|
||||
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"
|
||||
|
||||
const val UTILS_PATH = "$PATCHES_PATH/utils"
|
||||
|
||||
const val MUSIC_SETTINGS_PATH = "$INTEGRATIONS_PATH/settings/MusicSettings;"
|
||||
const val MUSIC_INTEGRATIONS_PATH = "Lapp/revanced/music"
|
||||
private const val MUSIC_PATCHES_PATH = "$MUSIC_INTEGRATIONS_PATH/patches"
|
||||
|
||||
const val MUSIC_ADS_PATH = "$MUSIC_PATCHES_PATH/ads"
|
||||
const val MUSIC_LAYOUT = "$MUSIC_PATCHES_PATH/layout/LayoutPatch;"
|
||||
const val MUSIC_MISC_PATH = "$MUSIC_PATCHES_PATH/misc"
|
||||
const val MUSIC_UTILS_PATH = "$MUSIC_PATCHES_PATH/utils"
|
||||
}
|
@ -34,8 +34,17 @@ internal object MusicResourceHelper {
|
||||
|
||||
private const val YOUTUBE_MUSIC_PREFERENCE_TAG_NAME = "com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference"
|
||||
|
||||
private const val YOUTUBE_MUSIC_PREFERENCE_TARGET_CLASS = "com.google.android.libraries.strictmode.penalties.notification.FullStackTraceActivity"
|
||||
|
||||
private var currentMusicPreferenceCategory = emptyArray<String>()
|
||||
|
||||
private var targetPackage = "com.google.android.apps.youtube.music"
|
||||
|
||||
internal fun ResourceContext.setMicroG (newPackage: String) {
|
||||
targetPackage = newPackage
|
||||
replacePackageName()
|
||||
}
|
||||
|
||||
private fun setMusicPreferenceCategory (newCategory: String) {
|
||||
currentMusicPreferenceCategory += listOf(newCategory)
|
||||
}
|
||||
@ -59,12 +68,13 @@ internal object MusicResourceHelper {
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.sortMusicPreferenceCategory() {
|
||||
internal fun ResourceContext.sortMusicPreferenceCategory(
|
||||
category: String
|
||||
) {
|
||||
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
|
||||
editor.file.doRecursively loop@{
|
||||
if (it !is Element) return@loop
|
||||
|
||||
currentMusicPreferenceCategory.forEach { category ->
|
||||
it.getAttributeNode("android:key")?.let { attribute ->
|
||||
if (attribute.textContent == "revanced_settings_$category") {
|
||||
it.cloneNodes(it.parentNode)
|
||||
@ -72,7 +82,13 @@ internal object MusicResourceHelper {
|
||||
}
|
||||
}
|
||||
}
|
||||
replacePackageName()
|
||||
}
|
||||
|
||||
private fun ResourceContext.replacePackageName(){
|
||||
this[YOUTUBE_MUSIC_SETTINGS_PATH].writeText(
|
||||
this[YOUTUBE_MUSIC_SETTINGS_PATH].readText().replace("\"com.google.android.apps.youtube.music", "\"" + targetPackage)
|
||||
)
|
||||
}
|
||||
|
||||
internal fun ResourceContext.addMusicPreference(
|
||||
@ -95,6 +111,54 @@ internal object MusicResourceHelper {
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.addMusicPreferenceAlt(
|
||||
category: String,
|
||||
key: String,
|
||||
defaultValue: String,
|
||||
dependencyKey: String
|
||||
) {
|
||||
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
|
||||
val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_CATEGORY_TAG_NAME)
|
||||
List(tags.length) { tags.item(it) as Element }
|
||||
.filter { it.getAttribute("android:key").contains("revanced_settings_$category") }
|
||||
.forEach {
|
||||
it.adoptChild(YOUTUBE_MUSIC_PREFERENCE_TAG_NAME) {
|
||||
setAttribute("android:title", "@string/$key" + "_title")
|
||||
setAttribute("android:summaryOn", "@string/$key" + "_summary_on")
|
||||
setAttribute("android:summaryOff", "@string/$key" + "_summary_off")
|
||||
setAttribute("android:key", key)
|
||||
setAttribute("android:defaultValue", defaultValue)
|
||||
setAttribute("android:dependency", dependencyKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.addMusicPreferenceWithIntent(
|
||||
category: String,
|
||||
key: String,
|
||||
dependencyKey: String
|
||||
) {
|
||||
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
|
||||
val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_CATEGORY_TAG_NAME)
|
||||
List(tags.length) { tags.item(it) as Element }
|
||||
.filter { it.getAttribute("android:key").contains("revanced_settings_$category") }
|
||||
.forEach {
|
||||
it.adoptChild("Preference") {
|
||||
setAttribute("android:title", "@string/$key" + "_title")
|
||||
setAttribute("android:summary", "@string/$key" + "_summary")
|
||||
setAttribute("android:key", key)
|
||||
setAttribute("android:dependency", dependencyKey)
|
||||
this.adoptChild("intent") {
|
||||
setAttribute("android:targetPackage", targetPackage)
|
||||
setAttribute("android:data", key)
|
||||
setAttribute("android:targetClass", YOUTUBE_MUSIC_PREFERENCE_TARGET_CLASS)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.addReVancedMusicPreference() {
|
||||
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
|
||||
with (editor.file) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user