mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-21 18:03:56 +00:00
Compare commits
8 Commits
v5.10.0-de
...
v5.10.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e79eba81d9 | ||
|
|
a73db03671 | ||
|
|
055ad04281 | ||
|
|
aaeee4a895 | ||
|
|
654b339f66 | ||
|
|
64cdce28a6 | ||
|
|
d01b9a67c5 | ||
|
|
a72404eeab |
28
CHANGELOG.md
28
CHANGELOG.md
@@ -1,3 +1,31 @@
|
|||||||
|
# [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)
|
# [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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,14 +24,16 @@ 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;
|
||||||
private final ByteArrayFilterGroup playerShoppingShelfBuffer;
|
private final ByteArrayFilterGroup playerShoppingShelfBuffer;
|
||||||
|
|
||||||
private final StringFilterGroup fullscreenOverlay;
|
|
||||||
private final ByteArrayFilterGroup endScreenStoreBannerBuffer;
|
|
||||||
|
|
||||||
private final StringFilterGroup channelProfile;
|
private final StringFilterGroup channelProfile;
|
||||||
private final ByteArrayFilterGroup visitStoreButton;
|
private final ByteArrayFilterGroup visitStoreButton;
|
||||||
|
|
||||||
@@ -116,32 +120,23 @@ public final class AdsFilter extends Filter {
|
|||||||
);
|
);
|
||||||
|
|
||||||
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"
|
||||||
);
|
);
|
||||||
|
|
||||||
fullscreenOverlay = new StringFilterGroup(
|
|
||||||
Settings.HIDE_END_SCREEN_STORE_BANNER,
|
|
||||||
"fullscreen_overlay.eml"
|
|
||||||
);
|
|
||||||
|
|
||||||
endScreenStoreBannerBuffer = new ByteArrayFilterGroup(
|
|
||||||
null,
|
|
||||||
"gstatic.com/shopping"
|
|
||||||
);
|
|
||||||
|
|
||||||
channelProfile = new StringFilterGroup(
|
channelProfile = new StringFilterGroup(
|
||||||
null,
|
Settings.HIDE_VISIT_STORE_BUTTON,
|
||||||
"channel_profile.eml"
|
"channel_profile.eml",
|
||||||
|
"page_header.eml"
|
||||||
);
|
);
|
||||||
|
|
||||||
visitStoreButton = new ByteArrayFilterGroup(
|
visitStoreButton = new ByteArrayFilterGroup(
|
||||||
Settings.HIDE_VISIT_STORE_BUTTON,
|
null,
|
||||||
"header_store_button"
|
"header_store_button"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -167,7 +162,6 @@ public final class AdsFilter extends Filter {
|
|||||||
viewProducts,
|
viewProducts,
|
||||||
selfSponsor,
|
selfSponsor,
|
||||||
fullscreenAd,
|
fullscreenAd,
|
||||||
fullscreenOverlay,
|
|
||||||
channelProfile,
|
channelProfile,
|
||||||
webLinkPanel,
|
webLinkPanel,
|
||||||
shoppingLinks,
|
shoppingLinks,
|
||||||
@@ -186,10 +180,8 @@ public final class AdsFilter extends Filter {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (matchedGroup == fullscreenOverlay) {
|
// Check for the index because of likelihood of false positives.
|
||||||
if (contentIndex == 0 && endScreenStoreBannerBuffer.check(protobufBufferArray).isFiltered()) {
|
if (matchedGroup == shoppingLinks && contentIndex != 0) {
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -64,7 +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", FALSE);
|
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);
|
||||||
@@ -179,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);
|
||||||
|
|||||||
@@ -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.3
|
version = 5.10.0-dev.7
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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(
|
||||||
@@ -53,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"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,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) {
|
||||||
@@ -111,7 +136,7 @@ val hideAdsPatch = bytecodePatch(
|
|||||||
.injectHideViewCall(
|
.injectHideViewCall(
|
||||||
insertIndex,
|
insertIndex,
|
||||||
viewRegister,
|
viewRegister,
|
||||||
"Lapp/revanced/extension/youtube/patches/components/AdsFilter;",
|
EXTENSION_CLASS_DESCRIPTOR,
|
||||||
"hideAdAttributionView",
|
"hideAdAttributionView",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"),
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user