mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-07 01:51:27 +01:00
Compare commits
35 Commits
v4.5.0-dev
...
v4.7.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92c90ec208 | ||
|
|
b4e8beb8ec | ||
|
|
f2fe0d5c6f | ||
|
|
3d3197701c | ||
|
|
1ac612798b | ||
|
|
e1ed1aee69 | ||
|
|
795ccac990 | ||
|
|
da55410a2b | ||
|
|
e7983411a7 | ||
|
|
182748cb16 | ||
|
|
122f04219f | ||
|
|
80763bcef6 | ||
|
|
b80bb8969c | ||
|
|
2a86a670f0 | ||
|
|
dba37b834d | ||
|
|
3ad4eb8dbc | ||
|
|
0e88306f3f | ||
|
|
87cb63f2e7 | ||
|
|
0fead38701 | ||
|
|
19a31019c2 | ||
|
|
61758414c2 | ||
|
|
b4ee8b6da4 | ||
|
|
e86e3d88cf | ||
|
|
8cf444962c | ||
|
|
48bf632dbe | ||
|
|
03e91d4251 | ||
|
|
8caf70719e | ||
|
|
2f28e95252 | ||
|
|
d819e7bbe9 | ||
|
|
fef5f35788 | ||
|
|
80034bc70a | ||
|
|
c40911a815 | ||
|
|
1a53a93cd2 | ||
|
|
2e68c65c9f | ||
|
|
6f8d92827b |
34
.github/workflows/pull_strings.yml
vendored
Normal file
34
.github/workflows/pull_strings.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Pull strings
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: 0 0 1 * *
|
||||
|
||||
jobs:
|
||||
pull:
|
||||
name: Pull strings
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Pull strings
|
||||
uses: crowdin/github-action@v1
|
||||
with:
|
||||
config: crowdin.yml
|
||||
download_translations: true
|
||||
localization_branch_name: feat/translations
|
||||
create_pull_request: true
|
||||
pull_request_title: "chore: Sync translations"
|
||||
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
|
||||
pull_request_base_branch_name: "dev"
|
||||
commit_message: "chore: Sync translations"
|
||||
github_user_name: revanced-bot
|
||||
github_user_email: github@revanced.app
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
27
.github/workflows/push_strings.yml
vendored
Normal file
27
.github/workflows/push_strings.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
name: Push strings
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
paths:
|
||||
- /src/main/resources/addresources/values/strings.xml
|
||||
|
||||
jobs:
|
||||
push:
|
||||
name: Push strings
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Push strings
|
||||
uses: crowdin/github-action@v1
|
||||
with:
|
||||
config: crowdin.yml
|
||||
upload_sources: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
39
.github/workflows/sync_crowdin.yml
vendored
39
.github/workflows/sync_crowdin.yml
vendored
@@ -1,39 +0,0 @@
|
||||
name: Sync Crowdin
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: 0 * 1 * *
|
||||
push:
|
||||
paths:
|
||||
- /src/main/resources/addresources/values/strings.xml
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
name: Sync translations
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Sync translations
|
||||
uses: crowdin/github-action@v1
|
||||
with:
|
||||
config: crowdin.yml
|
||||
upload_sources: true
|
||||
upload_translations: false
|
||||
download_translations: true
|
||||
localization_branch_name: feat/translations
|
||||
create_pull_request: true
|
||||
pull_request_title: "chore: Sync translations"
|
||||
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
|
||||
pull_request_base_branch_name: "dev"
|
||||
commit_message: "chore: Sync translations"
|
||||
github_user_name: revanced-bot
|
||||
github_user_email: github@revanced.app
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
92
CHANGELOG.md
92
CHANGELOG.md
@@ -1,3 +1,95 @@
|
||||
# [4.7.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.3...v4.7.0-dev.4) (2024-04-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Amazon:** Add `Always allow deep-linking` patch ([#3000](https://github.com/ReVanced/revanced-patches/issues/3000)) ([a92b7fb](https://github.com/ReVanced/revanced-patches/commit/a92b7fb43c8b1b45577360cdc6d883fe2815c2f2))
|
||||
* **Twitter:** Add `Sanitize sharing links` patch ([#3003](https://github.com/ReVanced/revanced-patches/issues/3003)) ([186b887](https://github.com/ReVanced/revanced-patches/commit/186b8874157eef1b882b05d491ba1d4ca2809535))
|
||||
|
||||
# [4.7.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.2...v4.7.0-dev.3) (2024-04-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Tumblr - Fix old versions:** Improve reliability by removing remnances of Tumblr Live ([#2988](https://github.com/ReVanced/revanced-patches/issues/2988)) ([897b4db](https://github.com/ReVanced/revanced-patches/commit/897b4dbce984270ae1fd7de5bd30bd05153e45f2))
|
||||
|
||||
# [4.7.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.1...v4.7.0-dev.2) (2024-04-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Strava - Unlock subscription:** Remove compatible version constraint ([80a5599](https://github.com/ReVanced/revanced-patches/commit/80a55991683d7b22626224fa2935a5bf9bfcbfee))
|
||||
|
||||
# [4.7.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.6.1-dev.3...v4.7.0-dev.1) (2024-04-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide layout components:** Add option to hide horizontal shelves ([#2951](https://github.com/ReVanced/revanced-patches/issues/2951)) ([9ae0650](https://github.com/ReVanced/revanced-patches/commit/9ae0650c0005d882299996aa442410bab4261395))
|
||||
|
||||
## [4.6.1-dev.3](https://github.com/ReVanced/revanced-patches/compare/v4.6.1-dev.2...v4.6.1-dev.3) (2024-04-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - GmsCore support:** Prompt to disable battery optimizations, if not done already ([#2958](https://github.com/ReVanced/revanced-patches/issues/2958)) ([82acb84](https://github.com/ReVanced/revanced-patches/commit/82acb84b5f6ff0722a2eb080b53da9dd3622502f))
|
||||
|
||||
## [4.6.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.6.1-dev.1...v4.6.1-dev.2) (2024-04-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide load more button:** Include patch with `Hide layout components`, and hide button only in search feed ([#2959](https://github.com/ReVanced/revanced-patches/issues/2959)) ([b007e8e](https://github.com/ReVanced/revanced-patches/commit/b007e8e06a3afad79b40bec1c6a14604f059049c))
|
||||
|
||||
## [4.6.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.6.0...v4.6.1-dev.1) (2024-04-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Player flyout menu:** Add hide Lock screen menu ([#2985](https://github.com/ReVanced/revanced-patches/issues/2985)) ([308de4a](https://github.com/ReVanced/revanced-patches/commit/308de4a63ca99b8d30d6b3242f98d6f0e2aefb37))
|
||||
|
||||
# [4.6.0](https://github.com/ReVanced/revanced-patches/compare/v4.5.0...v4.6.0) (2024-04-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Mi Fitness - Fix login:** Patch correct register ([#2942](https://github.com/ReVanced/revanced-patches/issues/2942)) ([dc96942](https://github.com/ReVanced/revanced-patches/commit/dc969422b5d50f21e6ea7a64b67dfc650fee6e36))
|
||||
* **Tumblr:** Restore compatibility with latest versions ([#2955](https://github.com/ReVanced/revanced-patches/issues/2955)) ([2954ba7](https://github.com/ReVanced/revanced-patches/commit/2954ba78d21d77308404961f79234bbec606d42e))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Tumblr:** Add `Fix old versions` patch ([#2954](https://github.com/ReVanced/revanced-patches/issues/2954)) ([2fde60e](https://github.com/ReVanced/revanced-patches/commit/2fde60eceb0a96fa857c32cd55c1fd7fe776a679))
|
||||
|
||||
# [4.6.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.5.1-dev.2...v4.6.0-dev.1) (2024-03-31)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Tumblr:** Add `Fix old versions` patch ([#2954](https://github.com/ReVanced/revanced-patches/issues/2954)) ([2fde60e](https://github.com/ReVanced/revanced-patches/commit/2fde60eceb0a96fa857c32cd55c1fd7fe776a679))
|
||||
|
||||
## [4.5.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.5.1-dev.1...v4.5.1-dev.2) (2024-03-30)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Mi Fitness - Fix login:** Patch correct register ([#2942](https://github.com/ReVanced/revanced-patches/issues/2942)) ([dc96942](https://github.com/ReVanced/revanced-patches/commit/dc969422b5d50f21e6ea7a64b67dfc650fee6e36))
|
||||
|
||||
## [4.5.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.5.0...v4.5.1-dev.1) (2024-03-30)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Tumblr:** Restore compatibility with latest versions ([#2955](https://github.com/ReVanced/revanced-patches/issues/2955)) ([2954ba7](https://github.com/ReVanced/revanced-patches/commit/2954ba78d21d77308404961f79234bbec606d42e))
|
||||
|
||||
# [4.5.0](https://github.com/ReVanced/revanced-patches/compare/v4.4.0...v4.5.0) (2024-03-30)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Alternative thumbnails:** Selectively enable for home / subscription / search ([#2926](https://github.com/ReVanced/revanced-patches/issues/2926)) ([8549e1b](https://github.com/ReVanced/revanced-patches/commit/8549e1ba58ad1e1608f5e3ceacd31eeb94578949))
|
||||
* **YouTube - GmsCore:** Require ignoring battery optimizations ([#2952](https://github.com/ReVanced/revanced-patches/issues/2952)) ([c0bef25](https://github.com/ReVanced/revanced-patches/commit/c0bef255909ca884838675ca6f7ac5b0e2e21730))
|
||||
|
||||
# [4.5.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.5.0-dev.1...v4.5.0-dev.2) (2024-03-30)
|
||||
|
||||
|
||||
|
||||
@@ -152,6 +152,12 @@ public final class app/revanced/patches/all/telephony/sim/spoof/SpoofSimCountryP
|
||||
public fun transform (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lkotlin/Pair;)V
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/amazon/deeplinking/DeepLinkingPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||
public static final field INSTANCE Lapp/revanced/patches/amazon/deeplinking/DeepLinkingPatch;
|
||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/backdrops/misc/pro/ProUnlockPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||
public static final field INSTANCE Lapp/revanced/patches/backdrops/misc/pro/ProUnlockPatch;
|
||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||
@@ -1056,6 +1062,12 @@ public final class app/revanced/patches/tumblr/featureflags/OverrideFeatureFlags
|
||||
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/tumblr/fixes/FixOldVersionsPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||
public static final field INSTANCE Lapp/revanced/patches/tumblr/fixes/FixOldVersionsPatch;
|
||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/tumblr/live/DisableTumblrLivePatch : app/revanced/patcher/patch/BytecodePatch {
|
||||
public static final field INSTANCE Lapp/revanced/patches/tumblr/live/DisableTumblrLivePatch;
|
||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||
@@ -1190,6 +1202,12 @@ public final class app/revanced/patches/twitter/misc/links/OpenLinksWithAppChoos
|
||||
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/twitter/misc/links/SanitizeSharingLinksPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||
public static final field INSTANCE Lapp/revanced/patches/twitter/misc/links/SanitizeSharingLinksPatch;
|
||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/vsco/misc/pro/UnlockProPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||
public static final field INSTANCE Lapp/revanced/patches/vsco/misc/pro/UnlockProPatch;
|
||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||
|
||||
@@ -15,7 +15,7 @@ repositories {
|
||||
mavenLocal()
|
||||
google()
|
||||
maven {
|
||||
// A repository must be speficied for some reason. "registry" is a dummy.
|
||||
// A repository must be specified for some reason. "registry" is a dummy.
|
||||
url = uri("https://maven.pkg.github.com/revanced/registry")
|
||||
credentials {
|
||||
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
org.gradle.parallel = true
|
||||
org.gradle.caching = true
|
||||
kotlin.code.style = official
|
||||
version = 4.5.0-dev.2
|
||||
version = 4.7.0-dev.4
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package app.revanced.patches.amazon.deeplinking
|
||||
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal object DeepLinkingFingerprint : MethodFingerprint(
|
||||
"Z",
|
||||
parameters = listOf("L"),
|
||||
accessFlags = AccessFlags.PRIVATE.value,
|
||||
strings = listOf("https://www.", "android.intent.action.VIEW")
|
||||
)
|
||||
@@ -0,0 +1,28 @@
|
||||
package app.revanced.patches.amazon.deeplinking
|
||||
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.util.exception
|
||||
|
||||
@Patch(
|
||||
name = "Always allow deep-linking",
|
||||
description = "Open Amazon links, even if the app is not set to handle Amazon links.",
|
||||
compatiblePackages = [CompatiblePackage("com.amazon.mShop.android.shopping")]
|
||||
)
|
||||
@Suppress("unused")
|
||||
object DeepLinkingPatch : BytecodePatch(
|
||||
setOf(DeepLinkingFingerprint)
|
||||
) {
|
||||
override fun execute(context: BytecodeContext) {
|
||||
DeepLinkingFingerprint.result?.mutableMethod?.addInstructions(
|
||||
0,
|
||||
"""
|
||||
const/4 v0, 0x1
|
||||
return v0
|
||||
"""
|
||||
) ?: throw DeepLinkingFingerprint.exception
|
||||
}
|
||||
}
|
||||
@@ -2,13 +2,11 @@ package app.revanced.patches.mifitness.misc.login
|
||||
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patches.mifitness.misc.login.fingerprints.XiaomiAccountManagerConstructorFingerprint
|
||||
import app.revanced.util.exception
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Patch(
|
||||
name = "Fix login",
|
||||
@@ -20,16 +18,9 @@ object FixLoginPatch : BytecodePatch(
|
||||
setOf(XiaomiAccountManagerConstructorFingerprint),
|
||||
) {
|
||||
override fun execute(context: BytecodeContext) {
|
||||
XiaomiAccountManagerConstructorFingerprint.result?.let {
|
||||
it.mutableMethod.apply {
|
||||
val isCertifiedIndex = it.scanResult.patternScanResult!!.startIndex
|
||||
val isCertifiedRegister = getInstruction<OneRegisterInstruction>(isCertifiedIndex).registerA
|
||||
|
||||
addInstruction(
|
||||
isCertifiedIndex,
|
||||
"const/4 p$isCertifiedRegister, 0x0",
|
||||
)
|
||||
}
|
||||
} ?: throw XiaomiAccountManagerConstructorFingerprint.exception
|
||||
XiaomiAccountManagerConstructorFingerprint.result?.mutableMethod?.addInstruction(
|
||||
0,
|
||||
"const/16 p2, 0x0",
|
||||
) ?: throw XiaomiAccountManagerConstructorFingerprint.exception
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,14 @@ package app.revanced.patches.mifitness.misc.login.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
|
||||
|
||||
internal object XiaomiAccountManagerConstructorFingerprint : MethodFingerprint(
|
||||
accessFlags = AccessFlags.PRIVATE or AccessFlags.CONSTRUCTOR,
|
||||
customFingerprint = { methodDef, _ ->
|
||||
methodDef.definingClass == "Lcom/xiaomi/passport/accountmanager/XiaomiAccountManager;"
|
||||
},
|
||||
opcodes = listOf(Opcode.IF_NEZ),
|
||||
parameters = listOf(
|
||||
"Landroid/content/Context;",
|
||||
"Z",
|
||||
),
|
||||
)
|
||||
|
||||
@@ -5,7 +5,6 @@ import app.revanced.patches.music.misc.gms.Constants.REVANCED_MUSIC_PACKAGE_NAME
|
||||
import app.revanced.patches.music.misc.gms.GmsCoreSupportResourcePatch.gmsCoreVendorGroupIdOption
|
||||
import app.revanced.patches.music.misc.gms.fingerprints.*
|
||||
import app.revanced.patches.music.misc.integrations.IntegrationsPatch
|
||||
import app.revanced.patches.music.misc.integrations.fingerprints.ApplicationInitFingerprint
|
||||
import app.revanced.patches.shared.fingerprints.CastContextFetchFingerprint
|
||||
import app.revanced.patches.shared.misc.gms.BaseGmsCoreSupportPatch
|
||||
|
||||
@@ -21,7 +20,7 @@ object GmsCoreSupportPatch : BaseGmsCoreSupportPatch(
|
||||
CastDynamiteModuleV2Fingerprint,
|
||||
CastContextFetchFingerprint,
|
||||
),
|
||||
mainActivityOnCreateFingerprint = ApplicationInitFingerprint,
|
||||
mainActivityOnCreateFingerprint = MusicActivityOnCreateFingerprint,
|
||||
integrationsPatchDependency = IntegrationsPatch::class,
|
||||
gmsCoreSupportResourcePatch = GmsCoreSupportResourcePatch,
|
||||
compatiblePackages = setOf(CompatiblePackage("com.google.android.apps.youtube.music")),
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package app.revanced.patches.music.misc.gms.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||
|
||||
internal object MusicActivityOnCreateFingerprint : MethodFingerprint(
|
||||
returnType = "V",
|
||||
parameters = listOf("Landroid/os/Bundle;"),
|
||||
customFingerprint = { methodDef, classDef ->
|
||||
methodDef.name == "onCreate" && classDef.type.endsWith("/MusicActivity;")
|
||||
}
|
||||
)
|
||||
@@ -98,9 +98,9 @@ abstract class BaseGmsCoreSupportPatch(
|
||||
|
||||
// Verify GmsCore is installed and whitelisted for power optimizations and background usage.
|
||||
mainActivityOnCreateFingerprint.result?.mutableMethod?.addInstructions(
|
||||
1, // Hack to not disturb other patches (such as the YTMusic integrations patch).
|
||||
0,
|
||||
"invoke-static/range { p0 .. p0 }, Lapp/revanced/integrations/shared/GmsCoreSupport;->" +
|
||||
"checkGmsCore(Landroid/content/Context;)V",
|
||||
"checkGmsCore(Landroid/app/Activity;)V",
|
||||
) ?: throw mainActivityOnCreateFingerprint.exception
|
||||
|
||||
// Change the vendor of GmsCore in ReVanced Integrations.
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
package app.revanced.patches.strava.subscription
|
||||
|
||||
import app.revanced.util.exception
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patches.strava.subscription.fingerprints.GetSubscribedFingerprint
|
||||
import app.revanced.util.exception
|
||||
|
||||
@Patch(
|
||||
name = "Unlock subscription features",
|
||||
description = "Unlocks \"Routes\", \"Matched Runs\" and \"Segment Efforts\".",
|
||||
compatiblePackages = [CompatiblePackage("com.strava", ["320.12"])]
|
||||
compatiblePackages = [CompatiblePackage("com.strava")],
|
||||
)
|
||||
@Suppress("unused")
|
||||
object UnlockSubscriptionPatch : BytecodePatch(setOf(GetSubscribedFingerprint)) {
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package app.revanced.patches.tumblr.annoyances.popups.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
// This method is responsible for loading and displaying the visual Layout of the Gift Message Popup.
|
||||
internal object ShowGiftMessagePopupFingerprint : MethodFingerprint(
|
||||
strings = listOf("activity", "anchorView"),
|
||||
customFingerprint = { methodDef, _ -> methodDef.definingClass.endsWith("GiftMessagePopup;") }
|
||||
strings = listOf("activity", "anchorView", "textMessage"),
|
||||
returnType = "V",
|
||||
accessFlags = AccessFlags.FINAL or AccessFlags.PUBLIC
|
||||
)
|
||||
@@ -28,6 +28,9 @@ object OverrideFeatureFlagsPatch : BytecodePatch(
|
||||
internal lateinit var addOverride: (name: String, value: String) -> Unit private set
|
||||
|
||||
override fun execute(context: BytecodeContext) = GetFeatureValueFingerprint.result?.let {
|
||||
val configurationClass = it.method.definingClass
|
||||
val featureClass = it.method.parameterTypes[0].toString()
|
||||
|
||||
// The method we want to inject into does not have enough registers, so we inject a helper method
|
||||
// and inject more instructions into it later, see addOverride.
|
||||
// This is not in an integration since the unused variable would get compiled away and the method would
|
||||
@@ -35,7 +38,7 @@ object OverrideFeatureFlagsPatch : BytecodePatch(
|
||||
val helperMethod = ImmutableMethod(
|
||||
it.method.definingClass,
|
||||
"getValueOverride",
|
||||
listOf(ImmutableMethodParameter("Lcom/tumblr/configuration/Feature;", null, "feature")),
|
||||
listOf(ImmutableMethodParameter(featureClass, null, "feature")),
|
||||
"Ljava/lang/String;",
|
||||
AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||
null,
|
||||
@@ -50,7 +53,7 @@ object OverrideFeatureFlagsPatch : BytecodePatch(
|
||||
0,
|
||||
"""
|
||||
# toString() the enum value
|
||||
invoke-virtual {p1}, Lcom/tumblr/configuration/Feature;->toString()Ljava/lang/String;
|
||||
invoke-virtual {p1}, $featureClass->toString()Ljava/lang/String;
|
||||
move-result-object v0
|
||||
|
||||
# !!! If you add more instructions above this line, update helperInsertIndex below!
|
||||
@@ -75,7 +78,7 @@ object OverrideFeatureFlagsPatch : BytecodePatch(
|
||||
getFeatureIndex,
|
||||
"""
|
||||
# Call the Helper Method with the Feature
|
||||
invoke-virtual {p0, p1}, Lcom/tumblr/configuration/Configuration;->getValueOverride(Lcom/tumblr/configuration/Feature;)Ljava/lang/String;
|
||||
invoke-virtual {p0, p1}, $configurationClass->getValueOverride($featureClass)Ljava/lang/String;
|
||||
move-result-object v0
|
||||
# If it returned null, skip
|
||||
if-eqz v0, :is_null
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package app.revanced.patches.tumblr.featureflags.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
|
||||
|
||||
// This fingerprint targets the method to get the value of a Feature in the class "com.tumblr.configuration.Feature".
|
||||
@@ -19,5 +21,7 @@ internal object GetFeatureValueFingerprint : MethodFingerprint(
|
||||
Opcode.INVOKE_STATIC,
|
||||
Opcode.MOVE_RESULT
|
||||
),
|
||||
customFingerprint = { method, _ -> method.definingClass == "Lcom/tumblr/configuration/Configuration;" }
|
||||
returnType = "Ljava/lang/String;",
|
||||
parameters = listOf("L", "Z"),
|
||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL
|
||||
)
|
||||
@@ -0,0 +1,67 @@
|
||||
package app.revanced.patches.tumblr.fixes
|
||||
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patches.tumblr.fixes.fingerprints.AddQueryParamFingerprint
|
||||
import app.revanced.patches.tumblr.fixes.fingerprints.HttpPathParserFingerprint
|
||||
import app.revanced.util.exception
|
||||
|
||||
@Patch(
|
||||
name = "Fix old versions",
|
||||
description = "Fixes old versions of the app (v33.2 and earlier) breaking due to Tumblr removing remnants of Tumblr" +
|
||||
" Live from the API, which causes many requests to fail. This patch has no effect on newer versions of the app.",
|
||||
compatiblePackages = [CompatiblePackage("com.tumblr")],
|
||||
use = false,
|
||||
)
|
||||
@Suppress("unused")
|
||||
object FixOldVersionsPatch : BytecodePatch(
|
||||
setOf(HttpPathParserFingerprint, AddQueryParamFingerprint),
|
||||
) {
|
||||
override fun execute(context: BytecodeContext) {
|
||||
val liveQueryParameters = listOf(
|
||||
",?live_now",
|
||||
",?live_streaming_user_id",
|
||||
)
|
||||
|
||||
HttpPathParserFingerprint.result?.let {
|
||||
val endIndex = it.scanResult.patternScanResult!!.endIndex
|
||||
// Remove the live query parameters from the path when it's specified via a @METHOD annotation.
|
||||
for (liveQueryParameter in liveQueryParameters) {
|
||||
it.mutableMethod.addInstructions(
|
||||
endIndex + 1,
|
||||
"""
|
||||
# urlPath = urlPath.replace(liveQueryParameter, "")
|
||||
const-string p1, "$liveQueryParameter"
|
||||
const-string p3, ""
|
||||
invoke-virtual {p2, p1, p3}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
|
||||
move-result-object p2
|
||||
""",
|
||||
)
|
||||
}
|
||||
} ?: throw HttpPathParserFingerprint.exception
|
||||
|
||||
AddQueryParamFingerprint.result?.let {
|
||||
// Remove the live query parameters when passed via a parameter which has the @Query annotation.
|
||||
// e.g. an API call could be defined like this:
|
||||
// @GET("api/me/info")
|
||||
// ApiResponse getCurrentUserInfo(@Query("fields[blog]") String value)
|
||||
// which would result in the path "api/me/inf0?fields[blog]=${value}"
|
||||
// Here we make sure that this value doesn't contain the broken query parameters.
|
||||
for (liveQueryParameter in liveQueryParameters) {
|
||||
it.mutableMethod.addInstructions(
|
||||
0,
|
||||
"""
|
||||
# queryParameterValue = queryParameterValue.replace(liveQueryParameter, "")
|
||||
const-string v0, "$liveQueryParameter"
|
||||
const-string v1, ""
|
||||
invoke-virtual {p2, v0, v1}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
|
||||
move-result-object p2
|
||||
""",
|
||||
)
|
||||
}
|
||||
} ?: throw AddQueryParamFingerprint.exception
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package app.revanced.patches.tumblr.fixes.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||
|
||||
// Fingerprint for the addQueryParam method from retrofit2
|
||||
// https://github.com/square/retrofit/blob/trunk/retrofit/src/main/java/retrofit2/RequestBuilder.java#L186
|
||||
// Injecting here allows modifying dynamically set query parameters
|
||||
internal object AddQueryParamFingerprint : MethodFingerprint(
|
||||
strings = listOf("Malformed URL. Base: ", ", Relative: "),
|
||||
parameters = listOf("Ljava/lang/String;", "Ljava/lang/String;", "Z"),
|
||||
)
|
||||
@@ -0,0 +1,15 @@
|
||||
package app.revanced.patches.tumblr.fixes.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
// Fingerprint for the parseHttpMethodAndPath method from retrofit2
|
||||
// https://github.com/square/retrofit/blob/ebf87b10997e2136af4d335276fa950221852c64/retrofit/src/main/java/retrofit2/RequestFactory.java#L270-L302
|
||||
// Injecting here allows modifying the path/query params of API endpoints defined via annotations
|
||||
internal object HttpPathParserFingerprint : MethodFingerprint(
|
||||
strings = listOf("Only one HTTP method is allowed. Found: %s and %s."),
|
||||
opcodes = listOf(
|
||||
Opcode.IPUT_OBJECT,
|
||||
Opcode.IPUT_BOOLEAN,
|
||||
),
|
||||
)
|
||||
@@ -8,11 +8,11 @@ import app.revanced.patches.tumblr.featureflags.OverrideFeatureFlagsPatch
|
||||
import app.revanced.patches.tumblr.timelinefilter.TimelineFilterPatch
|
||||
|
||||
@Patch(
|
||||
name = "Disable Tumblr Live",
|
||||
description = "Disable the Tumblr Live tab button and dashboard carousel.",
|
||||
dependencies = [OverrideFeatureFlagsPatch::class, TimelineFilterPatch::class],
|
||||
compatiblePackages = [CompatiblePackage("com.tumblr")],
|
||||
)
|
||||
@Deprecated("Tumblr Live was removed and is no longer served in the feed, making this patch useless.")
|
||||
@Suppress("unused")
|
||||
object DisableTumblrLivePatch : BytecodePatch(emptySet()) {
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package app.revanced.patches.twitter.misc.links
|
||||
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patches.twitter.misc.links.fingerprints.SanitizeSharingLinksFingerprint
|
||||
import app.revanced.util.exception
|
||||
|
||||
@Patch(
|
||||
name = "Sanitize sharing links",
|
||||
description = "Removes the tracking query parameters from links before they are shared.",
|
||||
compatiblePackages = [CompatiblePackage("com.twitter.android")],
|
||||
)
|
||||
object SanitizeSharingLinksPatch : BytecodePatch(
|
||||
setOf(SanitizeSharingLinksFingerprint),
|
||||
) {
|
||||
override fun execute(context: BytecodeContext) {
|
||||
SanitizeSharingLinksFingerprint.result?.mutableMethod?.addInstructions(
|
||||
0,
|
||||
"""
|
||||
# Method takes in a link (string, param 0) and then appends the tracking query params,
|
||||
# so all we need to do is return back the passed-in string
|
||||
return-object p0
|
||||
""",
|
||||
) ?: throw SanitizeSharingLinksFingerprint.exception
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package app.revanced.patches.twitter.misc.links.fingerprints
|
||||
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||
|
||||
internal object SanitizeSharingLinksFingerprint : MethodFingerprint(
|
||||
strings = listOf("<this>", "shareParam", "sessionToken"),
|
||||
returnType = "Ljava/lang/String;",
|
||||
)
|
||||
@@ -1,73 +1,13 @@
|
||||
package app.revanced.patches.youtube.layout.hide.breakingnews
|
||||
|
||||
import app.revanced.util.exception
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patches.youtube.layout.hide.breakingnews.fingerprints.BreakingNewsFingerprint
|
||||
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import app.revanced.patches.youtube.layout.hide.general.HideLayoutComponentsPatch
|
||||
|
||||
@Patch(
|
||||
name = "Hide breaking news shelf",
|
||||
description = "Adds an option to hide the breaking news shelf on the homepage tab.",
|
||||
dependencies = [
|
||||
IntegrationsPatch::class,
|
||||
BreakingNewsResourcePatch::class
|
||||
],
|
||||
compatiblePackages = [
|
||||
CompatiblePackage(
|
||||
"com.google.android.youtube",
|
||||
[
|
||||
"18.32.39",
|
||||
"18.37.36",
|
||||
"18.38.44",
|
||||
"18.43.45",
|
||||
"18.44.41",
|
||||
"18.45.43",
|
||||
"18.48.39",
|
||||
"18.49.37",
|
||||
"19.01.34",
|
||||
"19.02.39",
|
||||
"19.03.36",
|
||||
"19.04.38",
|
||||
"19.05.36",
|
||||
"19.06.39",
|
||||
"19.07.40",
|
||||
"19.08.36",
|
||||
"19.09.37"
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
@Suppress("unused")
|
||||
@Deprecated("This patch has been merged to HideLayoutComponentsPatch.")
|
||||
object BreakingNewsPatch : BytecodePatch(
|
||||
setOf(BreakingNewsFingerprint)
|
||||
dependencies = setOf(HideLayoutComponentsPatch::class),
|
||||
) {
|
||||
override fun execute(context: BytecodeContext) {
|
||||
BreakingNewsFingerprint.result?.let {
|
||||
val insertIndex = it.scanResult.patternScanResult!!.endIndex - 1
|
||||
val moveResultIndex = insertIndex - 1
|
||||
|
||||
it.mutableMethod.apply {
|
||||
val breakingNewsViewRegister =
|
||||
getInstruction<OneRegisterInstruction>(moveResultIndex).registerA
|
||||
|
||||
addInstruction(
|
||||
insertIndex,
|
||||
"""
|
||||
invoke-static {v$breakingNewsViewRegister},
|
||||
Lapp/revanced/integrations/youtube/patches/HideBreakingNewsPatch;
|
||||
->
|
||||
hideBreakingNews(Landroid/view/View;)V
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
} ?: throw BreakingNewsFingerprint.exception
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
package app.revanced.patches.youtube.layout.hide.breakingnews
|
||||
|
||||
import app.revanced.patcher.data.ResourceContext
|
||||
import app.revanced.patcher.patch.ResourcePatch
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patches.all.misc.resources.AddResourcesPatch
|
||||
import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||
|
||||
@Patch(
|
||||
dependencies = [
|
||||
SettingsPatch::class,
|
||||
ResourceMappingPatch::class,
|
||||
AddResourcesPatch::class
|
||||
],
|
||||
)
|
||||
internal object BreakingNewsResourcePatch : ResourcePatch() {
|
||||
internal var horizontalCardListId: Long = -1
|
||||
|
||||
override fun execute(context: ResourceContext) {
|
||||
AddResourcesPatch(this::class)
|
||||
|
||||
SettingsPatch.PreferenceScreen.FEED.addPreferences(
|
||||
SwitchPreference("revanced_hide_breaking_news")
|
||||
)
|
||||
|
||||
horizontalCardListId = ResourceMappingPatch.resourceMappings.single {
|
||||
it.type == "layout" && it.name == "horizontal_card_list"
|
||||
}.id
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package app.revanced.patches.youtube.layout.hide.breakingnews.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patches.youtube.layout.hide.breakingnews.BreakingNewsResourcePatch
|
||||
import app.revanced.util.patch.LiteralValueFingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal object BreakingNewsFingerprint : LiteralValueFingerprint(
|
||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
|
||||
opcodes = listOf(
|
||||
Opcode.CONST,
|
||||
Opcode.CONST_4,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.CHECK_CAST,
|
||||
Opcode.IPUT_OBJECT,
|
||||
),
|
||||
literalSupplier = { BreakingNewsResourcePatch.horizontalCardListId }
|
||||
)
|
||||
@@ -55,9 +55,10 @@ object CommentsPatch : ResourcePatch() {
|
||||
PreferenceScreen(
|
||||
"revanced_comments_screen",
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_hide_comments_section"),
|
||||
SwitchPreference("revanced_hide_preview_comment")
|
||||
)
|
||||
SwitchPreference("revanced_hide_preview_comment"),
|
||||
SwitchPreference("revanced_hide_comments_section")
|
||||
),
|
||||
sorting = PreferenceScreen.Sorting.UNSORTED
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package app.revanced.patches.youtube.layout.hide.general
|
||||
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
@@ -17,16 +18,17 @@ import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.TextPreference
|
||||
import app.revanced.patches.youtube.layout.hide.general.fingerprints.HideShowMoreButtonFingerprint
|
||||
import app.revanced.patches.youtube.layout.hide.general.fingerprints.ParseElementFromBufferFingerprint
|
||||
import app.revanced.patches.youtube.layout.hide.general.fingerprints.PlayerOverlayFingerprint
|
||||
import app.revanced.patches.youtube.layout.hide.general.fingerprints.ShowWatermarkFingerprint
|
||||
import app.revanced.patches.youtube.misc.litho.filter.LithoFilterPatch
|
||||
import app.revanced.patches.youtube.misc.navigation.NavigationBarHookPatch
|
||||
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
|
||||
import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||
import app.revanced.util.resultOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
|
||||
@Patch(
|
||||
@@ -36,8 +38,8 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
LithoFilterPatch::class,
|
||||
SettingsPatch::class,
|
||||
AddResourcesPatch::class,
|
||||
HideLayoutComponentsResourcePatch::class,
|
||||
NavigationBarHookPatch::class,
|
||||
PlayerTypeHookPatch::class // Used by Keyword Content filter.
|
||||
],
|
||||
compatiblePackages = [
|
||||
CompatiblePackage(
|
||||
@@ -66,7 +68,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
)
|
||||
@Suppress("unused")
|
||||
object HideLayoutComponentsPatch : BytecodePatch(
|
||||
setOf(ParseElementFromBufferFingerprint, PlayerOverlayFingerprint),
|
||||
setOf(ParseElementFromBufferFingerprint, PlayerOverlayFingerprint, HideShowMoreButtonFingerprint),
|
||||
) {
|
||||
private const val LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/integrations/youtube/patches/components/LayoutComponentsFilter;"
|
||||
@@ -115,6 +117,7 @@ object HideLayoutComponentsPatch : BytecodePatch(
|
||||
SwitchPreference("revanced_hide_compact_banner"),
|
||||
SwitchPreference("revanced_hide_feed_survey"),
|
||||
SwitchPreference("revanced_hide_for_you_shelf"),
|
||||
SwitchPreference("revanced_hide_horizontal_shelves"),
|
||||
SwitchPreference("revanced_hide_image_shelf"),
|
||||
SwitchPreference("revanced_hide_latest_posts_ads"),
|
||||
SwitchPreference("revanced_hide_mix_playlists"),
|
||||
@@ -122,9 +125,7 @@ object HideLayoutComponentsPatch : BytecodePatch(
|
||||
SwitchPreference("revanced_hide_notify_me_button"),
|
||||
SwitchPreference("revanced_hide_search_result_recommendations"),
|
||||
SwitchPreference("revanced_hide_search_result_shelf_header"),
|
||||
)
|
||||
|
||||
SettingsPatch.PreferenceScreen.FEED.addPreferences(
|
||||
SwitchPreference("revanced_hide_show_more_button"),
|
||||
PreferenceScreen(
|
||||
key = "revanced_hide_keyword_content_screen",
|
||||
sorting = Sorting.UNSORTED,
|
||||
@@ -133,9 +134,9 @@ object HideLayoutComponentsPatch : BytecodePatch(
|
||||
SwitchPreference("revanced_hide_keyword_content_subscriptions"),
|
||||
SwitchPreference("revanced_hide_keyword_content_search"),
|
||||
TextPreference("revanced_hide_keyword_content_phrases", inputType = InputType.TEXT_MULTI_LINE),
|
||||
NonInteractivePreference("revanced_hide_keyword_content_about")
|
||||
)
|
||||
)
|
||||
NonInteractivePreference("revanced_hide_keyword_content_about"),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
||||
@@ -203,5 +204,24 @@ object HideLayoutComponentsPatch : BytecodePatch(
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Show more button
|
||||
|
||||
HideShowMoreButtonFingerprint.resultOrThrow().let {
|
||||
it.mutableMethod.apply {
|
||||
val moveRegisterIndex = it.scanResult.patternScanResult!!.endIndex
|
||||
val viewRegister =
|
||||
getInstruction<OneRegisterInstruction>(moveRegisterIndex).registerA
|
||||
|
||||
val insertIndex = moveRegisterIndex + 1
|
||||
addInstruction(
|
||||
insertIndex,
|
||||
"invoke-static { v$viewRegister }, " +
|
||||
"$LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR->hideShowMoreButton(Landroid/view/View;)V",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.layout.hide.loadmorebutton
|
||||
package app.revanced.patches.youtube.layout.hide.general
|
||||
|
||||
import app.revanced.patcher.data.ResourceContext
|
||||
import app.revanced.patcher.patch.ResourcePatch
|
||||
@@ -15,16 +15,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||
AddResourcesPatch::class
|
||||
]
|
||||
)
|
||||
internal object HideLoadMoreButtonResourcePatch : ResourcePatch() {
|
||||
internal object HideLayoutComponentsResourcePatch : ResourcePatch() {
|
||||
internal var expandButtonDownId: Long = -1
|
||||
|
||||
override fun execute(context: ResourceContext) {
|
||||
AddResourcesPatch(this::class)
|
||||
|
||||
SettingsPatch.PreferenceScreen.FEED.addPreferences(
|
||||
SwitchPreference("revanced_hide_load_more_button")
|
||||
)
|
||||
|
||||
expandButtonDownId = ResourceMappingPatch.resourceMappings.single {
|
||||
it.type == "layout" && it.name == "expand_button_down"
|
||||
}.id
|
||||
@@ -0,0 +1,15 @@
|
||||
package app.revanced.patches.youtube.layout.hide.general.fingerprints
|
||||
|
||||
import app.revanced.patches.youtube.layout.hide.general.HideLayoutComponentsResourcePatch
|
||||
import app.revanced.util.patch.LiteralValueFingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal object HideShowMoreButtonFingerprint : LiteralValueFingerprint(
|
||||
opcodes = listOf(
|
||||
Opcode.CONST,
|
||||
Opcode.CONST_4,
|
||||
Opcode.INVOKE_STATIC,
|
||||
Opcode.MOVE_RESULT_OBJECT
|
||||
),
|
||||
literalSupplier = { HideLayoutComponentsResourcePatch.expandButtonDownId }
|
||||
)
|
||||
@@ -1,65 +1,12 @@
|
||||
package app.revanced.patches.youtube.layout.hide.loadmorebutton
|
||||
|
||||
import app.revanced.util.exception
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patches.youtube.layout.hide.loadmorebutton.fingerprints.HideLoadMoreButtonFingerprint
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import app.revanced.patches.youtube.layout.hide.general.HideLayoutComponentsPatch
|
||||
|
||||
@Patch(
|
||||
name = "Hide \'Load more\' button",
|
||||
description = "Adds an option to hide the button under videos that loads similar videos.",
|
||||
dependencies = [HideLoadMoreButtonResourcePatch::class],
|
||||
compatiblePackages = [
|
||||
CompatiblePackage(
|
||||
"com.google.android.youtube",
|
||||
[
|
||||
"18.32.39",
|
||||
"18.37.36",
|
||||
"18.38.44",
|
||||
"18.43.45",
|
||||
"18.44.41",
|
||||
"18.45.43",
|
||||
"18.48.39",
|
||||
"18.49.37",
|
||||
"19.01.34",
|
||||
"19.02.39",
|
||||
"19.03.36",
|
||||
"19.04.38",
|
||||
"19.05.36",
|
||||
"19.06.39",
|
||||
"19.07.40",
|
||||
"19.08.36",
|
||||
"19.09.37"
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
@Suppress("unused")
|
||||
@Deprecated("This patch class has been merged into HideLayoutComponentsPatch.")
|
||||
object HideLoadMoreButtonPatch : BytecodePatch(
|
||||
setOf(HideLoadMoreButtonFingerprint)
|
||||
dependencies = setOf(HideLayoutComponentsPatch::class)
|
||||
) {
|
||||
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/integrations/youtube/patches/HideLoadMoreButtonPatch;"
|
||||
|
||||
override fun execute(context: BytecodeContext) {
|
||||
HideLoadMoreButtonFingerprint.result?.let {
|
||||
it.mutableMethod.apply {
|
||||
val moveRegisterIndex = it.scanResult.patternScanResult!!.endIndex
|
||||
val viewRegister =
|
||||
getInstruction<OneRegisterInstruction>(moveRegisterIndex).registerA
|
||||
|
||||
val insertIndex = moveRegisterIndex + 1
|
||||
addInstruction(
|
||||
insertIndex,
|
||||
"invoke-static { v$viewRegister }, " +
|
||||
"$INTEGRATIONS_CLASS_DESCRIPTOR->hideLoadMoreButton(Landroid/view/View;)V"
|
||||
)
|
||||
}
|
||||
} ?: throw HideLoadMoreButtonFingerprint.exception
|
||||
}
|
||||
}
|
||||
override fun execute(context: BytecodeContext) {}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package app.revanced.patches.youtube.layout.hide.loadmorebutton.fingerprints
|
||||
|
||||
import app.revanced.patches.youtube.layout.hide.loadmorebutton.HideLoadMoreButtonResourcePatch
|
||||
import app.revanced.util.patch.LiteralValueFingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal object HideLoadMoreButtonFingerprint : LiteralValueFingerprint(
|
||||
opcodes = listOf(
|
||||
Opcode.CONST,
|
||||
Opcode.CONST_4,
|
||||
Opcode.INVOKE_STATIC,
|
||||
Opcode.MOVE_RESULT_OBJECT
|
||||
),
|
||||
literalSupplier = { HideLoadMoreButtonResourcePatch.expandButtonDownId }
|
||||
)
|
||||
@@ -46,7 +46,6 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||
)
|
||||
@Suppress("unused")
|
||||
object HidePlayerFlyoutMenuPatch : ResourcePatch() {
|
||||
private const val KEY = "revanced_hide_player_flyout"
|
||||
|
||||
private const val FILTER_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/integrations/youtube/patches/components/PlayerFlyoutMenuItemsFilter;"
|
||||
@@ -55,21 +54,22 @@ object HidePlayerFlyoutMenuPatch : ResourcePatch() {
|
||||
AddResourcesPatch(this::class)
|
||||
|
||||
SettingsPatch.PreferenceScreen.PLAYER.addPreferences(
|
||||
PreferenceScreen(
|
||||
key = KEY,
|
||||
preferences = setOf(
|
||||
SwitchPreference("${KEY}_captions"),
|
||||
SwitchPreference("${KEY}_additional_settings"),
|
||||
SwitchPreference("${KEY}_loop_video"),
|
||||
SwitchPreference("${KEY}_ambient_mode"),
|
||||
SwitchPreference("${KEY}_report"),
|
||||
SwitchPreference("${KEY}_help"),
|
||||
SwitchPreference("${KEY}_speed"),
|
||||
SwitchPreference("${KEY}_more_info"),
|
||||
SwitchPreference("${KEY}_audio_track"),
|
||||
SwitchPreference("${KEY}_watch_in_vr"),
|
||||
),
|
||||
)
|
||||
PreferenceScreen(
|
||||
key = "revanced_hide_player_flyout",
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_hide_player_flyout_captions"),
|
||||
SwitchPreference("revanced_hide_player_flyout_additional_settings"),
|
||||
SwitchPreference("revanced_hide_player_flyout_loop_video"),
|
||||
SwitchPreference("revanced_hide_player_flyout_ambient_mode"),
|
||||
SwitchPreference("revanced_hide_player_flyout_report"),
|
||||
SwitchPreference("revanced_hide_player_flyout_help"),
|
||||
SwitchPreference("revanced_hide_player_flyout_speed"),
|
||||
SwitchPreference("revanced_hide_player_flyout_lock_screen"),
|
||||
SwitchPreference("revanced_hide_player_flyout_more_info"),
|
||||
SwitchPreference("revanced_hide_player_flyout_audio_track"),
|
||||
SwitchPreference("revanced_hide_player_flyout_watch_in_vr"),
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
|
||||
|
||||
@@ -15,7 +15,6 @@ import app.revanced.patches.youtube.layout.hide.shorts.fingerprints.*
|
||||
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||
import app.revanced.patches.youtube.misc.litho.filter.LithoFilterPatch
|
||||
import app.revanced.patches.youtube.misc.navigation.NavigationBarHookPatch
|
||||
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
@@ -28,8 +27,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
LithoFilterPatch::class,
|
||||
HideShortsComponentsResourcePatch::class,
|
||||
ResourceMappingPatch::class,
|
||||
NavigationBarHookPatch::class,
|
||||
PlayerTypeHookPatch::class
|
||||
NavigationBarHookPatch::class
|
||||
],
|
||||
compatiblePackages = [
|
||||
CompatiblePackage(
|
||||
|
||||
@@ -23,7 +23,6 @@ import app.revanced.patches.youtube.layout.thumbnails.fingerprints.cronet.reques
|
||||
import app.revanced.patches.youtube.layout.thumbnails.fingerprints.cronet.request.callback.OnSucceededFingerprint
|
||||
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||
import app.revanced.patches.youtube.misc.navigation.NavigationBarHookPatch
|
||||
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
|
||||
import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||
import app.revanced.util.resultOrThrow
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
@@ -40,8 +39,7 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
IntegrationsPatch::class,
|
||||
SettingsPatch::class,
|
||||
AddResourcesPatch::class,
|
||||
NavigationBarHookPatch::class,
|
||||
PlayerTypeHookPatch::class
|
||||
NavigationBarHookPatch::class
|
||||
],
|
||||
compatiblePackages = [
|
||||
CompatiblePackage(
|
||||
|
||||
@@ -10,6 +10,7 @@ import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||
import app.revanced.patches.youtube.misc.navigation.fingerprints.*
|
||||
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import app.revanced.util.resultOrThrow
|
||||
@@ -25,6 +26,7 @@ import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
dependencies = [
|
||||
IntegrationsPatch::class,
|
||||
NavigationBarHookResourcePatch::class,
|
||||
PlayerTypeHookPatch::class // Required to detect the search bar in all situations.
|
||||
],
|
||||
)
|
||||
@Suppress("unused")
|
||||
|
||||
@@ -1,3 +1,31 @@
|
||||
<!--
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="misc.settings.BaseSettingsResourcePatch">
|
||||
@@ -13,12 +41,13 @@
|
||||
<string name="revanced_settings_import_failure_parse">Import failed: %s</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
|
||||
<string name="gms_core_toast_not_installed_message">GmsCore is not installed. Install it.</string>
|
||||
<string name="gms_core_toast_not_whitelisted_message">Follow the \"Don\'t kill my app\" guide for GmsCore.</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore is not installed. Install it.</string>
|
||||
<string name="gms_core_dialog_title">Action needed</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">GmsCore is not whitelisted from battery optimization.\n\nFollow the \"Don\'t kill my app\" guide for GmsCore.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">GmsCore does not have permission to run in the background.\n\nFollow the \"Don\'t kill my app\" guide for GmsCore.</string>
|
||||
<string name="gms_core_dialog_ok_button_text">Open website</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore does not have permission to run in the background.\n\nFollow the \"Don\'t kill my app\" guide for your phone, and apply the instructions to your MicroG installation.\n\nThis is required for the app to work.</string>
|
||||
<string name="gms_core_dialog_open_website_text">Open website</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">MicroG GmsCore battery optimizations must be disabled to prevent issues.\n\nTap on the continue button and disable battery optimizations.</string>
|
||||
<string name="gms_core_dialog_continue_text">Continue</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
@@ -60,24 +89,38 @@
|
||||
<string name="revanced_hide_gray_separator_title">Hide gray separator</string>
|
||||
<string name="revanced_hide_gray_separator_summary_on">Gray separators are hidden</string>
|
||||
<string name="revanced_hide_gray_separator_summary_off">Gray separators are shown</string>
|
||||
<string name="revanced_hide_join_membership_button_title">Hide \'Join\' button</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Button is hidden</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Button is shown</string>
|
||||
<string name="revanced_hide_channel_watermark_title">Hide channel watermark</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Watermark is hidden</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Watermark is shown</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Hide horizontal shelves</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Shelves are hidden such as:\n• Breaking news\n• Continue watching\n• Explore more channels\n• Shopping\n• Watch it Again</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Shelves are shown</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Hide \'Join\' button</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Button is hidden</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Button is shown</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Hide \'For you\' shelf in channel page</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Shelf is hidden</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Shelf is shown</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">Hide \'Notify me\' button</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Button is hidden</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Button is shown</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Hide timed reactions</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Timed reactions are hidden</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Timed reactions are shown</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Hide \'People also watched\' recommendations</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Recommendations are hidden</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Recommendations are shown</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Hide \'Show more\' button</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Button is hidden</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Button is shown</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Hide timed reactions</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Timed reactions are hidden</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Timed reactions are shown</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">Hide search result shelf header</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">Shelf header is hidden</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">Shelf header is shown</string>
|
||||
@@ -170,6 +213,7 @@
|
||||
<string name="revanced_custom_filter_summary_on">Custom filter is enabled</string>
|
||||
<string name="revanced_custom_filter_summary_off">Custom filter is disabled</string>
|
||||
<string name="revanced_custom_filter_strings_title">Custom filter</string>
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">List of component path builder strings to filter separated by new line</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Invalid custom filter: %s</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Hide keyword content</string>
|
||||
@@ -184,11 +228,13 @@
|
||||
<string name="revanced_hide_keyword_content_search_summary_on">Search results are filtered by keywords</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_off">Search results are not filtered by keywords</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Keywords to hide</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Keywords and phrases to hide, separated by new lines\n\nWords with uppercase letters in the middle must be entered with the casing (ie: iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">About keyword filtering</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Home/Subscription/Search results are filtered to hide content that matches keyword phrases\n\nLimitations\n• Some Shorts may not be hidden\n• Some UI components may not be hidden\n• Searching for a keyword may show no results</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_common" formatted="false">Invalid keyword. Cannot use: \'%s\' as a filter</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_length" formatted="false">Invalid keyword. \'%s\' is less than %s characters</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_common">Invalid keyword. Cannot use: \'%s\' as a filter</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_length">Invalid keyword. \'%1$s\' is less than %2$d characters</string>
|
||||
</patch>
|
||||
<patch id="ad.general.HideAdsResourcePatch">
|
||||
<string name="revanced_hide_general_ads_title">Hide general ads</string>
|
||||
@@ -197,7 +243,7 @@
|
||||
<string name="revanced_hide_fullscreen_ads_title">Hide fullscreen ads</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Fullscreen ads are hidden</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Fullscreen ads are shown</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Hide buttoned ad</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Hide buttoned ads</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Buttoned ads are hidden</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_off">Buttoned ads are shown</string>
|
||||
<string name="revanced_hide_paid_content_ads_title">Hide paid content</string>
|
||||
@@ -218,7 +264,7 @@
|
||||
<string name="revanced_hide_merchandise_banners_title">Hide merchandise banners</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_on">Merchandise banners are hidden</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_off">Merchandise banners are shown</string>
|
||||
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Failed to hide full-screen ad. Disabling to prevent issues</string>
|
||||
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Could not hide fullscreen ad. Hide setting disabled to prevent issues.</string>
|
||||
</patch>
|
||||
<patch id="ad.getpremium.HideGetPremiumPatch">
|
||||
<string name="revanced_hide_get_premium_title">Hide YouTube Premium promotions</string>
|
||||
@@ -252,6 +298,7 @@
|
||||
<string name="revanced_external_downloader_title">Show external download button</string>
|
||||
<string name="revanced_external_downloader_summary_on">Download button shown in player</string>
|
||||
<string name="revanced_external_downloader_summary_off">Download button not shown in player</string>
|
||||
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
|
||||
<string name="revanced_external_downloader_action_button_title">Override download action button</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">Download button opens your external downloader</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_off">Download button opens the native in-app downloader</string>
|
||||
@@ -305,27 +352,37 @@
|
||||
<string name="revanced_hide_like_dislike_button_title">Hide Like and Dislike</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Like and Dislike buttons are hidden</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Like and Dislike buttons are shown</string>
|
||||
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_share_button_title">Hide Share</string>
|
||||
<string name="revanced_hide_share_button_summary_on">Share button is hidden</string>
|
||||
<string name="revanced_hide_share_button_summary_off">Share button is shown</string>
|
||||
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears only on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">Hide Report</string>
|
||||
<string name="revanced_hide_report_button_summary_on">Report button is hidden</string>
|
||||
<string name="revanced_hide_report_button_summary_off">Report button is shown</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_remix_button_title">Hide Remix</string>
|
||||
<string name="revanced_hide_remix_button_summary_on">Remix button is hidden</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">Remix button is shown</string>
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_download_button_title">Hide Download</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Download button is hidden</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Download button is shown</string>
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_thanks_button_title">Hide Thanks</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Thanks button is hidden</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Thanks button is shown</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Hide Clip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Clip button is hidden</string>
|
||||
<string name="revanced_hide_clip_button_summary_off">Clip button is shown</string>
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_playlist_button_title">Hide Save to playlist</string>
|
||||
<string name="revanced_hide_playlist_button_summary_on">Save to playlist button is hidden</string>
|
||||
<string name="revanced_hide_playlist_button_summary_off">Save to playlist button is shown</string>
|
||||
<!-- 'Shop' should be translated with the same localized wording that YouTube displays.
|
||||
Shop button appears only for some videos in certain regions. Translate the button name normally if this menu is never shown. -->
|
||||
<string name="revanced_hide_shop_button_title">Hide Shop</string>
|
||||
<string name="revanced_hide_shop_button_summary_on">Shop button is hidden</string>
|
||||
<string name="revanced_hide_shop_button_summary_off">Shop button is shown</string>
|
||||
@@ -336,6 +393,7 @@
|
||||
<string name="revanced_hide_autoplay_button_summary_off">Autoplay button is shown</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.captions.HideCaptionsButtonPatch">
|
||||
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
|
||||
<string name="revanced_hide_captions_button_title">Hide captions button</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">Captions button is hidden</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">Captions button is shown</string>
|
||||
@@ -348,18 +406,23 @@
|
||||
<patch id="layout.buttons.navigation.NavigationButtonsPatch">
|
||||
<string name="revanced_navigation_buttons_screen_title">Navigation buttons</string>
|
||||
<string name="revanced_navigation_buttons_screen_summary">Hide or change buttons in the navigation bar</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
|
||||
<string name="revanced_hide_home_button_title">Hide Home</string>
|
||||
<string name="revanced_hide_home_button_summary_on">Home button is hidden</string>
|
||||
<string name="revanced_hide_home_button_summary_off">Home button is shown</string>
|
||||
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_shorts_button_title">Hide Shorts</string>
|
||||
<string name="revanced_hide_shorts_button_summary_on">Shorts button is hidden</string>
|
||||
<string name="revanced_hide_shorts_button_summary_off">Shorts button is shown</string>
|
||||
<!-- The Create button has no display name. Translate normally. -->
|
||||
<string name="revanced_hide_create_button_title">Hide Create</string>
|
||||
<string name="revanced_hide_create_button_summary_on">Create button is hidden</string>
|
||||
<string name="revanced_hide_create_button_summary_off">Create button is shown</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_subscriptions_button_title">Hide Subscriptions</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Subscriptions button is hidden</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Subscriptions button is shown</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Switch Create with Notifications</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Create button is switched with Notifications button</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Create button is not switched with Notifications button</string>
|
||||
@@ -367,33 +430,49 @@
|
||||
<patch id="layout.hide.player.flyoutmenupanel.HidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">Flyout menu</string>
|
||||
<string name="revanced_hide_player_flyout_summary">Hide or show player flyout menu items</string>
|
||||
<!-- 'Captions' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_captions_title">Hide Captions</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_on">Captions menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_off">Captions menu is shown</string>
|
||||
<!-- 'Additional settings' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_additional_settings_title">Hide Additional settings</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">Additional settings menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">Additional settings menu is shown</string>
|
||||
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">Hide Loop video</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">Loop video menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_off">Loop video menu is shown</string>
|
||||
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_title">Hide Ambient mode</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Ambient mode menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Ambient mode menu is shown</string>
|
||||
<!-- 'Report' should be translated using the same localized wording YouTube displays for the menu item.
|
||||
This item may not appear in some regions. Translate the name normally if the menu cannot be found. -->
|
||||
<string name="revanced_hide_player_flyout_report_title">Hide Report</string>
|
||||
<string name="revanced_hide_player_flyout_report_summary_on">Report menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_report_summary_off">Report menu is shown</string>
|
||||
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_help_title">Hide Help & feedback</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_on">Help & feedback menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_off">Help & feedback menu is shown</string>
|
||||
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_speed_title">Hide Playback speed</string>
|
||||
<string name="revanced_hide_player_flyout_speed_summary_on">Playback speed menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_speed_summary_off">Playback speed menu is shown</string>
|
||||
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
|
||||
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
|
||||
<string name="revanced_hide_player_flyout_more_info_title">Hide More info</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_summary_on">More info menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_summary_off">More info menu is shown</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_lock_screen_title">Hide Lock screen</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Lock screen menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Lock screen menu is shown</string>
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Hide Audio track</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Audio track menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Audio track menu is shown</string>
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_title">Hide Watch in VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Watch in VR menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Watch in VR menu is shown</string>
|
||||
@@ -408,20 +487,15 @@
|
||||
<string name="revanced_hide_album_cards_summary_on">Album cards are hidden</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Album cards are shown</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.breakingnews.BreakingNewsResourcePatch">
|
||||
<string name="revanced_hide_breaking_news_title">Hide breaking news</string>
|
||||
<string name="revanced_hide_breaking_news_summary_on">Breaking news are hidden</string>
|
||||
<string name="revanced_hide_breaking_news_summary_off">Breaking news are shown</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.comments.CommentsPatch">
|
||||
<string name="revanced_comments_screen_title">Comments</string>
|
||||
<string name="revanced_comments_screen_summary">Hide or show comments section components</string>
|
||||
<string name="revanced_hide_comments_section_title">Hide comments section</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Comment section is hidden</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Comment section is shown</string>
|
||||
<string name="revanced_hide_preview_comment_title">Hide preview comment</string>
|
||||
<string name="revanced_hide_preview_comment_summary_on">Preview comment is hidden</string>
|
||||
<string name="revanced_hide_preview_comment_summary_off">Preview comment is shown</string>
|
||||
<string name="revanced_hide_comments_section_title">Hide comments section</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Comment section is hidden</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Comment section is shown</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.crowdfundingbox.CrowdfundingBoxResourcePatch">
|
||||
<string name="revanced_hide_crowdfunding_box_title">Hide crowdfunding box</string>
|
||||
@@ -461,14 +535,6 @@
|
||||
<string name="revanced_hide_info_cards_summary_on">Info cards are hidden</string>
|
||||
<string name="revanced_hide_info_cards_summary_off">Info cards are shown</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.loadmorebutton.HideLoadMoreButtonResourcePatch">
|
||||
<string name="revanced_hide_load_more_button_title">Hide \'Load More\' button</string>
|
||||
<string name="revanced_hide_load_more_button_summary_on">Button is hidden</string>
|
||||
<string name="revanced_hide_load_more_button_summary_off">Button is shown</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.HidePlayerFlyoutMenuPatch">
|
||||
<string name="video_title">Video</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.rollingnumber.DisableRollingNumberAnimationPatch">
|
||||
<string name="revanced_disable_rolling_number_animations_title">Disable rolling number animations</string>
|
||||
<string name="revanced_disable_rolling_number_animations_summary_on">Rolling numbers are not animated</string>
|
||||
@@ -483,24 +549,31 @@
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">Thumbnail seekbar is shown</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.HideShortsComponentsResourcePatch">
|
||||
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">Hide Shorts in home feed</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">Shorts in home feed are hidden</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">Shorts in home feed are shown</string>
|
||||
<!-- 'subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
|
||||
<string name="revanced_hide_shorts_subscriptions_title">Hide Shorts in subscription feed</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">Shorts in subscription feed are hidden</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_off">Shorts in subscription feed are shown</string>
|
||||
<string name="revanced_hide_shorts_search_title">Hide Shorts in search results</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">Shorts in search results are hidden</string>
|
||||
<string name="revanced_hide_shorts_search_summary_off">Shorts in search results are shown</string>
|
||||
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_join_button_title">Hide join button</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Join button is hidden</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Join button is shown</string>
|
||||
<!-- 'subscribe' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_subscribe_button_title">Hide subscribe button</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_on">Subscribe button is hidden</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">Subscribe button is shown</string>
|
||||
<!-- 'subscribe' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_subscribe_button_paused_title">Hide subscribe button when paused</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_paused_summary_on">Subscribe button is hidden</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_paused_summary_off">Subscribe button is shown</string>
|
||||
<!-- 'thanks' should be translated using the same localized wording YouTube displays for the button.
|
||||
If the button never shows up, then translate the button name normally. -->
|
||||
<string name="revanced_hide_shorts_thanks_button_title">Hide thanks button</string>
|
||||
<string name="revanced_hide_shorts_thanks_button_summary_on">Thanks button is hidden</string>
|
||||
<string name="revanced_hide_shorts_thanks_button_summary_off">Thanks button is shown</string>
|
||||
@@ -513,9 +586,11 @@
|
||||
<string name="revanced_hide_shorts_comments_button_title">Hide comments button</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_on">Comments button is hidden</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_off">Comments button is shown</string>
|
||||
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_remix_button_title">Hide remix button</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_on">Remix button is hidden</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_off">Remix button is shown</string>
|
||||
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_share_button_title">Hide share button</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_on">Share button is hidden</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_off">Share button is shown</string>
|
||||
@@ -529,11 +604,11 @@
|
||||
<string name="revanced_hide_shorts_video_title_summary_on">Title is hidden</string>
|
||||
<string name="revanced_hide_shorts_video_title_summary_off">Title is shown</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_title">Hide sound metadata label</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">Label is hidden</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">Label is shown</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">Metadata label is hidden</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">Metadata label is shown</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_title">Hide full video link label</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Label is hidden</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_off">Label is shown</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Video link label is hidden</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_off">Video link label is shown</string>
|
||||
<string name="revanced_hide_shorts_sound_button_title">Hide sound button</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_on">Sound button is hidden</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_off">Sound button is shown</string>
|
||||
@@ -563,23 +638,24 @@
|
||||
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
|
||||
<string name="revanced_ryd_settings_title">Return YouTube Dislike</string>
|
||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Hidden</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">Dislikes temporarily not available (API timed out)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code" formatted="false">Dislikes not available (status %d)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">Dislikes not available (status %d)</string>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Dislikes not available (client API limit reached)</string>
|
||||
<string name="revanced_ryd_failure_generic">Dislikes not available (%s)</string>
|
||||
<!-- corner case situation, where user enables RYD while video is playing and then tries
|
||||
to vote for the video -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Reload video to vote using ReturnYouTubeDislike</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Reload video to vote using Return YouTube Dislike</string>
|
||||
<string name="revanced_ryd_enable_title">Return YouTube Dislike</string>
|
||||
<string name="revanced_ryd_enable_summary_on">Dislikes are shown</string>
|
||||
<string name="revanced_ryd_enable_summary_off">Dislikes are not shown</string>
|
||||
<string name="revanced_ryd_shorts_title">Show dislikes on Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Dislikes shown on Shorts %s</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Dislikes shown on Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Dislikes shown on Shorts\n\nLimitation: Dislikes may not appear in incognito mode</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Dislikes hidden on Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_disclaimer">Limitation: Dislikes may not appear in incognito mode</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Dislikes as percentage</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes shown as percentage</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Dislikes shown as number</string>
|
||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||
<string name="revanced_ryd_compact_layout_title">Compact like button</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>
|
||||
@@ -589,6 +665,7 @@
|
||||
<string name="revanced_ryd_about">About</string>
|
||||
<string name="revanced_ryd_attribution_title">ReturnYouTubeDislike.com</string>
|
||||
<string name="revanced_ryd_attribution_summary">Data is provided by the Return YouTube Dislike API. Tap here to learn more</string>
|
||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistics of this device</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallResponseTimeAverage_title">API response time, average</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallResponseTimeMin_title">API response time, minimum</string>
|
||||
@@ -599,8 +676,7 @@
|
||||
<string name="revanced_ryd_statistics_getFetchCallCount_zero_summary">No network calls made</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallCount_non_zero_summary">%d network calls made</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_title">API fetch votes, number of timeouts</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">No
|
||||
network calls timed out</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">No network calls timed out</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary">%d network calls timed out</string>
|
||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title">API client rate limits</string>
|
||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary">No client rate limits encountered</string>
|
||||
@@ -625,6 +701,7 @@
|
||||
<string name="revanced_sb_enable_voting">Show voting button</string>
|
||||
<string name="revanced_sb_enable_voting_sum_on">Segment voting button is shown</string>
|
||||
<string name="revanced_sb_enable_voting_sum_off">Segment voting button is not shown</string>
|
||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
||||
<string name="revanced_sb_enable_compact_skip_button">Use compact skip button</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">Skip button styled for minimum width</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Skip button styled for best appearance</string>
|
||||
@@ -658,19 +735,19 @@
|
||||
<string name="revanced_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="revanced_sb_general_skipcount_sum_off">Skip count tracking is not enabled</string>
|
||||
<string name="revanced_sb_general_min_duration">Minimum segment duration</string>
|
||||
<string name="revanced_sb_general_min_duration_sum">Segments shorter than this value (in seconds) will not be shown or skipped </string>
|
||||
<string name="revanced_sb_general_min_duration_sum">Segments shorter than this value (in seconds) will not be shown or skipped</string>
|
||||
<string name="revanced_sb_general_uuid">Your private user id</string>
|
||||
<string name="revanced_sb_general_uuid_sum">This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">Private user id must be at least 30 characters long</string>
|
||||
<string name="revanced_sb_general_api_url">Change API URL</string>
|
||||
<string name="revanced_sb_general_api_url_sum">The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing</string>
|
||||
<string name="revanced_sb_general_api_url_sum">The address SponsorBlock uses to make calls to the server</string>
|
||||
<string name="revanced_sb_api_url_reset">API URL reset</string>
|
||||
<string name="revanced_sb_api_url_invalid">API URL is invalid</string>
|
||||
<string name="revanced_sb_api_url_changed">API URL changed</string>
|
||||
<string name="revanced_sb_settings_ie">Import/Export settings</string>
|
||||
<string name="revanced_sb_settings_copy">Copy</string>
|
||||
<string name="revanced_sb_settings_ie_sum">Your SponsorBlock JSON configuration that can be imported/exported to ReVanced and other SponsorBlock platforms %s</string>
|
||||
<string name="revanced_sb_settings_ie_sum_warning">This includes your private user id. Be sure to share this wisely</string>
|
||||
<string name="revanced_sb_settings_ie_sum">Your SponsorBlock JSON configuration that can be imported/exported to ReVanced and other SponsorBlock platforms</string>
|
||||
<string name="revanced_sb_settings_ie_sum_warning">Your SponsorBlock JSON configuration that can be imported/exported to ReVanced and other SponsorBlock platforms. This includes your private user id. Be sure to share this wisely</string>
|
||||
<string name="revanced_sb_settings_import_successful">Settings imported successfully</string>
|
||||
<string name="revanced_sb_settings_import_failed">Failed to import: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">Failed to export: %s</string>
|
||||
@@ -731,19 +808,20 @@
|
||||
<string name="revanced_sb_skip_showbutton">Show a skip button</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">Show in seek bar</string>
|
||||
<string name="revanced_sb_skip_ignore">Disable</string>
|
||||
<string name="revanced_sb_submit_failed_invalid" formatted="false">Unable to submit segment: %s</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">Unable to submit segment: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock is temporarily down</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error" formatted="false">Unable to submit segment (status: %d %s)</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">Unable to submit segment (status: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Unable to submit segment.\nRate Limited (too many from the same user or IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden" formatted="false">Can\'t submit the segment: %s</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">Can\'t submit the segment: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">Can\'t submit the segment.\nAlready exists</string>
|
||||
<string name="revanced_sb_submit_succeeded">Segment submitted successfully</string>
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_generic">SponsorBlock temporarily not available</string>
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_status" formatted="false">SponsorBlock temporarily not available (status %d)</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock temporarily not available (API timed out)</string>
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_status">SponsorBlock temporarily not available (status %d)</string>
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_generic">SponsorBlock temporarily not available</string>
|
||||
<string name="revanced_sb_vote_failed_timeout">Unable to vote for segment (API timed out)</string>
|
||||
<string name="revanced_sb_vote_failed_unknown_error" formatted="false">Unable to vote for segment (status: %d %s)</string>
|
||||
<string name="revanced_sb_vote_failed_forbidden" formatted="false">Unable to vote for segment: %s</string>
|
||||
<string name="revanced_sb_vote_failed_unknown_error">Unable to vote for segment (status: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_vote_failed_forbidden">Unable to vote for segment: %s</string>
|
||||
<string name="revanced_sb_vote_upvote">Upvote</string>
|
||||
<string name="revanced_sb_vote_downvote">Downvote</string>
|
||||
<string name="revanced_sb_vote_category">Change category</string>
|
||||
@@ -751,14 +829,18 @@
|
||||
<string name="revanced_sb_new_segment_choose_category">Choose the segment category</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">Category is disabled in settings. Enable category to submit.</string>
|
||||
<string name="revanced_sb_new_segment_title">New SponsorBlock segment</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question" formatted="false">Set %02d:%02d:%03d as the start or end of a new segment?</string>
|
||||
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
|
||||
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">Set %1$02d:%2$02d:%3$03d as the start or end of a new segment?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">start</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">end</string>
|
||||
<string name="revanced_sb_new_segment_now">now</string>
|
||||
<string name="revanced_sb_new_segment_time_start">Time the segment begins at</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Time the segment ends at</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Are the times correct?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content" formatted="false">The segment lasts from %02d:%02d to %02d:%02d (%d minutes %02d seconds)\nIs it ready to submit?</string>
|
||||
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
|
||||
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
|
||||
<string name="revanced_sb_new_segment_confirm_content">The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit?</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Start must be before the end</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Mark two locations on the time bar first</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Preview the segment, and ensure it skips smoothly</string>
|
||||
@@ -766,25 +848,26 @@
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Do you want to edit the timing for the start or end of the segment?</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Invalid time given</string>
|
||||
<string name="revanced_sb_stats">Stats</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">Stats temporarily not available (API is down)</string>
|
||||
<string name="revanced_sb_stats_loading">Loading...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock is disabled</string>
|
||||
<string name="revanced_sb_stats_username" formatted="false">Your username: <b>%s</b></string>
|
||||
<string name="revanced_sb_stats_username">Your username: <b>%s</b></string>
|
||||
<string name="revanced_sb_stats_username_change">Tap here to change your username</string>
|
||||
<string name="revanced_sb_stats_username_change_unknown_error" formatted="false">Unable to change username: Status: %d %s</string>
|
||||
<string name="revanced_sb_stats_username_change_unknown_error">Unable to change username: Status: %1$d %2$s</string>
|
||||
<string name="revanced_sb_stats_username_changed">Username successfully changed</string>
|
||||
<string name="revanced_sb_stats_reputation" formatted="false">Your reputation is <b>%.2f</b></string>
|
||||
<string name="revanced_sb_stats_submissions" formatted="false">You\'ve created <b>%s</b> segments</string>
|
||||
<string name="revanced_sb_stats_reputation">Your reputation is <b>%.2f</b></string>
|
||||
<string name="revanced_sb_stats_submissions">You\'ve created <b>%s</b> segments</string>
|
||||
<string name="revanced_sb_stats_saved_zero">SponsorBlock leaderboard</string>
|
||||
<string name="revanced_sb_stats_saved" formatted="false">You\'ve saved people from <b>%s</b> segments</string>
|
||||
<string name="revanced_sb_stats_saved">You\'ve saved people from <b>%s</b> segments</string>
|
||||
<string name="revanced_sb_stats_saved_sum_zero">Tap here to see the global stats and top contributors</string>
|
||||
<string name="revanced_sb_stats_saved_sum" formatted="false">That\'s <b>%s</b> of their lives.<br>Tap here to see the leaderboard</string>
|
||||
<string name="revanced_sb_stats_self_saved" formatted="false">You\'ve skipped <b>%s</b> segments</string>
|
||||
<string name="revanced_sb_stats_self_saved_sum" formatted="false">That\'s <b>%s</b></string>
|
||||
<string name="revanced_sb_stats_saved_sum">That\'s <b>%s</b> of their lives.<br>Tap here to see the leaderboard</string>
|
||||
<string name="revanced_sb_stats_self_saved">You\'ve skipped <b>%s</b> segments</string>
|
||||
<string name="revanced_sb_stats_self_saved_sum">That\'s <b>%s</b></string>
|
||||
<string name="revanced_sb_stats_self_saved_reset_title">Reset skipped segments counter?</string>
|
||||
<string name="revanced_sb_stats_saved_hour_format" formatted="false">%s hours %s minutes</string>
|
||||
<string name="revanced_sb_stats_saved_minute_format" formatted="false">%s minutes %s seconds</string>
|
||||
<string name="revanced_sb_stats_saved_second_format" formatted="false">%s seconds</string>
|
||||
<string name="revanced_sb_stats_saved_hour_format">%1$s hours %2$s minutes</string>
|
||||
<string name="revanced_sb_stats_saved_minute_format">%1$s minutes %2$s seconds</string>
|
||||
<string name="revanced_sb_stats_saved_second_format">%s seconds</string>
|
||||
<string name="revanced_sb_color_dot_label">Color:</string>
|
||||
<string name="revanced_sb_color_changed">Color changed</string>
|
||||
<string name="revanced_sb_color_reset">Color reset</string>
|
||||
@@ -800,7 +883,10 @@
|
||||
<string name="revanced_spoof_app_version_summary_on">Version spoofed</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Version not spoofed</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">App version will be spoofed to an older version of YouTube.\n\nThis will change the appearance and features of the app, but unknown side effects may occur.\n\nIf later turned off, it is recommended to clear the app data to prevent UI bugs.</string>
|
||||
<!-- It is ideal, but not required, if the text here appears alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Spoof app version target</string>
|
||||
<!-- 'RYD' is 'Return YouTube Dislike' -->
|
||||
<string name="revanced_spoof_app_version_target_entry_1">18.33.40 - Restore RYD on Shorts incognito mode</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">18.20.39 - Restore wide video speed & quality menu</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">18.09.39 - Restore library tab</string>
|
||||
@@ -810,13 +896,17 @@
|
||||
<patch id="layout.startpage.ChangeStartPagePatch">
|
||||
<string name="revanced_start_page_title">Set start page</string>
|
||||
<string name="revanced_start_page_entry_0">Default</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_start_page_entry_1">Home</string>
|
||||
<string name="revanced_start_page_entry_2">Search</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the subscriptions tab. -->
|
||||
<string name="revanced_start_page_entry_3">Subscriptions</string>
|
||||
<string name="revanced_start_page_entry_4">Explore</string>
|
||||
<string name="revanced_start_page_entry_5">Shorts</string>
|
||||
<string name="revanced_start_page_entry_6">Library</string>
|
||||
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (library) tab. -->
|
||||
<string name="revanced_start_page_entry_6">You tab</string>
|
||||
<string name="revanced_start_page_entry_7">Liked videos</string>
|
||||
<!-- 'History' should be translated using the same localized wording YouTube displays for the 'history' section in the 'You' tab. -->
|
||||
<string name="revanced_start_page_entry_8">History</string>
|
||||
<string name="revanced_start_page_entry_9">Trending</string>
|
||||
</patch>
|
||||
@@ -827,7 +917,6 @@
|
||||
</patch>
|
||||
<patch id="layout.tablet.EnableTabletLayoutPatch">
|
||||
<string name="revanced_tablet_layout_title">Enable tablet layout</string>
|
||||
<string name="layout_summary">Settings related to the layout</string>
|
||||
<string name="revanced_tablet_layout_summary_on">Tablet layout is enabled</string>
|
||||
<string name="revanced_tablet_layout_summary_off">Tablet layout is disabled</string>
|
||||
<string name="revanced_tablet_layout_user_dialog_message">Community posts do not show up on tablet layouts</string>
|
||||
@@ -851,8 +940,11 @@
|
||||
<string name="revanced_seekbar_custom_color_invalid">Invalid seekbar color value. Using default value.</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.AlternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_alt_thumbnail_home_title">Home tab</string>
|
||||
<!-- 'Subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
|
||||
<string name="revanced_alt_thumbnail_subscription_title">Subscription tab</string>
|
||||
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (library) tab. -->
|
||||
<string name="revanced_alt_thumbnail_library_title">You tab</string>
|
||||
<string name="revanced_alt_thumbnail_player_title">Player playlists, recommendations</string>
|
||||
<string name="revanced_alt_thumbnail_search_title">Search results</string>
|
||||
@@ -876,6 +968,7 @@
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_1">Beginning of video</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_2">Middle of video</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_3">End of video</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow temporarily not available (status code: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow temporarily not available</string>
|
||||
</patch>
|
||||
@@ -897,22 +990,6 @@
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Device dimensions spoofed</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Device dimensions not spoofed\n\nSpoofing the device dimensions can unlock higher video qualities but unknown side effects may occur</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.SpoofSignaturePatch">
|
||||
<string name="revanced_spoof_signature_verification_screen_title">Spoof app signature</string>
|
||||
<string name="revanced_spoof_signature_verification_screen_summary">Spoof the app signature to prevent playback issues</string>
|
||||
<string name="revanced_spoof_signature_verification_enabled_title">Spoof app signature</string>
|
||||
<string name="revanced_spoof_signature_verification_enabled_summary_on">App signature spoofed\n\nSide effects include:\n• Enhanced bitrate is not available\n• Videos cannot be downloaded\n• No seekbar thumbnails for paid videos</string>
|
||||
<string name="revanced_spoof_signature_verification_enabled_summary_off">App signature not spoofed\n\nVideo playback may not work</string>
|
||||
<string name="revanced_spoof_signature_verification_enabled_user_dialog_message">Turning off this setting will cause video playback issues.</string>
|
||||
<string name="revanced_spoof_signature_in_feed_enabled_title">Spoof app signature in feed</string>
|
||||
<string name="revanced_spoof_signature_in_feed_enabled_summary_on">App signature spoofed\n\nSide effects include:\n• Feed videos are missing subtitles\n• Automatically played feed videos will show up in your watch history</string>
|
||||
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">App signature not spoofed for feed videos\n\nFeed videos will play for less than 1 minute before encountering playback issues</string>
|
||||
<string name="revanced_spoof_storyboard_title">Spoof storyboard</string>
|
||||
<string name="revanced_spoof_storyboard_summary_on">Storyboard spoofed</string>
|
||||
<string name="revanced_spoof_storyboard_summary_off">Storyboard not spoofed\n\nSide effects include:\n• No ambient mode\n• Seekbar thumbnails are hidden</string>
|
||||
<string name="revanced_spoof_storyboard_timeout">Spoof storyboard temporarily not available (API timed out)</string>
|
||||
<string name="revanced_spoof_storyboard_io_exception">Spoof storyboard temporarily not available: %s</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.GmsCoreSupportResourcePatch">
|
||||
<string name="microg_settings_title">GmsCore Settings</string>
|
||||
<string name="microg_settings_summary">Settings for GmsCore</string>
|
||||
@@ -941,11 +1018,6 @@
|
||||
<string name="revanced_disable_zoom_haptics_summary_on">Haptics are disabled</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptics are enabled</string>
|
||||
</patch>
|
||||
<patch id="video.hdrbrightness.HDRBrightnessPatch">
|
||||
<string name="revanced_hdr_auto_brightness_title">Enable auto HDR brightness</string>
|
||||
<string name="revanced_hdr_auto_brightness_summary_on">Auto HDR brightness is enabled</string>
|
||||
<string name="revanced_hdr_auto_brightness_summary_off">Auto HDR brightness is disabled</string>
|
||||
</patch>
|
||||
<patch id="video.quality.RememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatic quality</string>
|
||||
<string name="revanced_video_quality_default_entry_2">2160p</string>
|
||||
@@ -963,12 +1035,12 @@
|
||||
<string name="revanced_video_quality_default_mobile_title">Default video quality on mobile network</string>
|
||||
<string name="revanced_remember_video_quality_mobile">mobile</string>
|
||||
<string name="revanced_remember_video_quality_wifi">wifi</string>
|
||||
<string name="revanced_remember_video_quality_toast" formatted="false">Changed default %s quality to: %s</string>
|
||||
<string name="revanced_remember_video_quality_toast">Changed default %1$s quality to: %2$s</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.CustomPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_playback_speeds_title">Custom playback speeds</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Add or change the available playback speeds</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid" formatted="false">Custom speeds must be less than %s Using default values.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Custom speeds must be less than %s. Using default values.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Invalid custom playback speeds. Using default values.</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.RememberPlaybackSpeedPatch">
|
||||
@@ -976,7 +1048,7 @@
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_on">Playback speed changes apply to all videos</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_off">Playback speed changes only apply to the current video</string>
|
||||
<string name="revanced_playback_speed_default_title">Default playback speed</string>
|
||||
<string name="revanced_remember_playback_speed_toast" formatted="false">Changed default speed to: %s</string>
|
||||
<string name="revanced_remember_playback_speed_toast">Changed default speed to: %s</string>
|
||||
</patch>
|
||||
<patch id="video.videoqualitymenu.RestoreOldVideoQualityMenuResourcePatch">
|
||||
<string name="revanced_restore_old_video_quality_menu_title">Restore old video quality menu</string>
|
||||
@@ -988,6 +1060,29 @@
|
||||
<string name="revanced_slide_to_seek_summary_on">Slide to seek is enabled</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Slide to seek is not enabled</string>
|
||||
</patch>
|
||||
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
|
||||
<patch id="misc.fix.playback.SpoofSignaturePatch">
|
||||
<string name="revanced_spoof_signature_verification_screen_title">Spoof app signature</string>
|
||||
<string name="revanced_spoof_signature_verification_screen_summary">Spoof the app signature to prevent playback issues</string>
|
||||
<string name="revanced_spoof_signature_verification_enabled_title">Spoof app signature</string>
|
||||
<string name="revanced_spoof_signature_verification_enabled_summary_on">App signature spoofed\n\nSide effects include:\n• Enhanced bitrate is not available\n• Videos cannot be downloaded\n• No seekbar thumbnails for paid videos</string>
|
||||
<string name="revanced_spoof_signature_verification_enabled_summary_off">App signature not spoofed\n\nVideo playback may not work</string>
|
||||
<string name="revanced_spoof_signature_verification_enabled_user_dialog_message">Turning off this setting will cause video playback issues.</string>
|
||||
<string name="revanced_spoof_signature_in_feed_enabled_title">Spoof app signature in feed</string>
|
||||
<string name="revanced_spoof_signature_in_feed_enabled_summary_on">App signature spoofed\n\nSide effects include:\n• Feed videos are missing subtitles\n• Automatically played feed videos will show up in your watch history</string>
|
||||
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">App signature not spoofed for feed videos\n\nFeed videos will play for less than 1 minute before encountering playback issues</string>
|
||||
<string name="revanced_spoof_storyboard_title">Spoof storyboard</string>
|
||||
<string name="revanced_spoof_storyboard_summary_on">Storyboard spoofed</string>
|
||||
<string name="revanced_spoof_storyboard_summary_off">Storyboard not spoofed\n\nSide effects include:\n• No ambient mode\n• Seekbar thumbnails are hidden</string>
|
||||
<string name="revanced_spoof_storyboard_timeout">Spoof storyboard temporarily not available (API timed out)</string>
|
||||
<string name="revanced_spoof_storyboard_io_exception">Spoof storyboard temporarily not available: %s</string>
|
||||
</patch>
|
||||
<!-- This patch is no longer used and these strings will soon be deleted. -->
|
||||
<patch id="video.hdrbrightness.HDRBrightnessPatch">
|
||||
<string name="revanced_hdr_auto_brightness_title">Enable auto HDR brightness</string>
|
||||
<string name="revanced_hdr_auto_brightness_summary_on">Auto HDR brightness is enabled</string>
|
||||
<string name="revanced_hdr_auto_brightness_summary_off">Auto HDR brightness is disabled</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
<patch id="ad.audio.AudioAdsPatch">
|
||||
@@ -1021,6 +1116,7 @@
|
||||
<string name="revanced_auto_claim_channel_points_summary_off">Channel Points are not claimed automatically</string>
|
||||
</patch>
|
||||
<patch id="debug.DebugModePatch">
|
||||
<!-- Twitch specific internal debug mode, and not the same as 'revanced_debug_title' -->
|
||||
<string name="revanced_twitch_debug_mode_title">Enable Twitch debug mode</string>
|
||||
<string name="revanced_twitch_debug_mode_summary_on">Twitch debug mode is enabled (not recommended)</string>
|
||||
<string name="revanced_twitch_debug_mode_summary_off">Twitch debug mode is disabled</string>
|
||||
|
||||
Reference in New Issue
Block a user