mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-16 07:43:56 +00:00
Compare commits
19 Commits
v2.188.0-d
...
v2.188.0-d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1e063ee76 | ||
|
|
3cd5f573b1 | ||
|
|
9eaf98e4a1 | ||
|
|
d56308539b | ||
|
|
68c4d965cd | ||
|
|
d10b5cf56e | ||
|
|
92223607fe | ||
|
|
21beefa7e6 | ||
|
|
fec613eb13 | ||
|
|
b007aa3827 | ||
|
|
8cd293310a | ||
|
|
9e8c4e61a5 | ||
|
|
9725870e6a | ||
|
|
204284f5d3 | ||
|
|
70cffa4466 | ||
|
|
4f885b15c0 | ||
|
|
28c541078b | ||
|
|
4d031cb029 | ||
|
|
1ea6f27d7d |
57
CHANGELOG.md
57
CHANGELOG.md
@@ -1,3 +1,60 @@
|
||||
# [2.188.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.7...v2.188.0-dev.8) (2023-08-07)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Change package name:** Append `.revanced` to package name by default ([#2750](https://github.com/ReVanced/revanced-patches/issues/2750)) ([e83e62f](https://github.com/ReVanced/revanced-patches/commit/e83e62fc2400caf1c5179d25e0ac4fbd51ddba00))
|
||||
|
||||
# [2.188.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.6...v2.188.0-dev.7) (2023-08-07)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Debug:** Logging of layout proto buffer strings ([#2759](https://github.com/ReVanced/revanced-patches/issues/2759)) ([189f719](https://github.com/ReVanced/revanced-patches/commit/189f719720551f36c6e006c45558fe5ae46ca4f8))
|
||||
|
||||
# [2.188.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.5...v2.188.0-dev.6) (2023-08-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Client spoof:** Adjust spoof signature settings description ([#2760](https://github.com/ReVanced/revanced-patches/issues/2760)) ([f71d893](https://github.com/ReVanced/revanced-patches/commit/f71d8937663fdbfc93d8e3ce1cdb47e1667554f0))
|
||||
|
||||
# [2.188.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.4...v2.188.0-dev.5) (2023-08-04)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Add `Permanent repeat` patch ([#2722](https://github.com/ReVanced/revanced-patches/issues/2722)) ([506d49c](https://github.com/ReVanced/revanced-patches/commit/506d49c82a68faee25aede8194e7884191c0f271))
|
||||
|
||||
# [2.188.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.3...v2.188.0-dev.4) (2023-08-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* improve wording ([26f9b05](https://github.com/ReVanced/revanced-patches/commit/26f9b0514fda9434b2a36d2f9e5ad6a4f5bb94bd))
|
||||
* **Tiktok - Show seekbar:** Bump compatibility ([#2737](https://github.com/ReVanced/revanced-patches/issues/2737)) ([08413bd](https://github.com/ReVanced/revanced-patches/commit/08413bdc97aef892f7372c585d1d792eb95e30f4))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Lightroom:** Add `Disable mandatory login` patch ([#2738](https://github.com/ReVanced/revanced-patches/issues/2738)) ([896a713](https://github.com/ReVanced/revanced-patches/commit/896a71308f1084d7f941c5b59610e40ea5d53009))
|
||||
* **Lightroom:** Add `Unlock premium` patch ([#2740](https://github.com/ReVanced/revanced-patches/issues/2740)) ([e18a9bc](https://github.com/ReVanced/revanced-patches/commit/e18a9bcb50705d374ccbf03cd6ab9a140a2f23ec))
|
||||
* **YouTube Music:** Add `Permanent Shuffle` patch ([#2730](https://github.com/ReVanced/revanced-patches/issues/2730)) ([86a271c](https://github.com/ReVanced/revanced-patches/commit/86a271cd7cc3d1d2a11ff9ebe962574368b93f4f))
|
||||
|
||||
# [2.188.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.2...v2.188.0-dev.3) (2023-08-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* remove newline ([545388b](https://github.com/ReVanced/revanced-patches/commit/545388b3b21cabb485c4d2025756c48984548d6b))
|
||||
|
||||
# [2.188.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.1...v2.188.0-dev.2) (2023-08-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Reddit is Fun - Spoof client:** Use a more convincing user agent ([236a18f](https://github.com/ReVanced/revanced-patches/commit/236a18f9356cede156417c0d55a876d25a98cd4d))
|
||||
|
||||
# [2.188.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v2.187.0...v2.188.0-dev.1) (2023-08-03)
|
||||
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("app.revanced:revanced-patcher:12.0.0")
|
||||
implementation("app.revanced:revanced-patcher:12.1.1")
|
||||
implementation("app.revanced:multidexlib2:2.5.3-a3836654")
|
||||
// Required for meta
|
||||
implementation("com.google.code.gson:gson:2.10.1")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
org.gradle.parallel = true
|
||||
org.gradle.caching = true
|
||||
kotlin.code.style = official
|
||||
version = 2.188.0-dev.1
|
||||
version = 2.188.0-dev.8
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -9,39 +9,43 @@ import org.w3c.dom.Element
|
||||
|
||||
@Patch(false)
|
||||
@Name("Change package name")
|
||||
@Description("Changes the package name.")
|
||||
@Description("Changes the package name. Appends \".revanced\" to the package name by default.")
|
||||
class ChangePackageNamePatch : ResourcePatch {
|
||||
override fun execute(context: ResourceContext): PatchResult {
|
||||
packageName?.let { packageName ->
|
||||
val packageNameRegex = Regex("^[a-z]\\w*(\\.[a-z]\\w*)+\$")
|
||||
if (!packageName.matches(packageNameRegex))
|
||||
return PatchResultError("Invalid package name")
|
||||
val packageNameToUse = packageName ?: getDefaultPackageName(context)
|
||||
|
||||
var originalPackageName: String
|
||||
context.xmlEditor["AndroidManifest.xml"].use { editor ->
|
||||
val manifest = editor.file.getElementsByTagName("manifest").item(0) as Element
|
||||
originalPackageName = manifest.getAttribute("package")
|
||||
}
|
||||
val packageNameRegex = Regex("^[a-z]\\w*(\\.[a-z]\\w*)+\$")
|
||||
if (!packageNameToUse.matches(packageNameRegex))
|
||||
return PatchResultError("Invalid package name")
|
||||
|
||||
if (!originalPackageName.matches(packageNameRegex))
|
||||
return PatchResultError("Failed to get the original package name")
|
||||
val originalPackageName = getOriginalPackageName(context)
|
||||
|
||||
context["AndroidManifest.xml"].apply {
|
||||
readText().replace(originalPackageName, packageName).let(::writeText)
|
||||
}
|
||||
|
||||
} ?: return PatchResultError("No package name provided")
|
||||
context["AndroidManifest.xml"].apply {
|
||||
readText().replace(originalPackageName, packageNameToUse).let(::writeText)
|
||||
}
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
||||
private fun getDefaultPackageName(context: ResourceContext): String {
|
||||
val originalPackageName = getOriginalPackageName(context)
|
||||
return "$originalPackageName.revanced"
|
||||
}
|
||||
|
||||
private fun getOriginalPackageName(context: ResourceContext): String {
|
||||
context.xmlEditor["AndroidManifest.xml"].use { editor ->
|
||||
val manifest = editor.file.getElementsByTagName("manifest").item(0) as Element
|
||||
return manifest.getAttribute("package")
|
||||
}
|
||||
}
|
||||
|
||||
companion object : OptionsContainer() {
|
||||
var packageName: String? by option(
|
||||
PatchOption.StringOption(
|
||||
key = "packageName",
|
||||
default = null,
|
||||
title = "Package name",
|
||||
description = "The name of the package to rename of the app.",
|
||||
description = "The name of the package to rename the app to.",
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package app.revanced.patches.lightroom.misc.login.annotations
|
||||
|
||||
import app.revanced.patcher.annotation.Compatibility
|
||||
import app.revanced.patcher.annotation.Package
|
||||
|
||||
@Compatibility([Package("com.adobe.lrmobile",)])
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
internal annotation class DisableMandatoryLoginCompatibility
|
||||
@@ -0,0 +1,19 @@
|
||||
package app.revanced.patches.lightroom.misc.login.fingerprint
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.AccessFlags
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object IsLoggedInFingerprint : MethodFingerprint(
|
||||
returnType = "Z",
|
||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC or AccessFlags.FINAL,
|
||||
opcodes = listOf(
|
||||
Opcode.INVOKE_STATIC,
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.SGET_OBJECT,
|
||||
Opcode.IF_NE,
|
||||
Opcode.CONST_4,
|
||||
Opcode.GOTO
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.revanced.patches.lightroom.misc.login.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Name
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.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.Patch
|
||||
import app.revanced.patches.lightroom.misc.login.annotations.DisableMandatoryLoginCompatibility
|
||||
import app.revanced.patches.lightroom.misc.login.fingerprint.IsLoggedInFingerprint
|
||||
|
||||
@Patch
|
||||
@Name("Disable mandatory login")
|
||||
@DisableMandatoryLoginCompatibility
|
||||
class DisableMandatoryLoginPatch : BytecodePatch(listOf(IsLoggedInFingerprint)) {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
IsLoggedInFingerprint.result?.mutableMethod?.apply {
|
||||
val index = implementation!!.instructions.lastIndex - 1
|
||||
// Set isLoggedIn = true.
|
||||
replaceInstruction(index, "const/4 v0, 0x1")
|
||||
} ?: throw IsLoggedInFingerprint.toErrorResult()
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package app.revanced.patches.lightroom.misc.premium.annotations
|
||||
|
||||
import app.revanced.patcher.annotation.Compatibility
|
||||
import app.revanced.patcher.annotation.Package
|
||||
|
||||
@Compatibility([Package("com.adobe.lrmobile")])
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
internal annotation class UnlockPremiumCompatibility
|
||||
@@ -0,0 +1,18 @@
|
||||
package app.revanced.patches.lightroom.misc.premium.fingerprint
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.AccessFlags
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object HasPurchasedFingerprint : MethodFingerprint(
|
||||
returnType = "Z",
|
||||
accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL,
|
||||
strings = listOf("isPurchaseDoneRecently = true, access platform profile present? = "),
|
||||
opcodes = listOf(
|
||||
Opcode.SGET_OBJECT,
|
||||
Opcode.CONST_4,
|
||||
Opcode.CONST_4,
|
||||
Opcode.CONST_4,
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.revanced.patches.lightroom.misc.premium.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Description
|
||||
import app.revanced.patcher.annotation.Name
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.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.Patch
|
||||
import app.revanced.patches.lightroom.misc.premium.annotations.UnlockPremiumCompatibility
|
||||
import app.revanced.patches.lightroom.misc.premium.fingerprint.HasPurchasedFingerprint
|
||||
|
||||
@Patch
|
||||
@Name("Unlock premium")
|
||||
@Description("Unlocks premium features.")
|
||||
@UnlockPremiumCompatibility
|
||||
class UnlockPremiumPatch : BytecodePatch(listOf(HasPurchasedFingerprint)) {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
// Set hasPremium = true.
|
||||
HasPurchasedFingerprint.result?.mutableMethod?.replaceInstruction(2, "const/4 v2, 0x1")
|
||||
?: throw HasPurchasedFingerprint.toErrorResult()
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package app.revanced.patches.music.interaction.permanentrepeat.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.AccessFlags
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object RepeatTrackFingerprint : MethodFingerprint(
|
||||
"V",
|
||||
AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||
listOf("L", "L"),
|
||||
listOf(
|
||||
Opcode.CHECK_CAST,
|
||||
Opcode.INVOKE_INTERFACE,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.SGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT,
|
||||
Opcode.IF_NEZ
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,40 @@
|
||||
package app.revanced.patches.music.interaction.permanentrepeat.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Description
|
||||
import app.revanced.patcher.annotation.Name
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
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.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.music.annotations.MusicCompatibility
|
||||
import app.revanced.patches.music.interaction.permanentrepeat.fingerprints.RepeatTrackFingerprint
|
||||
|
||||
@Patch(false)
|
||||
@Name("Permanent repeat")
|
||||
@Description("Permanently remember your repeating preference even if the playlist ends or another track is played.")
|
||||
@MusicCompatibility
|
||||
class PermanentRepeatPatch : BytecodePatch(
|
||||
listOf(RepeatTrackFingerprint)
|
||||
) {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
RepeatTrackFingerprint.result?.let {
|
||||
val startIndex = it.scanResult.patternScanResult!!.endIndex
|
||||
val repeatIndex = startIndex + 3
|
||||
|
||||
it.mutableMethod.apply {
|
||||
addInstructionsWithLabels(
|
||||
startIndex,
|
||||
"goto :repeat",
|
||||
ExternalLabel("repeat", getInstruction(repeatIndex))
|
||||
)
|
||||
}
|
||||
} ?: return RepeatTrackFingerprint.toErrorResult()
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package app.revanced.patches.music.interaction.permanentshuffle.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import org.jf.dexlib2.AccessFlags
|
||||
import org.jf.dexlib2.Opcode
|
||||
|
||||
object DisableShuffleFingerprint : MethodFingerprint(
|
||||
"V",
|
||||
AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||
listOf(),
|
||||
listOf(
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.SGET_OBJECT,
|
||||
Opcode.IPUT_OBJECT,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,29 @@
|
||||
package app.revanced.patches.music.interaction.permanentshuffle.patch
|
||||
|
||||
import app.revanced.extensions.toErrorResult
|
||||
import app.revanced.patcher.annotation.Description
|
||||
import app.revanced.patcher.annotation.Name
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
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.annotations.MusicCompatibility
|
||||
import app.revanced.patches.music.interaction.permanentshuffle.fingerprints.DisableShuffleFingerprint
|
||||
|
||||
@Patch(false)
|
||||
@Name("Permanent shuffle")
|
||||
@Description("Permanently remember your shuffle preference " +
|
||||
"even if the playlist ends or another track is played.")
|
||||
@MusicCompatibility
|
||||
class PermanentShuffleTogglePatch : BytecodePatch(
|
||||
listOf(DisableShuffleFingerprint)
|
||||
) {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
DisableShuffleFingerprint.result?.mutableMethod?.addInstruction(0, "return-void")
|
||||
?: return DisableShuffleFingerprint.toErrorResult()
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ abstract class AbstractSpoofClientPatch(
|
||||
|
||||
val error = """
|
||||
In order to use this patch, you need to provide a client ID.
|
||||
You can do this by creating a file at ${it.absolutePath} with the client ID as its content.
|
||||
You can do that by creating a file at ${it.absolutePath} with the client ID as its content.
|
||||
Alternatively, you can provide the client ID using patch options.
|
||||
|
||||
You can get your client ID from https://www.reddit.com/prefs/apps.
|
||||
|
||||
@@ -58,15 +58,16 @@ class SpoofClientPatch : AbstractSpoofClientPatch(
|
||||
}
|
||||
|
||||
override fun List<MethodFingerprintResult>.patchUserAgent(context: BytecodeContext): PatchResult {
|
||||
// Use a random number as the user agent string.
|
||||
val randomUserAgent = (0..100000).random()
|
||||
// Use a random user agent.
|
||||
val randomName = (0..100000).random()
|
||||
val userAgent = "android:app.revanced.$randomName:v1.0.0 (by /u/revanced)"
|
||||
|
||||
first().mutableMethod.addInstructions(
|
||||
0,
|
||||
"""
|
||||
const-string v0, "$randomUserAgent"
|
||||
return-object v0
|
||||
"""
|
||||
const-string v0, "$userAgent"
|
||||
return-object v0
|
||||
"""
|
||||
)
|
||||
|
||||
return PatchResultSuccess()
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package app.revanced.patches.tiktok.interaction.seekbar.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
|
||||
object ShouldShowSeekBarFingerprint : MethodFingerprint(
|
||||
strings = listOf(
|
||||
"can not show seekbar, state: 1, not in resume"
|
||||
),
|
||||
)
|
||||
@@ -5,14 +5,13 @@ import app.revanced.patcher.annotation.Description
|
||||
import app.revanced.patcher.annotation.Name
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
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.tiktok.interaction.seekbar.annotations.ShowSeekbarCompatibility
|
||||
import app.revanced.patches.tiktok.interaction.seekbar.fingerprints.SetSeekBarShowTypeFingerprint
|
||||
import org.jf.dexlib2.iface.instruction.formats.Instruction22t
|
||||
import app.revanced.patches.tiktok.interaction.seekbar.fingerprints.ShouldShowSeekBarFingerprint
|
||||
|
||||
@Patch
|
||||
@Name("Show seekbar")
|
||||
@@ -21,11 +20,21 @@ import org.jf.dexlib2.iface.instruction.formats.Instruction22t
|
||||
class ShowSeekbarPatch : BytecodePatch(
|
||||
listOf(
|
||||
SetSeekBarShowTypeFingerprint,
|
||||
ShouldShowSeekBarFingerprint,
|
||||
)
|
||||
) {
|
||||
override fun execute(context: BytecodeContext): PatchResult {
|
||||
ShouldShowSeekBarFingerprint.result?.mutableMethod?.apply {
|
||||
addInstructions(
|
||||
0,
|
||||
"""
|
||||
const/4 v0, 0x1
|
||||
return v0
|
||||
"""
|
||||
)
|
||||
}
|
||||
SetSeekBarShowTypeFingerprint.result?.mutableMethod?.apply {
|
||||
val typeRegister = getInstruction<Instruction22t>(1).registerB
|
||||
val typeRegister = implementation!!.registerCount - 1
|
||||
|
||||
addInstructions(
|
||||
0,
|
||||
|
||||
@@ -32,6 +32,15 @@ class DebuggingPatch : ResourcePatch {
|
||||
StringResource("revanced_debug_summary_on", "Debug logs are enabled"),
|
||||
StringResource("revanced_debug_summary_off", "Debug logs are disabled")
|
||||
),
|
||||
SwitchPreference(
|
||||
"revanced_debug_protobuffer",
|
||||
StringResource(
|
||||
"revanced_debug_protobuffer_title",
|
||||
"Log protocol buffer"
|
||||
),
|
||||
StringResource("revanced_debug_protobuffer_summary_on", "Debug logs include proto buffer"),
|
||||
StringResource("revanced_debug_protobuffer_summary_off", "Debug logs do not include proto buffer")
|
||||
),
|
||||
SwitchPreference(
|
||||
"revanced_debug_stacktrace",
|
||||
StringResource(
|
||||
|
||||
@@ -23,11 +23,11 @@ class SpoofSignatureVerificationResourcePatch : ResourcePatch {
|
||||
"App signature spoofed\\n\\n"
|
||||
+ "Side effects include:\\n"
|
||||
+ "• Ambient mode may not work\\n"
|
||||
+ "• Seekbar thumbnails are hidden\\n"
|
||||
+ "• Downloading videos may not work"),
|
||||
StringResource("revanced_spoof_signature_verification_summary_off", "App signature not spoofed"),
|
||||
+ "• Downloading videos may not work\\n"
|
||||
+ "• Seekbar thumbnails are always hidden"),
|
||||
StringResource("revanced_spoof_signature_verification_summary_off", "App signature not spoofed\\n\\nVideo playback may not work"),
|
||||
StringResource("revanced_spoof_signature_verification_user_dialog_message",
|
||||
"Turning off this setting may cause playback issues.")
|
||||
"If you do not have a YouTube Premium subscription,\\n\\nthen turning off this setting will cause video playback issues.")
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user