mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-24 03:01:03 +00:00
Compare commits
8 Commits
v2.174.0-d
...
v2.174.0-d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a905484c0 | ||
|
|
677c0f8145 | ||
|
|
aad21ab6f7 | ||
|
|
a06d061e26 | ||
|
|
97f70f2490 | ||
|
|
219c24c965 | ||
|
|
bb2572d12a | ||
|
|
c1f74dddcf |
27
CHANGELOG.md
27
CHANGELOG.md
@@ -1,3 +1,30 @@
|
|||||||
|
# [2.174.0-dev.33](https://github.com/revanced/revanced-patches/compare/v2.174.0-dev.32...v2.174.0-dev.33) (2023-05-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **youtube/spoof-signature-verification:** adjusting summary text ([#2169](https://github.com/revanced/revanced-patches/issues/2169)) ([4ccb1ee](https://github.com/revanced/revanced-patches/commit/4ccb1ee0b988bc0ddd6a0c986975b17caa828770))
|
||||||
|
|
||||||
|
# [2.174.0-dev.32](https://github.com/revanced/revanced-patches/compare/v2.174.0-dev.31...v2.174.0-dev.32) (2023-05-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **youtube/sponsorblock:** fix toast shown when scrubbing thru a paused video ([#2152](https://github.com/revanced/revanced-patches/issues/2152)) ([c6c23ff](https://github.com/revanced/revanced-patches/commit/c6c23ff0d9a18e3ef3d4b9b28ffa562a2eceb58b))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **youtube:** add options to disable toasts on connection error ([#2159](https://github.com/revanced/revanced-patches/issues/2159)) ([99916ae](https://github.com/revanced/revanced-patches/commit/99916aefaaea3b94e94e2901d70493fdb18a3dab))
|
||||||
|
|
||||||
|
# [2.174.0-dev.31](https://github.com/revanced/revanced-patches/compare/v2.174.0-dev.30...v2.174.0-dev.31) (2023-05-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **candylinkvpn:** add `unlock-pro` patch ([#2157](https://github.com/revanced/revanced-patches/issues/2157)) ([7159f86](https://github.com/revanced/revanced-patches/commit/7159f867801300d4ae32937743de59421de76238))
|
||||||
|
* **messenger:** add `disable-typing-indicator` patch ([#2115](https://github.com/revanced/revanced-patches/issues/2115)) ([5d1de4f](https://github.com/revanced/revanced-patches/commit/5d1de4f4eab83e61cfc1c4aaee74179afcb9431f))
|
||||||
|
|
||||||
# [2.174.0-dev.30](https://github.com/revanced/revanced-patches/compare/v2.174.0-dev.29...v2.174.0-dev.30) (2023-05-16)
|
# [2.174.0-dev.30](https://github.com/revanced/revanced-patches/compare/v2.174.0-dev.29...v2.174.0-dev.30) (2023-05-16)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
27
README.md
27
README.md
@@ -150,6 +150,16 @@ The official ReVanced Patches.
|
|||||||
| `spotify-theme` | Applies a custom theme. | all |
|
| `spotify-theme` | Applies a custom theme. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
### [📦 `com.facebook.orca`](https://play.google.com/store/apps/details?id=com.facebook.orca)
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `disable-switching-emoji-to-sticker-in-message-input-field` | Disables switching from emoji to sticker search mode in message input field | all |
|
||||||
|
| `disable-typing-indicator` | Disables the indicator while typing a message | all |
|
||||||
|
| `hide-inbox-ads` | Hides ads in inbox. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
### [📦 `com.reddit.frontpage`](https://play.google.com/store/apps/details?id=com.reddit.frontpage)
|
### [📦 `com.reddit.frontpage`](https://play.google.com/store/apps/details?id=com.reddit.frontpage)
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
@@ -160,15 +170,6 @@ The official ReVanced Patches.
|
|||||||
| `premium-icon-reddit` | Unlocks premium Reddit app icons. | all |
|
| `premium-icon-reddit` | Unlocks premium Reddit app icons. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.facebook.orca`](https://play.google.com/store/apps/details?id=com.facebook.orca)
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `disable-switching-emoji-to-sticker-in-message-input-field` | Disables switching from emoji to sticker search mode in message input field | all |
|
|
||||||
| `hide-inbox-ads` | Hides ads in inbox. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### [📦 `at.gv.bmf.bmf2go`](https://play.google.com/store/apps/details?id=at.gv.bmf.bmf2go)
|
### [📦 `at.gv.bmf.bmf2go`](https://play.google.com/store/apps/details?id=at.gv.bmf.bmf2go)
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
@@ -355,6 +356,14 @@ The official ReVanced Patches.
|
|||||||
| `unlock-pro` | Unlocks pro features. | 4.6377 |
|
| `unlock-pro` | Unlocks pro features. | 4.6377 |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
### [📦 `com.candylink.openvpn`](https://play.google.com/store/apps/details?id=com.candylink.openvpn)
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `unlock-pro` | Unlocks premium features. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
### [📦 `org.totschnig.myexpenses`](https://play.google.com/store/apps/details?id=org.totschnig.myexpenses)
|
### [📦 `org.totschnig.myexpenses`](https://play.google.com/store/apps/details?id=org.totschnig.myexpenses)
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 2.174.0-dev.30
|
version = 2.174.0-dev.33
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
|
|||||||
|
package app.revanced.patches.candylinkvpn.annotations
|
||||||
|
|
||||||
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
|
import app.revanced.patcher.annotation.Package
|
||||||
|
|
||||||
|
@Compatibility([Package("com.candylink.openvpn")])
|
||||||
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
internal annotation class UnlockProCompatibility
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package app.revanced.patches.candylinkvpn.fingereprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
|
|
||||||
|
object IsPremiumPurchasedFingerprint : MethodFingerprint(
|
||||||
|
customFingerprint = { methodDef, _ ->
|
||||||
|
methodDef.definingClass.endsWith("PreferenceProvider;") &&
|
||||||
|
methodDef.name == "isPremiumPurchased"
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package app.revanced.patches.candylinkvpn.patch
|
||||||
|
|
||||||
|
import app.revanced.extensions.toErrorResult
|
||||||
|
import app.revanced.patcher.annotation.Description
|
||||||
|
import app.revanced.patcher.annotation.Name
|
||||||
|
import app.revanced.patcher.annotation.Version
|
||||||
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
|
import app.revanced.patcher.extensions.addInstructions
|
||||||
|
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.candylinkvpn.annotations.UnlockProCompatibility
|
||||||
|
import app.revanced.patches.candylinkvpn.fingereprints.IsPremiumPurchasedFingerprint
|
||||||
|
|
||||||
|
@Patch
|
||||||
|
@Name("unlock-pro")
|
||||||
|
@Description("Unlocks premium features.")
|
||||||
|
@UnlockProCompatibility
|
||||||
|
@Version("0.0.1")
|
||||||
|
class UnlockProPatch : BytecodePatch(
|
||||||
|
listOf(IsPremiumPurchasedFingerprint)
|
||||||
|
) {
|
||||||
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
|
IsPremiumPurchasedFingerprint.result?.let {
|
||||||
|
it.mutableMethod.addInstructions(
|
||||||
|
0,
|
||||||
|
"""
|
||||||
|
const/4 v0, 0x1
|
||||||
|
return v0
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
} ?: return IsPremiumPurchasedFingerprint.toErrorResult()
|
||||||
|
|
||||||
|
return PatchResultSuccess()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package app.revanced.patches.messenger.inputfield.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
|
import org.jf.dexlib2.dexbacked.value.DexBackedStringEncodedValue
|
||||||
|
|
||||||
|
object SendTypingIndicatorFingerprint : MethodFingerprint(
|
||||||
|
returnType = "V",
|
||||||
|
parameters = listOf(),
|
||||||
|
customFingerprint = { methodDef, classDef ->
|
||||||
|
methodDef.name == "run" && classDef.fields.any {
|
||||||
|
it.name == "__redex_internal_original_name"
|
||||||
|
&& (it.initialValue as? DexBackedStringEncodedValue)?.value == "ConversationTypingContext\$sendActiveStateRunnable\$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package app.revanced.patches.messenger.inputfield.patch
|
||||||
|
|
||||||
|
import app.revanced.extensions.toErrorResult
|
||||||
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
|
import app.revanced.patcher.annotation.Description
|
||||||
|
import app.revanced.patcher.annotation.Name
|
||||||
|
import app.revanced.patcher.annotation.Package
|
||||||
|
import app.revanced.patcher.annotation.Version
|
||||||
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
|
import app.revanced.patcher.extensions.replaceInstruction
|
||||||
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
|
import app.revanced.patcher.patch.PatchResult
|
||||||
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
|
import app.revanced.patches.messenger.inputfield.fingerprints.SendTypingIndicatorFingerprint
|
||||||
|
|
||||||
|
@Patch
|
||||||
|
@Name("disable-typing-indicator")
|
||||||
|
@Description("Disables the indicator while typing a message")
|
||||||
|
@Compatibility([Package("com.facebook.orca")])
|
||||||
|
@Version("0.0.1")
|
||||||
|
class DisableTypingIndicator : BytecodePatch(listOf(SendTypingIndicatorFingerprint)) {
|
||||||
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
|
SendTypingIndicatorFingerprint.result?.mutableMethod?.replaceInstruction(0, "return-void")
|
||||||
|
?: throw SendTypingIndicatorFingerprint.toErrorResult()
|
||||||
|
|
||||||
|
return PatchResultSuccess()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -54,8 +54,7 @@ class DebuggingPatch : ResourcePatch {
|
|||||||
StringResource("revanced_debug_toast_on_error_summary_off", "Toast not shown if error occurs"),
|
StringResource("revanced_debug_toast_on_error_summary_off", "Toast not shown if error occurs"),
|
||||||
StringResource("revanced_debug_toast_on_error_user_dialog_message",
|
StringResource("revanced_debug_toast_on_error_user_dialog_message",
|
||||||
"Turning off error toasts hides all ReVanced error notifications."
|
"Turning off error toasts hides all ReVanced error notifications."
|
||||||
+ "\\n\\nThis includes hiding normal network connection timeouts, "
|
+ "\\n\\nYou will not be notified of any unexpected events."
|
||||||
+ "but also hides notification of any unexpected and more serious errors."
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class SpoofSignatureVerificationPatch : BytecodePatch(
|
|||||||
"App signature spoofed\\n\\n"
|
"App signature spoofed\\n\\n"
|
||||||
+ "Side effects include:\\n"
|
+ "Side effects include:\\n"
|
||||||
+ "• End screen cards are always hidden\\n"
|
+ "• End screen cards are always hidden\\n"
|
||||||
+ "• Download button may be hidden"),
|
+ "• Downloading videos may not work"),
|
||||||
StringResource("revanced_spoof_signature_verification_summary_off", "App signature not spoofed"),
|
StringResource("revanced_spoof_signature_verification_summary_off", "App signature not spoofed"),
|
||||||
StringResource("revanced_spoof_signature_verification_user_dialog_message",
|
StringResource("revanced_spoof_signature_verification_user_dialog_message",
|
||||||
"Turning off this setting may cause playback issues.")
|
"Turning off this setting may cause playback issues.")
|
||||||
|
|||||||
@@ -6,15 +6,6 @@ import app.revanced.patcher.annotation.Package
|
|||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf(
|
"com.google.android.youtube", arrayOf(
|
||||||
"17.49.37",
|
|
||||||
"18.03.36",
|
|
||||||
"18.03.42",
|
|
||||||
"18.04.35",
|
|
||||||
"18.04.41",
|
|
||||||
"18.05.32",
|
|
||||||
"18.05.35",
|
|
||||||
"18.05.40",
|
|
||||||
"18.08.37",
|
|
||||||
"18.15.40",
|
"18.15.40",
|
||||||
"18.16.37"
|
"18.16.37"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
package app.revanced.patches.youtube.misc.playertype.fingerprint
|
package app.revanced.patches.youtube.misc.playertype.fingerprint
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.or
|
import app.revanced.patcher.extensions.or
|
||||||
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
import org.jf.dexlib2.AccessFlags
|
import org.jf.dexlib2.AccessFlags
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
|
|
||||||
@FuzzyPatternScanMethod(2)
|
object PlayerTypeFingerprint : MethodFingerprint(
|
||||||
object UpdatePlayerTypeFingerprint : MethodFingerprint(
|
returnType = "V",
|
||||||
"V",
|
access = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||||
AccessFlags.PUBLIC or AccessFlags.FINAL,
|
parameters = listOf("L"),
|
||||||
opcodes = listOf(
|
opcodes = listOf(
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.INVOKE_VIRTUAL,
|
||||||
Opcode.IGET_OBJECT,
|
Opcode.IGET_OBJECT,
|
||||||
@@ -29,5 +28,8 @@ object UpdatePlayerTypeFingerprint : MethodFingerprint(
|
|||||||
Opcode.INVOKE_STATIC,
|
Opcode.INVOKE_STATIC,
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.INVOKE_VIRTUAL,
|
||||||
Opcode.RETURN_VOID
|
Opcode.RETURN_VOID
|
||||||
)
|
),
|
||||||
|
customFingerprint = { methodDef, _ ->
|
||||||
|
methodDef.definingClass.endsWith("YouTubePlayerOverlaysLayout;")
|
||||||
|
}
|
||||||
)
|
)
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package app.revanced.patches.youtube.misc.playertype.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 VideoStateFingerprint : MethodFingerprint(
|
||||||
|
access = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||||
|
returnType = "V",
|
||||||
|
parameters = listOf("L"),
|
||||||
|
opcodes = listOf(
|
||||||
|
Opcode.IGET_OBJECT,
|
||||||
|
Opcode.INVOKE_VIRTUAL,
|
||||||
|
Opcode.IGET_OBJECT,
|
||||||
|
Opcode.CONST_4,
|
||||||
|
Opcode.IF_EQZ,
|
||||||
|
Opcode.IF_EQZ,
|
||||||
|
Opcode.IGET_OBJECT, // obfuscated parameter field name
|
||||||
|
),
|
||||||
|
customFingerprint = { methodDef, _ ->
|
||||||
|
methodDef.definingClass.endsWith("YouTubeControlsOverlay;")
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -1,34 +1,61 @@
|
|||||||
package app.revanced.patches.youtube.misc.playertype.patch
|
package app.revanced.patches.youtube.misc.playertype.patch
|
||||||
|
|
||||||
|
import app.revanced.extensions.toErrorResult
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.annotation.Version
|
import app.revanced.patcher.annotation.Version
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
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.instruction
|
||||||
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.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
||||||
import app.revanced.patches.youtube.misc.playertype.annotation.PlayerTypeHookCompatibility
|
import app.revanced.patches.youtube.misc.playertype.annotation.PlayerTypeHookCompatibility
|
||||||
import app.revanced.patches.youtube.misc.playertype.fingerprint.UpdatePlayerTypeFingerprint
|
import app.revanced.patches.youtube.misc.playertype.fingerprint.PlayerTypeFingerprint
|
||||||
|
import app.revanced.patches.youtube.misc.playertype.fingerprint.VideoStateFingerprint
|
||||||
|
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
|
||||||
|
|
||||||
@Name("player-type-hook")
|
@Name("player-type-hook")
|
||||||
@Description("Hook to get the current player type of WatchWhileActivity")
|
@Description("Hook to get the current player type and video playback state.")
|
||||||
@PlayerTypeHookCompatibility
|
@PlayerTypeHookCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
@DependsOn([IntegrationsPatch::class])
|
@DependsOn([IntegrationsPatch::class])
|
||||||
class PlayerTypeHookPatch : BytecodePatch(
|
class PlayerTypeHookPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(PlayerTypeFingerprint, VideoStateFingerprint)
|
||||||
UpdatePlayerTypeFingerprint
|
|
||||||
)
|
|
||||||
) {
|
) {
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
// hook YouTubePlayerOverlaysLayout.updatePlayerLayout()
|
|
||||||
UpdatePlayerTypeFingerprint.result!!.mutableMethod.addInstruction(
|
PlayerTypeFingerprint.result?.let {
|
||||||
0,
|
it.mutableMethod.apply {
|
||||||
"invoke-static { p1 }, Lapp/revanced/integrations/patches/PlayerTypeHookPatch;->YouTubePlayerOverlaysLayout_updatePlayerTypeHookEX(Ljava/lang/Object;)V"
|
addInstruction(
|
||||||
)
|
0,
|
||||||
|
"invoke-static {p1}, $INTEGRATIONS_CLASS_DESCRIPTOR->setPlayerType(Ljava/lang/Enum;)V"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} ?: return PlayerTypeFingerprint.toErrorResult()
|
||||||
|
|
||||||
|
VideoStateFingerprint.result?.let {
|
||||||
|
it.mutableMethod.apply {
|
||||||
|
val endIndex = it.scanResult.patternScanResult!!.endIndex
|
||||||
|
val videoStateFieldName = instruction<ReferenceInstruction>(endIndex).reference
|
||||||
|
addInstructions(
|
||||||
|
0, """
|
||||||
|
iget-object v0, p1, $videoStateFieldName # copy VideoState parameter field
|
||||||
|
invoke-static {v0}, $INTEGRATIONS_CLASS_DESCRIPTOR->setVideoState(Ljava/lang/Enum;)V
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} ?: return VideoStateFingerprint.toErrorResult()
|
||||||
|
|
||||||
return PatchResultSuccess()
|
return PatchResultSuccess()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||||
|
"Lapp/revanced/integrations/patches/PlayerTypeHookPatch;"
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,9 +25,13 @@
|
|||||||
<string name="revanced_ryd_compact_layout_summary_on">Like button styled for minimum width</string>
|
<string name="revanced_ryd_compact_layout_summary_on">Like button styled for minimum width</string>
|
||||||
<string name="revanced_ryd_compact_layout_summary_off">Like button styled for best appearance</string>
|
<string name="revanced_ryd_compact_layout_summary_off">Like button styled for best appearance</string>
|
||||||
|
|
||||||
|
<string name="ryd_toast_on_connection_error_title">Show toast if API not available</string>
|
||||||
|
<string name="ryd_toast_on_connection_error_summary_on">Toast shown if ReturnYouTubeDislike API is not available</string>
|
||||||
|
<string name="ryd_toast_on_connection_error_summary_off">Toast not shown if ReturnYouTubeDislike API is not available</string>
|
||||||
|
|
||||||
<string name="revanced_ryd_about">About</string>
|
<string name="revanced_ryd_about">About</string>
|
||||||
<string name="revanced_ryd_attribution_title">ReturnYouTubeDislike.com</string>
|
<string name="revanced_ryd_attribution_title">ReturnYouTubeDislike.com</string>
|
||||||
<string name="revanced_ryd_attribution_summary">Dislike data is provided by the Return YouTube Dislike API. Tap here to learn more.</string>
|
<string name="revanced_ryd_attribution_summary">Data is provided by the Return YouTube Dislike API. Tap here to learn more.</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistics of this device</string>
|
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistics of this device</string>
|
||||||
|
|||||||
@@ -35,6 +35,9 @@
|
|||||||
<string name="sb_guidelines_popup_open">Show me</string>
|
<string name="sb_guidelines_popup_open">Show me</string>
|
||||||
|
|
||||||
<string name="sb_general">General</string>
|
<string name="sb_general">General</string>
|
||||||
|
<string name="sb_toast_on_connection_error_title">Show toast if API is not available</string>
|
||||||
|
<string name="sb_toast_on_connection_error_summary_on">Toast shown if SponsorBlock API is not available</string>
|
||||||
|
<string name="sb_toast_on_connection_error_summary_off">Toast not shown if SponsorBlock API is not available</string>
|
||||||
<string name="sb_general_skipcount">Enable skip count tracking</string>
|
<string name="sb_general_skipcount">Enable skip count tracking</string>
|
||||||
<string name="sb_general_skipcount_sum_on">Lets the SponsorBlock leaderboard know how much time is saved. A message is sent to the leaderboard each time a segment is skipped</string>
|
<string name="sb_general_skipcount_sum_on">Lets the SponsorBlock leaderboard know how much time is saved. A message is sent to the leaderboard each time a segment is skipped</string>
|
||||||
<string name="sb_general_skipcount_sum_off">Skip count tracking is not enabled</string>
|
<string name="sb_general_skipcount_sum_off">Skip count tracking is not enabled</string>
|
||||||
@@ -117,10 +120,10 @@
|
|||||||
<string name="sb_skip_seekbaronly">Show in seek bar</string>
|
<string name="sb_skip_seekbaronly">Show in seek bar</string>
|
||||||
<string name="sb_skip_ignore">Disable</string>
|
<string name="sb_skip_ignore">Disable</string>
|
||||||
|
|
||||||
<string name="sb_submit_failed_invalid" formatted="false">Can\'t submit the segment: %s</string>
|
<string name="sb_submit_failed_invalid" formatted="false">Unable to submit segment: %s</string>
|
||||||
<string name="sb_submit_failed_timeout">Unable to submit segments (API timed out)</string>
|
<string name="sb_submit_failed_timeout">SponsorBlock is temporarily down</string>
|
||||||
<string name="sb_submit_failed_unknown_error" formatted="false">Unable to submit segments (status: %d %s)</string>
|
<string name="sb_submit_failed_unknown_error" formatted="false">Unable to submit segment (status: %d %s)</string>
|
||||||
<string name="sb_submit_failed_rate_limit">Can\'t submit the segment.\nRate Limited (too many from the same user or IP)</string>
|
<string name="sb_submit_failed_rate_limit">Unable to submit segment.\nRate Limited (too many from the same user or IP)</string>
|
||||||
<string name="sb_submit_failed_forbidden" formatted="false">Can\'t submit the segment: %s</string>
|
<string name="sb_submit_failed_forbidden" formatted="false">Can\'t submit the segment: %s</string>
|
||||||
<string name="sb_submit_failed_duplicate">Can\'t submit the segment.\nAlready exists</string>
|
<string name="sb_submit_failed_duplicate">Can\'t submit the segment.\nAlready exists</string>
|
||||||
<string name="sb_submit_succeeded">Segment submitted successfully</string>
|
<string name="sb_submit_succeeded">Segment submitted successfully</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user