Compare commits

...

14 Commits

Author SHA1 Message Date
semantic-release-bot
018160fd9c chore: Release v5.10.0-dev.8 [skip ci]
# [5.10.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.7...v5.10.0-dev.8) (2025-01-29)

### Bug Fixes

* **YouTube - Spoof video streams:** Update settings side effects summary text ([#4369](https://github.com/ReVanced/revanced-patches/issues/4369)) ([6802529](680252967e))
2025-01-29 14:04:01 +00:00
LisoUseInAIKyrios
680252967e fix(YouTube - Spoof video streams): Update settings side effects summary text (#4369) 2025-01-29 16:00:22 +02:00
semantic-release-bot
e79eba81d9 chore: Release v5.10.0-dev.7 [skip ci]
# [5.10.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.6...v5.10.0-dev.7) (2025-01-29)

### Bug Fixes

* **YouTube - Hide ads:** fix 'Hide the Visit store button on channel pages' not working ([#4364](https://github.com/ReVanced/revanced-patches/issues/4364)) ([a73db03](a73db03671))
2025-01-29 08:31:07 +00:00
ILoveOpenSourceApplications
a73db03671 fix(YouTube - Hide ads): fix 'Hide the Visit store button on channel pages' not working (#4364) 2025-01-29 10:28:26 +02:00
semantic-release-bot
055ad04281 chore: Release v5.10.0-dev.6 [skip ci]
# [5.10.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.5...v5.10.0-dev.6) (2025-01-29)

### Bug Fixes

* **YouTube - Hide Ads:** Hide end screen store banner without leaving empty space ([#4367](https://github.com/ReVanced/revanced-patches/issues/4367)) ([aaeee4a](aaeee4a895))
2025-01-29 07:44:09 +00:00
LisoUseInAIKyrios
aaeee4a895 fix(YouTube - Hide Ads): Hide end screen store banner without leaving empty space (#4367) 2025-01-29 09:40:59 +02:00
semantic-release-bot
654b339f66 chore: Release v5.10.0-dev.5 [skip ci]
# [5.10.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.4...v5.10.0-dev.5) (2025-01-27)

### Bug Fixes

* **YouTube - Hide video description components:** Use correct string key names ([64cdce2](64cdce28a6))
2025-01-27 15:01:10 +00:00
LisoUseInAIKyrios
64cdce28a6 fix(YouTube - Hide video description components): Use correct string key names 2025-01-27 16:58:44 +02:00
semantic-release-bot
d01b9a67c5 chore: Release v5.10.0-dev.4 [skip ci]
# [5.10.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.3...v5.10.0-dev.4) (2025-01-27)

### Features

* **YouTube - Hide video description components:** Add `Hide How this content was made section` ([#4355](https://github.com/ReVanced/revanced-patches/issues/4355)) ([a72404e](a72404eeab))
2025-01-27 08:39:16 +00:00
ILoveOpenSourceApplications
a72404eeab feat(YouTube - Hide video description components): Add Hide How this content was made section (#4355) 2025-01-27 10:36:13 +02:00
semantic-release-bot
3ff104528e chore: Release v5.10.0-dev.3 [skip ci]
# [5.10.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.2...v5.10.0-dev.3) (2025-01-27)

### Features

* **YouTube - Hide ads:** Add `Hide end screen store banner` ([#4351](https://github.com/ReVanced/revanced-patches/issues/4351)) ([76bbd7e](76bbd7ed2f))
2025-01-27 08:35:53 +00:00
ILoveOpenSourceApplications
76bbd7ed2f feat(YouTube - Hide ads): Add Hide end screen store banner (#4351) 2025-01-27 10:32:15 +02:00
semantic-release-bot
2fdf0f85c1 chore: Release v5.10.0-dev.2 [skip ci]
# [5.10.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.1...v5.10.0-dev.2) (2025-01-25)

### Features

* **YouTube:** Add patch `Disable HDR video` ([#4347](https://github.com/ReVanced/revanced-patches/issues/4347)) ([1d12c41](1d12c4156d))
2025-01-25 08:29:47 +00:00
LisoUseInAIKyrios
1d12c4156d feat(YouTube): Add patch Disable HDR video (#4347) 2025-01-25 10:26:46 +02:00
16 changed files with 324 additions and 66 deletions

View File

@@ -1,3 +1,52 @@
# [5.10.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.7...v5.10.0-dev.8) (2025-01-29)
### Bug Fixes
* **YouTube - Spoof video streams:** Update settings side effects summary text ([#4369](https://github.com/ReVanced/revanced-patches/issues/4369)) ([e5b3aa1](https://github.com/ReVanced/revanced-patches/commit/e5b3aa1cc6a2465cb006487d528de888bc7cd430))
# [5.10.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.6...v5.10.0-dev.7) (2025-01-29)
### Bug Fixes
* **YouTube - Hide ads:** fix 'Hide the Visit store button on channel pages' not working ([#4364](https://github.com/ReVanced/revanced-patches/issues/4364)) ([9d63ea9](https://github.com/ReVanced/revanced-patches/commit/9d63ea9a10ab5128ce18a1f53a946e84550da258))
# [5.10.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.5...v5.10.0-dev.6) (2025-01-29)
### Bug Fixes
* **YouTube - Hide Ads:** Hide end screen store banner without leaving empty space ([#4367](https://github.com/ReVanced/revanced-patches/issues/4367)) ([7e68390](https://github.com/ReVanced/revanced-patches/commit/7e683906418434dd4e2104337d73a2292415c615))
# [5.10.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.4...v5.10.0-dev.5) (2025-01-27)
### Bug Fixes
* **YouTube - Hide video description components:** Use correct string key names ([0f28c2b](https://github.com/ReVanced/revanced-patches/commit/0f28c2b44c0051ea7ab3136433b84c73321cf5bd))
# [5.10.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.3...v5.10.0-dev.4) (2025-01-27)
### Features
* **YouTube - Hide video description components:** Add `Hide How this content was made section` ([#4355](https://github.com/ReVanced/revanced-patches/issues/4355)) ([68ec54e](https://github.com/ReVanced/revanced-patches/commit/68ec54ef850ae8d6461dd0ef2846e6efbb59e482))
# [5.10.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.2...v5.10.0-dev.3) (2025-01-27)
### Features
* **YouTube - Hide ads:** Add `Hide end screen store banner` ([#4351](https://github.com/ReVanced/revanced-patches/issues/4351)) ([5505087](https://github.com/ReVanced/revanced-patches/commit/55050878028fed82b0f583a9f7ba06b8f267f8ec))
# [5.10.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.10.0-dev.1...v5.10.0-dev.2) (2025-01-25)
### Features
* **YouTube:** Add patch `Disable HDR video` ([#4347](https://github.com/ReVanced/revanced-patches/issues/4347)) ([0528f7c](https://github.com/ReVanced/revanced-patches/commit/0528f7cad856a2b1347e41944167b0583fc4a3d9))
# [5.10.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.9.1-dev.4...v5.10.0-dev.1) (2025-01-23) # [5.10.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.9.1-dev.4...v5.10.0-dev.1) (2025-01-23)

View File

@@ -0,0 +1,15 @@
package app.revanced.extension.youtube.patches;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class DisableHdrPatch {
/**
* Injection point.
*/
public static boolean disableHDRVideo() {
return !Settings.DISABLE_HDR_VIDEO.get();
}
}

View File

@@ -5,10 +5,13 @@ import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class VideoAdsPatch { public class VideoAdsPatch {
// Used by app.revanced.patches.youtube.ad.general.video.patch.VideoAdsPatch private static final boolean SHOW_VIDEO_ADS = !Settings.HIDE_VIDEO_ADS.get();
// depends on Whitelist patch (still needs to be written)
/**
* Injection point.
*/
public static boolean shouldShowAds() { public static boolean shouldShowAds() {
return !Settings.HIDE_VIDEO_ADS.get(); // TODO && Whitelist.shouldShowAds(); return SHOW_VIDEO_ADS;
} }
} }

View File

@@ -8,10 +8,12 @@ import android.view.View;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import app.revanced.extension.youtube.settings.Settings; import java.util.List;
import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.Utils;
import app.revanced.extension.youtube.StringTrieSearch; import app.revanced.extension.youtube.StringTrieSearch;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public final class AdsFilter extends Filter { public final class AdsFilter extends Filter {
@@ -22,6 +24,11 @@ public final class AdsFilter extends Filter {
// endregion // endregion
// https://encrypted-tbn0.gstatic.com/shopping?q=abc
private static final String STORE_BANNER_DOMAIN = "gstatic.com/shopping";
private static final boolean HIDE_END_SCREEN_STORE_BANNER =
Settings.HIDE_END_SCREEN_STORE_BANNER.get();
private final StringTrieSearch exceptions = new StringTrieSearch(); private final StringTrieSearch exceptions = new StringTrieSearch();
private final StringFilterGroup playerShoppingShelf; private final StringFilterGroup playerShoppingShelf;
@@ -112,23 +119,24 @@ public final class AdsFilter extends Filter {
"expandable_list" "expandable_list"
); );
channelProfile = new StringFilterGroup(
null,
"channel_profile.eml"
);
playerShoppingShelf = new StringFilterGroup( playerShoppingShelf = new StringFilterGroup(
null, Settings.HIDE_PLAYER_STORE_SHELF,
"horizontal_shelf.eml" "horizontal_shelf.eml"
); );
playerShoppingShelfBuffer = new ByteArrayFilterGroup( playerShoppingShelfBuffer = new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_STORE_SHELF, null,
"shopping_item_card_list.eml" "shopping_item_card_list.eml"
); );
visitStoreButton = new ByteArrayFilterGroup( channelProfile = new StringFilterGroup(
Settings.HIDE_VISIT_STORE_BUTTON, Settings.HIDE_VISIT_STORE_BUTTON,
"channel_profile.eml",
"page_header.eml"
);
visitStoreButton = new ByteArrayFilterGroup(
null,
"header_store_button" "header_store_button"
); );
@@ -172,6 +180,11 @@ public final class AdsFilter extends Filter {
return false; return false;
} }
// Check for the index because of likelihood of false positives.
if (matchedGroup == shoppingLinks && contentIndex != 0) {
return false;
}
if (exceptions.matches(path)) if (exceptions.matches(path))
return false; return false;
@@ -188,13 +201,25 @@ public final class AdsFilter extends Filter {
return false; return false;
} }
// Check for the index because of likelihood of false positives.
if (matchedGroup == shoppingLinks && contentIndex != 0)
return false;
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex); return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
} }
/**
* Injection point.
*
* @param elementsList List of components of the end screen container.
* @param protobufList Component (ProtobufList).
*/
public static void hideEndScreenStoreBanner(List<Object> elementsList, Object protobufList) {
if (HIDE_END_SCREEN_STORE_BANNER && protobufList.toString().contains(STORE_BANNER_DOMAIN)) {
Logger.printDebug(() -> "Hiding store banner");
return;
}
elementsList.add(protobufList);
}
/** /**
* Hide the view, which shows ads in the homepage. * Hide the view, which shows ads in the homepage.
* *

View File

@@ -45,6 +45,11 @@ final class DescriptionComponentsFilter extends Filter {
"transcript_section" "transcript_section"
); );
final StringFilterGroup howThisWasMadeSection = new StringFilterGroup(
Settings.HIDE_HOW_THIS_WAS_MADE_SECTION,
"how_this_was_made_section"
);
macroMarkersCarousel = new StringFilterGroup( macroMarkersCarousel = new StringFilterGroup(
null, null,
"macro_markers_carousel.eml" "macro_markers_carousel.eml"
@@ -64,6 +69,7 @@ final class DescriptionComponentsFilter extends Filter {
addPathCallbacks( addPathCallbacks(
attributesSection, attributesSection,
infoCardsSection, infoCardsSection,
howThisWasMadeSection,
podcastSection, podcastSection,
transcriptSection, transcriptSection,
macroMarkersCarousel macroMarkersCarousel

View File

@@ -47,6 +47,7 @@ import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
public class Settings extends BaseSettings { public class Settings extends BaseSettings {
// Video // Video
public static final BooleanSetting DISABLE_HDR_VIDEO = new BooleanSetting("revanced_disable_hdr_video", FALSE);
public static final BooleanSetting RESTORE_OLD_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_restore_old_video_quality_menu", TRUE); public static final BooleanSetting RESTORE_OLD_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_restore_old_video_quality_menu", TRUE);
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_LAST_SELECTED = new BooleanSetting("revanced_remember_video_quality_last_selected", FALSE); public static final BooleanSetting REMEMBER_VIDEO_QUALITY_LAST_SELECTED = new BooleanSetting("revanced_remember_video_quality_last_selected", FALSE);
public static final IntegerSetting VIDEO_QUALITY_DEFAULT_WIFI = new IntegerSetting("revanced_video_quality_default_wifi", -2); public static final IntegerSetting VIDEO_QUALITY_DEFAULT_WIFI = new IntegerSetting("revanced_video_quality_default_wifi", -2);
@@ -63,6 +64,7 @@ public class Settings extends BaseSettings {
// Ads // Ads
public static final BooleanSetting HIDE_BUTTONED_ADS = new BooleanSetting("revanced_hide_buttoned_ads", TRUE); public static final BooleanSetting HIDE_BUTTONED_ADS = new BooleanSetting("revanced_hide_buttoned_ads", TRUE);
public static final BooleanSetting HIDE_END_SCREEN_STORE_BANNER = new BooleanSetting("revanced_hide_end_screen_store_banner", TRUE, true);
public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE); public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE);
public static final BooleanSetting HIDE_GENERAL_ADS = new BooleanSetting("revanced_hide_general_ads", TRUE); public static final BooleanSetting HIDE_GENERAL_ADS = new BooleanSetting("revanced_hide_general_ads", TRUE);
public static final BooleanSetting HIDE_GET_PREMIUM = new BooleanSetting("revanced_hide_get_premium", TRUE); public static final BooleanSetting HIDE_GET_PREMIUM = new BooleanSetting("revanced_hide_get_premium", TRUE);
@@ -177,6 +179,7 @@ public class Settings extends BaseSettings {
// Description // Description
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE); public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE);
public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE); public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
public static final BooleanSetting HIDE_HOW_THIS_WAS_MADE_SECTION = new BooleanSetting("revanced_hide_how_this_was_made_section", FALSE);
public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE); public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE);
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE); public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE); public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);

View File

@@ -89,6 +89,8 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
summary += '\n' + str("revanced_spoof_video_streams_about_no_av1"); summary += '\n' + str("revanced_spoof_video_streams_about_no_av1");
} }
summary += '\n' + str("revanced_spoof_video_streams_about_kids_videos");
setTitle(title); setTitle(title);
setSummary(summary); setSummary(summary);
} }

View File

@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true org.gradle.parallel = true
android.useAndroidX = true android.useAndroidX = true
kotlin.code.style = official kotlin.code.style = official
version = 5.10.0-dev.1 version = 5.10.0-dev.8

View File

@@ -1414,6 +1414,10 @@ public final class app/revanced/patches/youtube/video/audio/ForceOriginalAudioPa
public static final fun getForceOriginalAudioPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getForceOriginalAudioPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/youtube/video/hdr/DisableHdrPatchKt {
public static final fun getDisableHdrPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/video/information/VideoInformationPatchKt { public final class app/revanced/patches/youtube/video/information/VideoInformationPatchKt {
public static final fun getVideoInformationPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getVideoInformationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
public static final fun userSelectedPlaybackSpeedHook (Ljava/lang/String;Ljava/lang/String;)V public static final fun userSelectedPlaybackSpeedHook (Ljava/lang/String;Ljava/lang/String;)V

View File

@@ -0,0 +1,25 @@
package app.revanced.patches.youtube.ad.general
import app.revanced.patcher.fingerprint
import app.revanced.util.containsLiteralInstruction
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionReversed
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
internal val fullScreenEngagementAdContainerFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters()
custom { method, _ ->
method.containsLiteralInstruction(fullScreenEngagementAdContainer)
&& indexOfAddListInstruction(method) >= 0
}
}
internal fun indexOfAddListInstruction(method: Method) =
method.indexOfFirstInstructionReversed {
getReference<MethodReference>()?.name == "add"
}

View File

@@ -1,5 +1,7 @@
package app.revanced.patches.youtube.ad.general package app.revanced.patches.youtube.ad.general
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.patch.resourcePatch import app.revanced.patcher.patch.resourcePatch
import app.revanced.patches.all.misc.resources.addResources import app.revanced.patches.all.misc.resources.addResources
@@ -18,11 +20,16 @@ import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.findMutableMethodOf import app.revanced.util.findMutableMethodOf
import app.revanced.util.injectHideViewCall import app.revanced.util.injectHideViewCall
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31i import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31i
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
internal var adAttributionId = -1L internal var adAttributionId = -1L
private set private set
internal var fullScreenEngagementAdContainer = -1L
private set
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/components/AdsFilter;"
private val hideAdsResourcePatch = resourcePatch { private val hideAdsResourcePatch = resourcePatch {
dependsOn( dependsOn(
@@ -37,6 +44,7 @@ private val hideAdsResourcePatch = resourcePatch {
PreferenceScreen.ADS.addPreferences( PreferenceScreen.ADS.addPreferences(
SwitchPreference("revanced_hide_general_ads"), SwitchPreference("revanced_hide_general_ads"),
SwitchPreference("revanced_hide_end_screen_store_banner"),
SwitchPreference("revanced_hide_fullscreen_ads"), SwitchPreference("revanced_hide_fullscreen_ads"),
SwitchPreference("revanced_hide_buttoned_ads"), SwitchPreference("revanced_hide_buttoned_ads"),
SwitchPreference("revanced_hide_paid_promotion_label"), SwitchPreference("revanced_hide_paid_promotion_label"),
@@ -52,6 +60,7 @@ private val hideAdsResourcePatch = resourcePatch {
addLithoFilter("Lapp/revanced/extension/youtube/patches/components/AdsFilter;") addLithoFilter("Lapp/revanced/extension/youtube/patches/components/AdsFilter;")
adAttributionId = resourceMappings["id", "ad_attribution"] adAttributionId = resourceMappings["id", "ad_attribution"]
fullScreenEngagementAdContainer = resourceMappings["id", "fullscreen_engagement_ad_container"]
} }
} }
@@ -82,6 +91,23 @@ val hideAdsPatch = bytecodePatch(
) )
execute { execute {
// Hide end screen store banner
fullScreenEngagementAdContainerFingerprint.method.apply {
val addListIndex = indexOfAddListInstruction(this)
val addListInstruction = getInstruction<FiveRegisterInstruction>(addListIndex)
val listRegister = addListInstruction.registerC
val objectRegister = addListInstruction.registerD
replaceInstruction(
addListIndex,
"invoke-static { v$listRegister, v$objectRegister }, $EXTENSION_CLASS_DESCRIPTOR" +
"->hideEndScreenStoreBanner(Ljava/util/List;Ljava/lang/Object;)V"
)
}
// Hide ad views
classes.forEach { classDef -> classes.forEach { classDef ->
classDef.methods.forEach { method -> classDef.methods.forEach { method ->
with(method.implementation) { with(method.implementation) {
@@ -110,7 +136,7 @@ val hideAdsPatch = bytecodePatch(
.injectHideViewCall( .injectHideViewCall(
insertIndex, insertIndex,
viewRegister, viewRegister,
"Lapp/revanced/extension/youtube/patches/components/AdsFilter;", EXTENSION_CLASS_DESCRIPTOR,
"hideAdAttributionView", "hideAdAttributionView",
) )
} }

View File

@@ -147,6 +147,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
SwitchPreference("revanced_hide_attributes_section"), SwitchPreference("revanced_hide_attributes_section"),
SwitchPreference("revanced_hide_chapters_section"), SwitchPreference("revanced_hide_chapters_section"),
SwitchPreference("revanced_hide_info_cards_section"), SwitchPreference("revanced_hide_info_cards_section"),
SwitchPreference("revanced_hide_how_this_was_made_section"),
SwitchPreference("revanced_hide_key_concepts_section"), SwitchPreference("revanced_hide_key_concepts_section"),
SwitchPreference("revanced_hide_podcast_section"), SwitchPreference("revanced_hide_podcast_section"),
SwitchPreference("revanced_hide_transcript_section"), SwitchPreference("revanced_hide_transcript_section"),

View File

@@ -68,14 +68,6 @@ private val seekbarColorResourcePatch = resourcePatch {
"color", "color",
"inline_time_bar_played_not_highlighted_color", "inline_time_bar_played_not_highlighted_color",
] ]
ytYoutubeMagentaColorId = resourceMappings[
"color",
"yt_youtube_magenta",
]
ytStaticBrandRedId = resourceMappings[
"attr",
"ytStaticBrandRed",
]
// Modify the resume playback drawable and replace the progress bar with a custom drawable. // Modify the resume playback drawable and replace the progress bar with a custom drawable.
document("res/drawable/resume_playback_progressbar_drawable.xml").use { document -> document("res/drawable/resume_playback_progressbar_drawable.xml").use { document ->
@@ -97,6 +89,15 @@ private val seekbarColorResourcePatch = resourcePatch {
return@execute return@execute
} }
ytYoutubeMagentaColorId = resourceMappings[
"color",
"yt_youtube_magenta",
]
ytStaticBrandRedId = resourceMappings[
"attr",
"ytStaticBrandRed",
]
// Add attribute and styles for splash screen custom color. // Add attribute and styles for splash screen custom color.
// Using a style is the only way to selectively change just the seekbar fill color. // Using a style is the only way to selectively change just the seekbar fill color.
// //

View File

@@ -0,0 +1,74 @@
package app.revanced.patches.youtube.video.hdr
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/DisableHdrPatch;"
@Suppress("unused")
val disableHdrPatch = bytecodePatch(
name = "Disable HDR video",
description = "Adds an option to disable video HDR.",
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
)
compatibleWith(
"com.google.android.youtube"(
"18.38.44",
"18.49.37",
"19.16.39",
"19.25.37",
"19.34.42",
"19.43.41",
"19.45.38",
"19.46.42",
"19.47.53",
),
)
execute {
addResources("youtube", "video.hdr.disableHdrPatch")
PreferenceScreen.VIDEO.addPreferences(
SwitchPreference("revanced_disable_hdr_video")
)
hdrCapabilityFingerprint.let {
it.originalMethod.apply {
val stringIndex = it.stringMatches!!.first().index
val navigateIndex = indexOfFirstInstructionOrThrow(stringIndex) {
val reference = getReference<MethodReference>()
reference?.parameterTypes == listOf("I", "Landroid/view/Display;") &&
reference.returnType == "Z"
}
// Modify the HDR lookup method (Method is in the same class as the fingerprint).
navigate(this).to(navigateIndex).stop().addInstructionsWithLabels(
0,
"""
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->disableHDRVideo()Z
move-result v0
if-nez v0, :useHdr
return v0
:useHdr
nop
"""
)
}
}
}
}

View File

@@ -0,0 +1,12 @@
package app.revanced.patches.youtube.video.hdr
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val hdrCapabilityFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
strings(
"av1_profile_main_10_hdr_10_plus_supported",
"video/av01"
)
}

View File

@@ -169,9 +169,9 @@ Tap the continue button and allow optimization changes."</string>
You will not be notified of any unexpected events."</string> You will not be notified of any unexpected events."</string>
</patch> </patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch"> <patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_disable_like_subscribe_glow_title">Disable like / subscribe button glow</string> <string name="revanced_disable_like_subscribe_glow_title">Disable Like and Subscribe button glow</string>
<string name="revanced_disable_like_subscribe_glow_summary_on">Like and subscribe button will not glow when mentioned</string> <string name="revanced_disable_like_subscribe_glow_summary_on">Like and Subscribe button will not glow when mentioned</string>
<string name="revanced_disable_like_subscribe_glow_summary_off">Like and subscribe button will glow when mentioned</string> <string name="revanced_disable_like_subscribe_glow_summary_off">Like and Subscribe button will glow when mentioned</string>
<string name="revanced_hide_album_cards_title">Hide album cards</string> <string name="revanced_hide_album_cards_title">Hide album cards</string>
<string name="revanced_hide_album_cards_summary_on">Album cards are hidden</string> <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> <string name="revanced_hide_album_cards_summary_off">Album cards are shown</string>
@@ -224,9 +224,9 @@ You will not be notified of any unexpected events."</string>
<string name="revanced_hide_chips_shelf_title">Hide chips shelf</string> <string name="revanced_hide_chips_shelf_title">Hide chips shelf</string>
<string name="revanced_hide_chips_shelf_summary_on">Chips shelf is hidden</string> <string name="revanced_hide_chips_shelf_summary_on">Chips shelf is hidden</string>
<string name="revanced_hide_chips_shelf_summary_off">Chips shelf is shown</string> <string name="revanced_hide_chips_shelf_summary_off">Chips shelf is shown</string>
<string name="revanced_hide_expandable_chip_title">Hide expandable chip under videos</string> <string name="revanced_hide_expandable_chip_title">Hide expandable card under videos</string>
<string name="revanced_hide_expandable_chip_summary_on">Expandable chips are hidden</string> <string name="revanced_hide_expandable_chip_summary_on">Expandable cards are hidden</string>
<string name="revanced_hide_expandable_chip_summary_off">Expandable chips are shown</string> <string name="revanced_hide_expandable_chip_summary_off">Expandable cards are shown</string>
<string name="revanced_hide_community_posts_title">Hide community posts</string> <string name="revanced_hide_community_posts_title">Hide community posts</string>
<string name="revanced_hide_community_posts_summary_on">Community posts are hidden</string> <string name="revanced_hide_community_posts_summary_on">Community posts are hidden</string>
<string name="revanced_hide_community_posts_summary_off">Community posts are shown</string> <string name="revanced_hide_community_posts_summary_off">Community posts are shown</string>
@@ -287,6 +287,9 @@ You will not be notified of any unexpected events."</string>
<string name="revanced_hide_chapters_section_title">Hide Chapters section</string> <string name="revanced_hide_chapters_section_title">Hide Chapters section</string>
<string name="revanced_hide_chapters_section_summary_on">Chapters section is hidden</string> <string name="revanced_hide_chapters_section_summary_on">Chapters section is hidden</string>
<string name="revanced_hide_chapters_section_summary_off">Chapters section is shown</string> <string name="revanced_hide_chapters_section_summary_off">Chapters section is shown</string>
<string name="revanced_hide_how_this_was_made_section_title">Hide \'How this content was made\' section</string>
<string name="revanced_hide_how_this_was_made_section_summary_on">\'How this content was made\' section is hidden</string>
<string name="revanced_hide_how_this_was_made_section_summary_off">\'How this content was made\' section is shown</string>
<string name="revanced_hide_podcast_section_title">Hide \'Explore the podcast\' section</string> <string name="revanced_hide_podcast_section_title">Hide \'Explore the podcast\' section</string>
<string name="revanced_hide_podcast_section_summary_on">\'Explore the podcast\' section is hidden</string> <string name="revanced_hide_podcast_section_summary_on">\'Explore the podcast\' section is hidden</string>
<string name="revanced_hide_podcast_section_summary_off">\'Explore the podcast\' section is shown</string> <string name="revanced_hide_podcast_section_summary_off">\'Explore the podcast\' section is shown</string>
@@ -331,7 +334,7 @@ You will not be notified of any unexpected events."</string>
<string name="revanced_hide_comments_preview_comment_title">Hide preview comment</string> <string name="revanced_hide_comments_preview_comment_title">Hide preview comment</string>
<string name="revanced_hide_comments_preview_comment_summary_on">Preview comment is hidden</string> <string name="revanced_hide_comments_preview_comment_summary_on">Preview comment is hidden</string>
<string name="revanced_hide_comments_preview_comment_summary_off">Preview comment is shown</string> <string name="revanced_hide_comments_preview_comment_summary_off">Preview comment is shown</string>
<string name="revanced_hide_comments_thanks_button_title">Hide thanks button</string> <string name="revanced_hide_comments_thanks_button_title">Hide Thanks button</string>
<string name="revanced_hide_comments_thanks_button_summary_on">Thanks button is hidden</string> <string name="revanced_hide_comments_thanks_button_summary_on">Thanks button is hidden</string>
<string name="revanced_hide_comments_thanks_button_summary_off">Thanks button is shown</string> <string name="revanced_hide_comments_thanks_button_summary_off">Thanks button is shown</string>
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Hide timestamp and emoji buttons</string> <string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Hide timestamp and emoji buttons</string>
@@ -360,12 +363,12 @@ If a Doodle is currently showing in your region and this hide setting is on, the
<string name="revanced_hide_keyword_content_home_title">Hide home videos by keywords</string> <string name="revanced_hide_keyword_content_home_title">Hide home videos by keywords</string>
<string name="revanced_hide_keyword_content_home_summary_on">Videos in the home tab are filtered by keywords</string> <string name="revanced_hide_keyword_content_home_summary_on">Videos in the home tab are filtered by keywords</string>
<string name="revanced_hide_keyword_content_home_summary_off">Videos in the home tab are not filtered by keywords</string> <string name="revanced_hide_keyword_content_home_summary_off">Videos in the home tab are not filtered by keywords</string>
<string name="revanced_hide_keyword_content_subscriptions_title">Hide subscription videos by keywords</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_on">Videos in the subscriptions tab are filtered by keywords</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Videos in the subscriptions tab are not filtered by keywords</string>
<string name="revanced_hide_keyword_content_search_title">Hide search results by keywords</string> <string name="revanced_hide_keyword_content_search_title">Hide search results by keywords</string>
<string name="revanced_hide_keyword_content_search_summary_on">Search results are filtered by keywords</string> <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_search_summary_off">Search results are not filtered by keywords</string>
<string name="revanced_hide_keyword_content_subscriptions_title">Hide subscription videos by keywords</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_on">Videos in the subscriptions tab are filtered by keywords</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Videos in the subscriptions tab are not filtered by keywords</string>
<string name="revanced_hide_keyword_content_phrases_title">Keywords to hide</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. <!-- 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. --> This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
@@ -412,16 +415,19 @@ This feature is only available for older devices"</string>
<string name="revanced_hide_products_banner_title">Hide banner to view products</string> <string name="revanced_hide_products_banner_title">Hide banner to view products</string>
<string name="revanced_hide_products_banner_summary_on">Banner is hidden</string> <string name="revanced_hide_products_banner_summary_on">Banner is hidden</string>
<string name="revanced_hide_products_banner_summary_off">Banner is shown</string> <string name="revanced_hide_products_banner_summary_off">Banner is shown</string>
<string name="revanced_hide_end_screen_store_banner_title">Hide end screen store banner</string>
<string name="revanced_hide_end_screen_store_banner_summary_on">Store banner is hidden</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">Store banner is shown</string>
<string name="revanced_hide_player_store_shelf_title">Hide player shopping shelf</string> <string name="revanced_hide_player_store_shelf_title">Hide player shopping shelf</string>
<string name="revanced_hide_player_store_shelf_summary_on">Shopping shelf is hidden</string> <string name="revanced_hide_player_store_shelf_summary_on">Shopping shelf is hidden</string>
<string name="revanced_hide_player_store_shelf_summary_off">Shopping shelf is shown</string> <string name="revanced_hide_player_store_shelf_summary_off">Shopping shelf is shown</string>
<string name="revanced_hide_shopping_links_title">Hide shopping links in video description</string> <string name="revanced_hide_shopping_links_title">Hide shopping links</string>
<string name="revanced_hide_shopping_links_summary_on">Shopping links are hidden</string> <string name="revanced_hide_shopping_links_summary_on">Video description shopping links are hidden</string>
<string name="revanced_hide_shopping_links_summary_off">Shopping links are shown</string> <string name="revanced_hide_shopping_links_summary_off">Video description shopping links are shown</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. --> <!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">Hide the \'Visit store\' button on channel pages</string> <string name="revanced_hide_visit_store_button_title">Hide \'Visit store\' button</string>
<string name="revanced_hide_visit_store_button_summary_on">Button is hidden</string> <string name="revanced_hide_visit_store_button_summary_on">Button is hidden on channel page</string>
<string name="revanced_hide_visit_store_button_summary_off">Button is shown</string> <string name="revanced_hide_visit_store_button_summary_off">Button is shown on channel page</string>
<string name="revanced_hide_web_search_results_title">Hide web search results</string> <string name="revanced_hide_web_search_results_title">Hide web search results</string>
<string name="revanced_hide_web_search_results_summary_on">Web search results are hidden</string> <string name="revanced_hide_web_search_results_summary_on">Web search results are hidden</string>
<string name="revanced_hide_web_search_results_summary_off">Web search results are shown</string> <string name="revanced_hide_web_search_results_summary_off">Web search results are shown</string>
@@ -464,7 +470,7 @@ This feature is only available for older devices"</string>
<string name="revanced_external_downloader_summary_on">Download button shown in player</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> <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' --> <!-- '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_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_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> <string name="revanced_external_downloader_action_button_summary_off">Download button opens the native in-app downloader</string>
<string name="revanced_external_downloader_name_title">Downloader package name</string> <string name="revanced_external_downloader_name_title">Downloader package name</string>
@@ -651,14 +657,14 @@ Note: Enabling this also forcibly hides video ads"</string>
<string name="revanced_hide_player_previous_next_buttons_title">Hide previous &amp; next video buttons</string> <string name="revanced_hide_player_previous_next_buttons_title">Hide previous &amp; next video buttons</string>
<string name="revanced_hide_player_previous_next_buttons_summary_on">Buttons are hidden</string> <string name="revanced_hide_player_previous_next_buttons_summary_on">Buttons are hidden</string>
<string name="revanced_hide_player_previous_next_buttons_summary_off">Buttons are shown</string> <string name="revanced_hide_player_previous_next_buttons_summary_off">Buttons are shown</string>
<string name="revanced_hide_cast_button_title">Hide cast button</string> <string name="revanced_hide_cast_button_title">Hide Cast button</string>
<string name="revanced_hide_cast_button_summary_on">Cast button is hidden</string> <string name="revanced_hide_cast_button_summary_on">Cast button is hidden</string>
<string name="revanced_hide_cast_button_summary_off">Cast button is shown</string> <string name="revanced_hide_cast_button_summary_off">Cast button is shown</string>
<!-- 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' --> <!-- 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_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_on">Captions button is hidden</string>
<string name="revanced_hide_captions_button_summary_off">Captions button is shown</string> <string name="revanced_hide_captions_button_summary_off">Captions button is shown</string>
<string name="revanced_hide_autoplay_button_title">Hide autoplay button</string> <string name="revanced_hide_autoplay_button_title">Hide Autoplay button</string>
<string name="revanced_hide_autoplay_button_summary_on">Autoplay button is hidden</string> <string name="revanced_hide_autoplay_button_summary_on">Autoplay button is hidden</string>
<string name="revanced_hide_autoplay_button_summary_off">Autoplay button is shown</string> <string name="revanced_hide_autoplay_button_summary_off">Autoplay button is shown</string>
</patch> </patch>
@@ -668,7 +674,7 @@ Note: Enabling this also forcibly hides video ads"</string>
<string name="revanced_hide_endscreen_cards_summary_off">End screen cards are shown</string> <string name="revanced_hide_endscreen_cards_summary_off">End screen cards are shown</string>
</patch> </patch>
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch"> <patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
<string name="revanced_disable_fullscreen_ambient_mode_title">Disable ambient mode in fullscreen</string> <string name="revanced_disable_fullscreen_ambient_mode_title">Disable Ambient mode in fullscreen</string>
<string name="revanced_disable_fullscreen_ambient_mode_summary_on">Ambient mode disabled</string> <string name="revanced_disable_fullscreen_ambient_mode_summary_on">Ambient mode disabled</string>
<string name="revanced_disable_fullscreen_ambient_mode_summary_off">Ambient mode enabled</string> <string name="revanced_disable_fullscreen_ambient_mode_summary_off">Ambient mode enabled</string>
</patch> </patch>
@@ -708,38 +714,38 @@ Note: Enabling this also forcibly hides video ads"</string>
<string name="revanced_hide_shorts_history_summary_on">Hidden in watch history</string> <string name="revanced_hide_shorts_history_summary_on">Hidden in watch history</string>
<string name="revanced_hide_shorts_history_summary_off">Shown in watch history</string> <string name="revanced_hide_shorts_history_summary_off">Shown in watch history</string>
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. --> <!-- '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_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_on">Join button is hidden</string>
<string name="revanced_hide_shorts_join_button_summary_off">Join button is shown</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. --> <!-- '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_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_on">Subscribe button is hidden</string>
<string name="revanced_hide_shorts_subscribe_button_summary_off">Subscribe button is shown</string> <string name="revanced_hide_shorts_subscribe_button_summary_off">Subscribe button is shown</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Hide paused overlay buttons</string> <string name="revanced_hide_shorts_paused_overlay_buttons_title">Hide paused overlay buttons</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">Paused overlay buttons are hidden</string> <string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">Paused overlay buttons are hidden</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">Paused overlay buttons are shown</string> <string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">Paused overlay buttons are shown</string>
<string name="revanced_hide_shorts_shop_button_title">Hide shop button</string> <string name="revanced_hide_shorts_shop_button_title">Hide Shop button</string>
<string name="revanced_hide_shorts_shop_button_summary_on">Shop button is hidden</string> <string name="revanced_hide_shorts_shop_button_summary_on">Shop button is hidden</string>
<string name="revanced_hide_shorts_shop_button_summary_off">Shop button is shown</string> <string name="revanced_hide_shorts_shop_button_summary_off">Shop button is shown</string>
<string name="revanced_hide_shorts_super_thanks_button_title">Hide super thanks button</string> <string name="revanced_hide_shorts_super_thanks_button_title">Hide Buy Super Thanks button</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Super thanks button is hidden</string> <string name="revanced_hide_shorts_super_thanks_button_summary_on">Super Thanks button is hidden</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Super thanks button is shown</string> <string name="revanced_hide_shorts_super_thanks_button_summary_off">Super Thanks button is shown</string>
<string name="revanced_hide_shorts_tagged_products_title">Hide tagged products</string> <string name="revanced_hide_shorts_tagged_products_title">Hide tagged products</string>
<string name="revanced_hide_shorts_tagged_products_summary_on">Tagged products are hidden</string> <string name="revanced_hide_shorts_tagged_products_summary_on">Tagged products are hidden</string>
<string name="revanced_hide_shorts_tagged_products_summary_off">Tagged products are shown</string> <string name="revanced_hide_shorts_tagged_products_summary_off">Tagged products are shown</string>
<string name="revanced_hide_shorts_location_label_title">Hide location label</string> <string name="revanced_hide_shorts_location_label_title">Hide location label</string>
<string name="revanced_hide_shorts_location_label_summary_on">Location label is hidden</string> <string name="revanced_hide_shorts_location_label_summary_on">Location label is hidden</string>
<string name="revanced_hide_shorts_location_label_summary_off">Location label is shown</string> <string name="revanced_hide_shorts_location_label_summary_off">Location label is shown</string>
<string name="revanced_hide_shorts_save_sound_button_title">Hide save music button</string> <string name="revanced_hide_shorts_save_sound_button_title">Hide Save music button</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Save music button is hidden</string> <string name="revanced_hide_shorts_save_sound_button_summary_on">Save music button is hidden</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Save music button is shown</string> <string name="revanced_hide_shorts_save_sound_button_summary_off">Save music button is shown</string>
<string name="revanced_hide_shorts_use_template_button_title">Hide use template button</string> <string name="revanced_hide_shorts_use_template_button_title">Hide Use template button</string>
<string name="revanced_hide_shorts_use_template_button_summary_on">Use template button is hidden</string> <string name="revanced_hide_shorts_use_template_button_summary_on">Use template button is hidden</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">Use template button is shown</string> <string name="revanced_hide_shorts_use_template_button_summary_off">Use template button is shown</string>
<string name="revanced_hide_shorts_upcoming_button_title">Hide upcoming button</string> <string name="revanced_hide_shorts_upcoming_button_title">Hide Upcoming button</string>
<string name="revanced_hide_shorts_upcoming_button_summary_on">Upcoming button is hidden</string> <string name="revanced_hide_shorts_upcoming_button_summary_on">Upcoming button is hidden</string>
<string name="revanced_hide_shorts_upcoming_button_summary_off">Upcoming button is shown</string> <string name="revanced_hide_shorts_upcoming_button_summary_off">Upcoming button is shown</string>
<string name="revanced_hide_shorts_green_screen_button_title">Hide green screen button</string> <string name="revanced_hide_shorts_green_screen_button_title">Hide Green screen button</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">Green screen button is hidden</string> <string name="revanced_hide_shorts_green_screen_button_summary_on">Green screen button is hidden</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Green screen button is shown</string> <string name="revanced_hide_shorts_green_screen_button_summary_off">Green screen button is shown</string>
<string name="revanced_hide_shorts_hashtag_button_title">Hide hashtag button</string> <string name="revanced_hide_shorts_hashtag_button_title">Hide hashtag button</string>
@@ -751,24 +757,24 @@ Note: Enabling this also forcibly hides video ads"</string>
<string name="revanced_hide_shorts_stickers_title">Hide stickers</string> <string name="revanced_hide_shorts_stickers_title">Hide stickers</string>
<string name="revanced_hide_shorts_stickers_summary_on">Stickers are hidden</string> <string name="revanced_hide_shorts_stickers_summary_on">Stickers are hidden</string>
<string name="revanced_hide_shorts_stickers_summary_off">Stickers are shown</string> <string name="revanced_hide_shorts_stickers_summary_off">Stickers are shown</string>
<string name="revanced_hide_shorts_like_fountain_title">Hide like fountain</string> <string name="revanced_hide_shorts_like_fountain_title">Hide Like button fountain animation</string>
<string name="revanced_hide_shorts_like_fountain_summary_on">Like button fountain animation is hidden</string> <string name="revanced_hide_shorts_like_fountain_summary_on">Like button fountain animation is hidden</string>
<string name="revanced_hide_shorts_like_fountain_summary_off">Like button fountain animation is shown</string> <string name="revanced_hide_shorts_like_fountain_summary_off">Like button fountain animation is shown</string>
<string name="revanced_hide_shorts_like_button_title">Hide like button</string> <string name="revanced_hide_shorts_like_button_title">Hide Like button</string>
<string name="revanced_hide_shorts_like_button_summary_on">Like button is hidden</string> <string name="revanced_hide_shorts_like_button_summary_on">Like button is hidden</string>
<string name="revanced_hide_shorts_like_button_summary_off">Like button is shown</string> <string name="revanced_hide_shorts_like_button_summary_off">Like button is shown</string>
<string name="revanced_hide_shorts_dislike_button_title">Hide dislike button</string> <string name="revanced_hide_shorts_dislike_button_title">Hide Dislike button</string>
<string name="revanced_hide_shorts_dislike_button_summary_on">Dislike button is hidden</string> <string name="revanced_hide_shorts_dislike_button_summary_on">Dislike button is hidden</string>
<string name="revanced_hide_shorts_dislike_button_summary_off">Dislike button is shown</string> <string name="revanced_hide_shorts_dislike_button_summary_off">Dislike button is shown</string>
<string name="revanced_hide_shorts_comments_button_title">Hide comments button</string> <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_on">Comments button is hidden</string>
<string name="revanced_hide_shorts_comments_button_summary_off">Comments button is shown</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. --> <!-- '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_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_on">Remix button is hidden</string>
<string name="revanced_hide_shorts_remix_button_summary_off">Remix button is shown</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. --> <!-- '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_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_on">Share button is hidden</string>
<string name="revanced_hide_shorts_share_button_summary_off">Share button is shown</string> <string name="revanced_hide_shorts_share_button_summary_off">Share button is shown</string>
<string name="revanced_hide_shorts_info_panel_title">Hide info panel</string> <string name="revanced_hide_shorts_info_panel_title">Hide info panel</string>
@@ -847,7 +853,7 @@ Limitation: Dislikes may not appear in incognito mode"</string>
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes shown 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> <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' --> <!-- 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_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_on">Like button styled for minimum width</string>
<string name="revanced_ryd_compact_layout_summary_off">Like button styled for best appearance</string> <string name="revanced_ryd_compact_layout_summary_off">Like button styled for best appearance</string>
<string name="revanced_ryd_toast_on_connection_error_title">Show a toast if API is not available</string> <string name="revanced_ryd_toast_on_connection_error_title">Show a toast if API is not available</string>
@@ -897,7 +903,7 @@ This feature works best with a video quality of 720p or lower and when using a v
<patch id="layout.sponsorblock.sponsorBlockResourcePatch"> <patch id="layout.sponsorblock.sponsorBlockResourcePatch">
<string name="revanced_sb_settings_title">SponsorBlock</string> <string name="revanced_sb_settings_title">SponsorBlock</string>
<string name="revanced_sb_enable_sb">Enable SponsorBlock</string> <string name="revanced_sb_enable_sb">Enable SponsorBlock</string>
<string name="revanced_sb_enable_sb_sum">SponsorBlock is a crowd-sourced system for skipping annoying parts of YouTube videos</string> <string name="revanced_sb_enable_sb_sum">SponsorBlock is a crowdsourced system for skipping annoying parts of YouTube videos</string>
<string name="revanced_sb_appearance_category">Appearance</string> <string name="revanced_sb_appearance_category">Appearance</string>
<string name="revanced_sb_enable_voting">Show voting button</string> <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_on">Segment voting button is shown</string>
@@ -962,7 +968,7 @@ Your user id is like a password and it should never be shared.
<string name="revanced_sb_segments_sponsor">Sponsor</string> <string name="revanced_sb_segments_sponsor">Sponsor</string>
<string name="revanced_sb_segments_sponsor_sum">Paid promotion, paid referrals and direct advertisements. Not for self-promotion or free shout-outs to causes/creators/websites/products they like</string> <string name="revanced_sb_segments_sponsor_sum">Paid promotion, paid referrals and direct advertisements. Not for self-promotion or free shout-outs to causes/creators/websites/products they like</string>
<string name="revanced_sb_segments_selfpromo">Unpaid/Self Promotion</string> <string name="revanced_sb_segments_selfpromo">Unpaid/Self Promotion</string>
<string name="revanced_sb_segments_selfpromo_sum">Similar to \'Sponsor\' except for unpaid or self promotion. Includes sections about merchandise, donations, or information about who they collaborated with</string> <string name="revanced_sb_segments_selfpromo_sum">Similar to Sponsor except for unpaid or self promotion. Includes sections about merchandise, donations, or information about who they collaborated with</string>
<string name="revanced_sb_segments_interaction">Interaction Reminder (Subscribe)</string> <string name="revanced_sb_segments_interaction">Interaction Reminder (Subscribe)</string>
<string name="revanced_sb_segments_interaction_sum">A short reminder to like, subscribe or follow them in the middle of content. If it is long or about something specific, it should instead be under self promotion</string> <string name="revanced_sb_segments_interaction_sum">A short reminder to like, subscribe or follow them in the middle of content. If it is long or about something specific, it should instead be under self promotion</string>
<string name="revanced_sb_segments_highlight">Highlight</string> <string name="revanced_sb_segments_highlight">Highlight</string>
@@ -1367,6 +1373,11 @@ Enabling this can unlock higher video qualities"</string>
<string name="revanced_playback_speed_default_title">Default playback speed</string> <string name="revanced_playback_speed_default_title">Default playback speed</string>
<string name="revanced_remember_playback_speed_toast">Changed default speed to: %s</string> <string name="revanced_remember_playback_speed_toast">Changed default speed to: %s</string>
</patch> </patch>
<patch id="video.hdr.disableHdrPatch">
<string name="revanced_disable_hdr_video_title">Disable HDR video</string>
<string name="revanced_disable_hdr_video_summary_on">HDR video is disabled</string>
<string name="revanced_disable_hdr_video_summary_off">HDR video is enabled</string>
</patch>
<patch id="video.videoqualitymenu.restoreOldVideoQualityMenuResourcePatch"> <patch id="video.videoqualitymenu.restoreOldVideoQualityMenuResourcePatch">
<string name="revanced_restore_old_video_quality_menu_title">Restore old video quality menu</string> <string name="revanced_restore_old_video_quality_menu_title">Restore old video quality menu</string>
<string name="revanced_restore_old_video_quality_menu_summary_on">Old video quality menu is shown</string> <string name="revanced_restore_old_video_quality_menu_summary_on">Old video quality menu is shown</string>
@@ -1404,6 +1415,7 @@ AVC has a maximum resolution of 1080p, Opus audio codec is not available, and vi
• Stable volume is not available • Stable volume is not available
• Force original audio is not available"</string> • Force original audio is not available"</string>
<string name="revanced_spoof_video_streams_about_no_av1">• No AV1 video codec</string> <string name="revanced_spoof_video_streams_about_no_av1">• No AV1 video codec</string>
<string name="revanced_spoof_video_streams_about_kids_videos">• Kids videos may not play when logged out or in incognito mode</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Show in Stats for nerds</string> <string name="revanced_spoof_streaming_data_stats_for_nerds_title">Show in Stats for nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Client type is shown in Stats for nerds</string> <string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Client type is shown in Stats for nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Client is hidden in Stats for nerds</string> <string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Client is hidden in Stats for nerds</string>