mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-12 12:23:56 +01:00
Compare commits
4 Commits
v2.200.0-d
...
v2.200.0-d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0715e4c723 | ||
|
|
51ab7a65a0 | ||
|
|
2757572442 | ||
|
|
521d3a08c8 |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -1,3 +1,17 @@
|
|||||||
|
# [2.200.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v2.200.0-dev.2...v2.200.0-dev.3) (2023-11-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Remove tracking query parameter:** Sanitize shared URLs in remaining places ([2442902](https://github.com/ReVanced/revanced-patches/commit/2442902dacc25f2c932a6689e9788e5a02fdff6b))
|
||||||
|
|
||||||
|
# [2.200.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v2.200.0-dev.1...v2.200.0-dev.2) (2023-11-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Spotify - Custom theme:** Add more background surfaces coloring options ([#3285](https://github.com/ReVanced/revanced-patches/issues/3285)) ([869ec26](https://github.com/ReVanced/revanced-patches/commit/869ec26966f7750c45355ac0acc18b81a2abce87))
|
||||||
|
|
||||||
# [2.200.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v2.199.0...v2.200.0-dev.1) (2023-11-21)
|
# [2.200.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v2.199.0...v2.200.0-dev.1) (2023-11-21)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
org.gradle.parallel = true
|
org.gradle.parallel = true
|
||||||
org.gradle.caching = true
|
org.gradle.caching = true
|
||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 2.200.0-dev.1
|
version = 2.200.0-dev.3
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -17,25 +17,42 @@ object CustomThemePatch : ResourcePatch() {
|
|||||||
private var backgroundColor by stringPatchOption(
|
private var backgroundColor by stringPatchOption(
|
||||||
key = "backgroundColor",
|
key = "backgroundColor",
|
||||||
default = "@android:color/black",
|
default = "@android:color/black",
|
||||||
title = "Background color",
|
title = "Primary background color",
|
||||||
description = "The background color. Can be a hex color or a resource reference.",
|
description = "The background color. Can be a hex color or a resource reference.",
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
|
||||||
|
private var backgroundColorSecondary by stringPatchOption(
|
||||||
|
key = "backgroundColorSecondary",
|
||||||
|
default = "#ff282828",
|
||||||
|
title = "Secondary background color",
|
||||||
|
description = "The secondary background color. Can be a hex color or a resource reference.",
|
||||||
|
required = true
|
||||||
)
|
)
|
||||||
|
|
||||||
private var accentColor by stringPatchOption(
|
private var accentColor by stringPatchOption(
|
||||||
key = "accentColor",
|
key = "accentColor",
|
||||||
default = "#ff1ed760",
|
default = "#ff1ed760",
|
||||||
title = "Accent color",
|
title = "Accent color",
|
||||||
description = "The accent color ('spotify green' by default). Can be a hex color or a resource reference.",
|
description = "The accent color ('Spotify green' by default). Can be a hex color or a resource reference.",
|
||||||
|
required = true
|
||||||
)
|
)
|
||||||
|
|
||||||
private var accentPressedColor by stringPatchOption(
|
private var accentColorPressed by stringPatchOption(
|
||||||
key = "accentPressedColor",
|
key = "accentColorPressed",
|
||||||
default = "#ff169c46",
|
default = "#ff169c46",
|
||||||
title = "Pressed accent for the dark theme",
|
title = "Pressed dark theme accent color",
|
||||||
description = "The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference."
|
description = "The color when accented buttons are pressed, by default slightly darker than accent. "
|
||||||
|
+ "Can be a hex color or a resource reference.",
|
||||||
|
required = true
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun execute(context: ResourceContext) {
|
override fun execute(context: ResourceContext) {
|
||||||
|
val backgroundColor = backgroundColor!!
|
||||||
|
val backgroundColorSecondary = backgroundColorSecondary!!
|
||||||
|
val accentColor = accentColor!!
|
||||||
|
val accentColorPressed = accentColorPressed!!
|
||||||
|
|
||||||
context.xmlEditor["res/values/colors.xml"].use { editor ->
|
context.xmlEditor["res/values/colors.xml"].use { editor ->
|
||||||
val resourcesNode = editor.file.getElementsByTagName("resources").item(0) as Element
|
val resourcesNode = editor.file.getElementsByTagName("resources").item(0) as Element
|
||||||
|
|
||||||
@@ -43,9 +60,15 @@ object CustomThemePatch : ResourcePatch() {
|
|||||||
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
||||||
|
|
||||||
node.textContent = when (node.getAttribute("name")) {
|
node.textContent = when (node.getAttribute("name")) {
|
||||||
"gray_7" -> backgroundColor!!
|
"dark_base_background_elevated_base", "design_dark_default_color_background",
|
||||||
"dark_brightaccent_background_base", "dark_base_text_brightaccent", "green_light" -> accentColor!!
|
"design_dark_default_color_surface", "gray_7", "gray_background", "gray_layer",
|
||||||
"dark_brightaccent_background_press" -> accentPressedColor!!
|
"sthlm_blk" -> backgroundColor
|
||||||
|
|
||||||
|
"gray_15" -> backgroundColorSecondary
|
||||||
|
|
||||||
|
"dark_brightaccent_background_base", "dark_base_text_brightaccent", "green_light" -> accentColor
|
||||||
|
|
||||||
|
"dark_brightaccent_background_press" -> accentColorPressed
|
||||||
else -> continue
|
else -> continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,23 @@
|
|||||||
package app.revanced.patches.youtube.misc.privacy
|
package app.revanced.patches.youtube.misc.privacy
|
||||||
|
|
||||||
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprintResult.MethodFingerprintScanResult.PatternScanResult
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||||
import app.revanced.patcher.patch.annotation.Patch
|
import app.revanced.patcher.patch.annotation.Patch
|
||||||
|
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
||||||
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||||
import app.revanced.patches.youtube.misc.privacy.fingerprints.CopyTextFingerprint
|
import app.revanced.patches.youtube.misc.privacy.fingerprints.CopyTextFingerprint
|
||||||
|
import app.revanced.patches.youtube.misc.privacy.fingerprints.SystemShareSheetFingerprint
|
||||||
|
import app.revanced.patches.youtube.misc.privacy.fingerprints.YouTubeShareSheetFingerprint
|
||||||
import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
@@ -30,7 +37,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
|||||||
)
|
)
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
object RemoveTrackingQueryParameterPatch : BytecodePatch(
|
object RemoveTrackingQueryParameterPatch : BytecodePatch(
|
||||||
setOf(CopyTextFingerprint)
|
setOf(CopyTextFingerprint, SystemShareSheetFingerprint, YouTubeShareSheetFingerprint)
|
||||||
) {
|
) {
|
||||||
const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/patches/RemoveTrackingQueryParameterPatch;"
|
const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/patches/RemoveTrackingQueryParameterPatch;"
|
||||||
|
|
||||||
@@ -53,21 +60,31 @@ object RemoveTrackingQueryParameterPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
CopyTextFingerprint.result?.let {
|
fun MethodFingerprint.hook(
|
||||||
val insertIndex = it.scanResult.patternScanResult!!.startIndex + 2
|
getInsertIndex: PatternScanResult.() -> Int,
|
||||||
|
getUrlRegister: MutableMethod.(insertIndex: Int) -> Int
|
||||||
|
) = result?.let {
|
||||||
|
val insertIndex = it.scanResult.patternScanResult!!.getInsertIndex()
|
||||||
|
val urlRegister = it.mutableMethod.getUrlRegister(insertIndex)
|
||||||
|
|
||||||
it.mutableMethod.apply {
|
it.mutableMethod.addInstructions(
|
||||||
val urlRegister = getInstruction<TwoRegisterInstruction>(insertIndex - 2).registerA
|
|
||||||
|
|
||||||
addInstructions(
|
|
||||||
insertIndex,
|
insertIndex,
|
||||||
"""
|
"""
|
||||||
invoke-static {v$urlRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->sanitize(Ljava/lang/String;)Ljava/lang/String;
|
invoke-static {v$urlRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->sanitize(Ljava/lang/String;)Ljava/lang/String;
|
||||||
move-result-object v$urlRegister
|
move-result-object v$urlRegister
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
} ?: throw exception
|
||||||
|
|
||||||
}
|
// Native YouTube share sheet.
|
||||||
|
YouTubeShareSheetFingerprint.hook(getInsertIndex = { startIndex + 1 })
|
||||||
|
{ insertIndex -> getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA }
|
||||||
|
|
||||||
|
// Native system share sheet.
|
||||||
|
SystemShareSheetFingerprint.hook(getInsertIndex = { endIndex })
|
||||||
|
{ insertIndex -> getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA }
|
||||||
|
|
||||||
|
CopyTextFingerprint.hook(getInsertIndex = { startIndex + 2 })
|
||||||
|
{ insertIndex -> getInstruction<TwoRegisterInstruction>(insertIndex - 2).registerA }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package app.revanced.patches.youtube.misc.privacy.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
|
object SystemShareSheetFingerprint : MethodFingerprint(
|
||||||
|
returnType = "V",
|
||||||
|
parameters = listOf("L", "Ljava/util/Map;"),
|
||||||
|
opcodes = listOf(
|
||||||
|
Opcode.CHECK_CAST,
|
||||||
|
Opcode.GOTO
|
||||||
|
),
|
||||||
|
strings = listOf("YTShare_Logging_Share_Intent_Endpoint_Byte_Array")
|
||||||
|
)
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package app.revanced.patches.youtube.misc.privacy.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.or
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
|
object YouTubeShareSheetFingerprint : MethodFingerprint(
|
||||||
|
returnType = "V",
|
||||||
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||||
|
parameters = listOf("L", "Ljava/util/Map;"),
|
||||||
|
opcodes = listOf(
|
||||||
|
Opcode.CHECK_CAST,
|
||||||
|
Opcode.GOTO,
|
||||||
|
Opcode.MOVE_OBJECT,
|
||||||
|
Opcode.INVOKE_VIRTUAL,
|
||||||
|
)
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user