Compare commits

..

13 Commits

Author SHA1 Message Date
semantic-release-bot
3ad4eb8dbc chore(release): 4.6.1-dev.2 [skip ci]
## [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)) ([0e88306](0e88306f3f))
2024-04-04 21:11:39 +00:00
nullptr
0e88306f3f fix(YouTube - Hide load more button): Include patch with Hide layout components, and hide button only in search feed (#2959) 2024-04-05 01:09:28 +04:00
LisoUseInAIKyrios
87cb63f2e7 chore: Fix typo 2024-04-04 14:25:36 +04:00
LisoUseInAIKyrios
0fead38701 chore: Add comments for translations 2024-04-04 14:19:03 +04:00
semantic-release-bot
19a31019c2 chore(release): 4.6.1-dev.1 [skip ci]
## [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)) ([6175841](61758414c2))
2024-04-04 06:49:26 +00:00
LisoUseInAIKyrios
61758414c2 fix(YouTube - Player flyout menu): Add hide Lock screen menu (#2985) 2024-04-04 10:47:09 +04:00
LisoUseInAIKyrios
b4ee8b6da4 chore: Remove unused string 2024-04-02 16:40:19 +04:00
semantic-release-bot
e86e3d88cf chore(release): 4.6.0 [skip ci]
# [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)) ([fef5f35](fef5f35788))
* **Tumblr:** Restore compatibility with latest versions ([#2955](https://github.com/ReVanced/revanced-patches/issues/2955)) ([1a53a93](1a53a93cd2))

### Features

* **Tumblr:** Add `Fix old versions` patch ([#2954](https://github.com/ReVanced/revanced-patches/issues/2954)) ([2f28e95](2f28e95252))
2024-04-02 00:25:07 +00:00
oSumAtrIX
8cf444962c chore: Merge branch dev to main (#2957) 2024-04-02 02:23:06 +02:00
Ushie
48bf632dbe ci: Push strings to Crowdin on string changes (#2979)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-04-02 01:34:22 +02:00
Ushie
03e91d4251 ci: Don't sync Crowdin every hour (#2967) 2024-04-01 17:17:16 +04:00
semantic-release-bot
8caf70719e chore(release): 4.6.0-dev.1 [skip ci]
# [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)) ([2f28e95](2f28e95252))
2024-03-31 00:49:07 +00:00
Temm
2f28e95252 feat(Tumblr): Add Fix old versions patch (#2954)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-03-31 01:46:50 +01:00
19 changed files with 319 additions and 169 deletions

34
.github/workflows/pull_strings.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: Pull strings
on:
workflow_dispatch:
schedule:
- cron: 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
View 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 }}

View File

@@ -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 }}

View File

@@ -1,3 +1,37 @@
## [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)

View File

@@ -1056,6 +1056,16 @@ 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/fixes/fingerprints/HttpPathParserFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint {
public static final field INSTANCE Lapp/revanced/patches/tumblr/fixes/fingerprints/HttpPathParserFingerprint;
}
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

View File

@@ -1,4 +1,4 @@
org.gradle.parallel = true
org.gradle.caching = true
kotlin.code.style = official
version = 4.5.1-dev.2
version = 4.6.1-dev.2

View File

@@ -0,0 +1,38 @@
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.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),
) {
override fun execute(context: BytecodeContext) =
HttpPathParserFingerprint.result?.let {
val endIndex = it.scanResult.patternScanResult!!.endIndex
it.mutableMethod.addInstructions(
endIndex + 1,
"""
# Remove "?live_now" from the request path p2.
# p2 = p2.replace(p1, p3)
const-string p1, ",?live_now"
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
}

View File

@@ -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 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
object HttpPathParserFingerprint : MethodFingerprint(
strings = listOf("Only one HTTP method is allowed. Found: %s and %s."),
opcodes = listOf(
Opcode.IPUT_OBJECT,
Opcode.IPUT_BOOLEAN
)
)

View File

@@ -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
)
)

View File

@@ -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,
NavigationBarHookPatch::class,
PlayerTypeHookPatch::class // Used by Keyword Content filter.
HideLayoutComponentsResourcePatch::class,
NavigationBarHookPatch::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;"
@@ -122,9 +124,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,
@@ -203,5 +203,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
}
}

View File

@@ -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

View File

@@ -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 }
)

View File

@@ -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) {}
}

View File

@@ -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 }
)

View File

@@ -64,6 +64,7 @@ object HidePlayerFlyoutMenuPatch : ResourcePatch() {
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"),

View File

@@ -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(

View File

@@ -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(

View File

@@ -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")

View File

@@ -13,9 +13,9 @@
<string name="revanced_settings_import_failure_parse">Import failed: %s</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than what is here, otherwise the text can be clipped and not entirely shown. -->
<!-- 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">GmsCore is not installed. Install it.</string>
<!-- Translations of this should not be longer than what is here, otherwise the text can be clipped and not entirely shown. -->
<!-- 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_whitelisted_message">Follow the \"Don\'t kill my app\" guide for GmsCore.</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>
@@ -62,24 +62,35 @@
<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>
<!-- '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>
@@ -186,11 +197,14 @@
<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 familiar product name 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">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$s characters</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>
@@ -199,7 +213,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>
@@ -220,7 +234,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>
@@ -254,6 +268,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>
@@ -307,27 +322,38 @@
<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>
@@ -338,6 +364,8 @@
<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>
@@ -350,18 +378,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>
@@ -369,33 +402,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 &amp; feedback</string>
<string name="revanced_hide_player_flyout_help_summary_on">Help &amp; feedback menu is hidden</string>
<string name="revanced_hide_player_flyout_help_summary_off">Help &amp; 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>
@@ -418,12 +467,12 @@
<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>
@@ -463,11 +512,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.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>
@@ -485,21 +529,27 @@
<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>
@@ -512,9 +562,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>
@@ -528,11 +580,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>
@@ -562,23 +614,28 @@
<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">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 -->
<!-- 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 ReturnYouTubeDislike</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>
<!-- The %s string is either 'revanced_ryd_shorts_summary_disclaimer', or it is an empty string. This text should read normally in both situations. -->
<!-- %s is either an empty blank string, or it is 'revanced_ryd_shorts_summary_disclaimer'.
This text should read normally in both situations. -->
<string name="revanced_ryd_shorts_summary_on">Dislikes shown on Shorts %s</string>
<string name="revanced_ryd_shorts_summary_off">Dislikes hidden on Shorts</string>
<!-- Shown only when used with 'revanced_ryd_shorts_summary_on' and it is never displayed alone. -->
<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>
@@ -588,7 +645,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 statistics. -->
<!-- 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>
@@ -624,6 +681,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>
@@ -668,7 +726,10 @@
<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>
<!-- %s is either an empty blank string, or it is 'revanced_sb_settings_ie_sum_warning'.
This text should read normally in both situations. -->
<string name="revanced_sb_settings_ie_sum">Your SponsorBlock JSON configuration that can be imported/exported to ReVanced and other SponsorBlock platforms %s</string>
<!-- Shown only when used with 'revanced_sb_settings_ie_sum' and it is never displayed alone. -->
<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_import_successful">Settings imported successfully</string>
<string name="revanced_sb_settings_import_failed">Failed to import: %s</string>
@@ -737,9 +798,11 @@
<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">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">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>
@@ -765,6 +828,7 @@
<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>
@@ -802,7 +866,7 @@
<!-- 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 referring to 'Return YouTube Dislike' -->
<!-- '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 &amp; quality menu</string>
<string name="revanced_spoof_app_version_target_entry_3">18.09.39 - Restore library tab</string>
@@ -812,13 +876,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>
@@ -829,7 +897,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>
@@ -853,8 +920,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>
@@ -899,7 +969,7 @@
<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>
<!-- This patch is no longer used, these strings are not in use, and these strings likely will be deleted in the future. -->
<!-- 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>
@@ -1025,6 +1095,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>