Compare commits

...

13 Commits

Author SHA1 Message Date
semantic-release-bot
7651ef0881 chore: Release v5.40.0-dev.10 [skip ci]
# [5.40.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.9...v5.40.0-dev.10) (2025-09-20)

### Bug Fixes

* **YouTube - Spoof video streams:** Add "Force original audio" disclaimer for Android Studio client ([f97d332](f97d33206b))
2025-09-20 18:13:06 +00:00
LisoUseInAIKyrios
f97d33206b fix(YouTube - Spoof video streams): Add "Force original audio" disclaimer for Android Studio client 2025-09-20 22:08:50 +04:00
semantic-release-bot
3d986e6716 chore: Release v5.40.0-dev.9 [skip ci]
# [5.40.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.8...v5.40.0-dev.9) (2025-09-20)

### Features

* **YouTube Music:** Support version `8.10.52` ([#5941](https://github.com/ReVanced/revanced-patches/issues/5941)) ([01c0f1b](01c0f1bd1a))
2025-09-20 16:12:57 +00:00
LisoUseInAIKyrios
01c0f1bd1a feat(YouTube Music): Support version 8.10.52 (#5941) 2025-09-20 20:09:52 +04:00
github-actions[bot]
4178e8a64f chore: Sync translations (#5943) 2025-09-20 20:09:07 +04:00
semantic-release-bot
7e1bb8f3c7 chore: Release v5.40.0-dev.8 [skip ci]
# [5.40.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.7...v5.40.0-dev.8) (2025-09-20)

### Features

* **YouTube:** Support version `20.14.43` ([#5940](https://github.com/ReVanced/revanced-patches/issues/5940)) ([f7f4a1b](f7f4a1b0f0))
2025-09-20 15:33:42 +00:00
LisoUseInAIKyrios
f7f4a1b0f0 feat(YouTube): Support version 20.14.43 (#5940) 2025-09-20 19:30:05 +04:00
semantic-release-bot
e89660d234 chore: Release v5.40.0-dev.7 [skip ci]
# [5.40.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.6...v5.40.0-dev.7) (2025-09-20)

### Features

* **YouTube - Hide video action buttons:** Add "Hide comments" button ([db796fb](db796fb883))
2025-09-20 15:03:00 +00:00
LisoUseInAIKyrios
db796fb883 feat(YouTube - Hide video action buttons): Add "Hide comments" button
Button is only shown when using YouTube 20.14+ and the video information area is collapsed to a compact state
2025-09-20 19:00:00 +04:00
LisoUseInAIKyrios
6bb8bad8d7 chore(YouTube Music): Fix fingerprint typo, change hide cast button to default off 2025-09-20 18:03:41 +04:00
semantic-release-bot
aa1fb41ad8 chore: Release v5.40.0-dev.6 [skip ci]
# [5.40.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.5...v5.40.0-dev.6) (2025-09-20)

### Features

* **YouTube Music:** Add `Enable debugging` patch ([#5939](https://github.com/ReVanced/revanced-patches/issues/5939)) ([418f594](418f5945c2))
2025-09-20 12:37:33 +00:00
LisoUseInAIKyrios
418f5945c2 feat(YouTube Music): Add Enable debugging patch (#5939) 2025-09-20 16:33:03 +04:00
github-actions[bot]
e26c971067 chore: Sync translations (#5942) 2025-09-20 16:32:50 +04:00
170 changed files with 2957 additions and 985 deletions

View File

@@ -1,3 +1,38 @@
# [5.40.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.9...v5.40.0-dev.10) (2025-09-20)
### Bug Fixes
* **YouTube - Spoof video streams:** Add "Force original audio" disclaimer for Android Studio client ([f97d332](https://github.com/ReVanced/revanced-patches/commit/f97d33206b4c97244f0bd0c672c4b91eaf477b0b))
# [5.40.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.8...v5.40.0-dev.9) (2025-09-20)
### Features
* **YouTube Music:** Support version `8.10.52` ([#5941](https://github.com/ReVanced/revanced-patches/issues/5941)) ([01c0f1b](https://github.com/ReVanced/revanced-patches/commit/01c0f1bd1ac6edb8aea758f88ffffcdea74a29b7))
# [5.40.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.7...v5.40.0-dev.8) (2025-09-20)
### Features
* **YouTube:** Support version `20.14.43` ([#5940](https://github.com/ReVanced/revanced-patches/issues/5940)) ([f7f4a1b](https://github.com/ReVanced/revanced-patches/commit/f7f4a1b0f0186598266b41a2c6a781fdee49e440))
# [5.40.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.6...v5.40.0-dev.7) (2025-09-20)
### Features
* **YouTube - Hide video action buttons:** Add "Hide comments" button ([db796fb](https://github.com/ReVanced/revanced-patches/commit/db796fb8830b813e1ed626d491c4a797171e69e7))
# [5.40.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.5...v5.40.0-dev.6) (2025-09-20)
### Features
* **YouTube Music:** Add `Enable debugging` patch ([#5939](https://github.com/ReVanced/revanced-patches/issues/5939)) ([418f594](https://github.com/ReVanced/revanced-patches/commit/418f5945c213313f9a77cac9a5c326d89c754dfd))
# [5.40.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.4...v5.40.0-dev.5) (2025-09-20) # [5.40.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.40.0-dev.4...v5.40.0-dev.5) (2025-09-20)

View File

@@ -1,14 +0,0 @@
package app.revanced.extension.music.patches;
import app.revanced.extension.music.settings.Settings;
@SuppressWarnings("unused")
public class HideUpgradeButtonPatch {
/**
* Injection point
*/
public static boolean hideUpgradeButton() {
return Settings.HIDE_UPGRADE_BUTTON.get();
}
}

View File

@@ -15,10 +15,9 @@ public class Settings extends BaseSettings {
// Ads // Ads
public static final BooleanSetting HIDE_VIDEO_ADS = new BooleanSetting("revanced_music_hide_video_ads", TRUE, true); public static final BooleanSetting HIDE_VIDEO_ADS = new BooleanSetting("revanced_music_hide_video_ads", TRUE, true);
public static final BooleanSetting HIDE_GET_PREMIUM_LABEL = new BooleanSetting("revanced_music_hide_get_premium_label", TRUE, true); public static final BooleanSetting HIDE_GET_PREMIUM_LABEL = new BooleanSetting("revanced_music_hide_get_premium_label", TRUE, true);
public static final BooleanSetting HIDE_UPGRADE_BUTTON = new BooleanSetting("revanced_music_hide_upgrade_button", TRUE, true);
// General // General
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_music_hide_cast_button", FALSE, false); public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_music_hide_cast_button", TRUE, false);
public static final BooleanSetting HIDE_CATEGORY_BAR = new BooleanSetting("revanced_music_hide_category_bar", FALSE, true); public static final BooleanSetting HIDE_CATEGORY_BAR = new BooleanSetting("revanced_music_hide_category_bar", FALSE, true);
public static final BooleanSetting HIDE_NAVIGATION_BAR_HOME_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_home_button", FALSE, true); public static final BooleanSetting HIDE_NAVIGATION_BAR_HOME_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_home_button", FALSE, true);
public static final BooleanSetting HIDE_NAVIGATION_BAR_SAMPLES_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_samples_button", FALSE, true); public static final BooleanSetting HIDE_NAVIGATION_BAR_SAMPLES_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_samples_button", FALSE, true);

View File

@@ -116,7 +116,7 @@ public class Utils {
} }
/** /**
* @return The version name of the app, such as 19.11.43 * @return The version name of the app, such as 20.13.41
*/ */
public static String getAppVersionName() { public static String getAppVersionName() {
if (versionName == null) { if (versionName == null) {

View File

@@ -1,4 +1,4 @@
package app.revanced.extension.youtube.patches; package app.revanced.extension.shared.patches;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;

View File

@@ -7,6 +7,10 @@ final class ButtonsFilter extends Filter {
private static final String COMPACT_CHANNEL_BAR_PATH_PREFIX = "compact_channel_bar.eml"; private static final String COMPACT_CHANNEL_BAR_PATH_PREFIX = "compact_channel_bar.eml";
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.eml"; private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.eml";
private static final String VIDEO_ACTION_BAR_PATH = "video_action_bar.eml"; private static final String VIDEO_ACTION_BAR_PATH = "video_action_bar.eml";
/**
* Video bar path when the video information is collapsed. Seems to shown only with 20.14+
*/
private static final String COMPACTIFY_VIDEO_ACTION_BAR_PATH = "compactify_video_action_bar.eml";
private static final String ANIMATED_VECTOR_TYPE_PATH = "AnimatedVectorType"; private static final String ANIMATED_VECTOR_TYPE_PATH = "AnimatedVectorType";
private final StringFilterGroup likeSubscribeGlow; private final StringFilterGroup likeSubscribeGlow;
@@ -82,6 +86,10 @@ final class ButtonsFilter extends Filter {
Settings.HIDE_STOP_ADS_BUTTON, Settings.HIDE_STOP_ADS_BUTTON,
"yt_outline_slash_circle_left" "yt_outline_slash_circle_left"
), ),
new ByteArrayFilterGroup(
Settings.HIDE_COMMENTS_BUTTON,
"yt_outline_message_bubble_right"
),
// Check for clip button both here and using a path filter, // Check for clip button both here and using a path filter,
// as there's a chance the path is a generic action button and won't contain 'clip_button' // as there's a chance the path is a generic action button and won't contain 'clip_button'
new ByteArrayFilterGroup( new ByteArrayFilterGroup(
@@ -124,9 +132,8 @@ final class ButtonsFilter extends Filter {
} }
if (matchedGroup == bufferFilterPathGroup) { if (matchedGroup == bufferFilterPathGroup) {
// Make sure the current path is the right one // Make sure the current path is the right one to avoid false positives.
// to avoid false positives. return (path.startsWith(VIDEO_ACTION_BAR_PATH) || path.startsWith(COMPACTIFY_VIDEO_ACTION_BAR_PATH))
return path.startsWith(VIDEO_ACTION_BAR_PATH)
&& bufferButtonsGroupList.check(buffer).isFiltered(); && bufferButtonsGroupList.check(buffer).isFiltered();
} }

View File

@@ -32,6 +32,7 @@ import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehavi
import android.graphics.Color; import android.graphics.Color;
import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseSettings; import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.settings.BooleanSetting; import app.revanced.extension.shared.settings.BooleanSetting;
import app.revanced.extension.shared.settings.EnumSetting; import app.revanced.extension.shared.settings.EnumSetting;
@@ -222,6 +223,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE); public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
public static final BooleanSetting HIDE_ASK_BUTTON = new BooleanSetting("revanced_hide_ask_button", FALSE); public static final BooleanSetting HIDE_ASK_BUTTON = new BooleanSetting("revanced_hide_ask_button", FALSE);
public static final BooleanSetting HIDE_CLIP_BUTTON = new BooleanSetting("revanced_hide_clip_button", TRUE); public static final BooleanSetting HIDE_CLIP_BUTTON = new BooleanSetting("revanced_hide_clip_button", TRUE);
public static final BooleanSetting HIDE_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_comments_button", TRUE);
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE); public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
public static final BooleanSetting HIDE_HYPE_BUTTON = new BooleanSetting("revanced_hide_hype_button", FALSE); public static final BooleanSetting HIDE_HYPE_BUTTON = new BooleanSetting("revanced_hide_hype_button", FALSE);
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE); public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
@@ -513,10 +515,14 @@ public class Settings extends BaseSettings {
DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.resetToDefault(); DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.resetToDefault();
} }
// Old spoof versions that no longer work. // Old spoof versions that no longer work,
if (SPOOF_APP_VERSION_TARGET.get().compareTo(SPOOF_APP_VERSION_TARGET.defaultValue) < 0) { // or is spoofing to a version the same or newer than this app.
Logger.printInfo(() -> "Resetting spoof app version target"); if (!SPOOF_APP_VERSION_TARGET.isSetToDefault() &&
(SPOOF_APP_VERSION_TARGET.get().compareTo(SPOOF_APP_VERSION_TARGET.defaultValue) < 0
|| (Utils.getAppVersionName().compareTo(SPOOF_APP_VERSION_TARGET.get()) <= 0))) {
Logger.printInfo(() -> "Resetting spoof app version");
SPOOF_APP_VERSION_TARGET.resetToDefault(); SPOOF_APP_VERSION_TARGET.resetToDefault();
SPOOF_APP_VERSION.resetToDefault();
} }
// RYD requires manually migrating old settings since the lack of // RYD requires manually migrating old settings since the lack of

View File

@@ -95,6 +95,7 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
+ '\n' + str("revanced_spoof_video_streams_about_kids_videos"); + '\n' + str("revanced_spoof_video_streams_about_kids_videos");
} else if (clientType == ClientType.ANDROID_CREATOR) { } else if (clientType == ClientType.ANDROID_CREATOR) {
summary += '\n' + str("revanced_spoof_video_streams_about_no_av1") summary += '\n' + str("revanced_spoof_video_streams_about_no_av1")
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio")
+ '\n' + str("revanced_spoof_video_streams_about_kids_videos"); + '\n' + str("revanced_spoof_video_streams_about_kids_videos");
} }

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.40.0-dev.5 version = 5.40.0-dev.10

View File

@@ -401,6 +401,10 @@ public final class app/revanced/patches/music/misc/backgroundplayback/Background
public static final fun getBackgroundPlaybackPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getBackgroundPlaybackPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }
public final class app/revanced/patches/music/misc/debugging/EnableDebuggingPatchKt {
public static final fun getEnableDebuggingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/misc/extension/SharedExtensionPatchKt { public final class app/revanced/patches/music/misc/extension/SharedExtensionPatchKt {
public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
} }

View File

@@ -24,7 +24,8 @@ val hideVideoAdsPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -17,7 +17,8 @@ val enableExclusiveAudioPlaybackPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -27,7 +27,8 @@ val permanentRepeatPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -11,7 +11,8 @@ val permanentShufflePatch = bytecodePatch(
) { ) {
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -33,7 +33,8 @@ val hideCastButton = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -1,6 +1,5 @@
package app.revanced.patches.music.layout.compactheader package app.revanced.patches.music.layout.compactheader
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.bytecodePatch
@@ -10,7 +9,6 @@ import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.settings.PreferenceScreen import app.revanced.patches.music.misc.settings.PreferenceScreen
import app.revanced.patches.music.misc.settings.settingsPatch import app.revanced.patches.music.misc.settings.settingsPatch
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.util.addInstructionsAtControlFlowLabel
import app.revanced.util.findFreeRegister import app.revanced.util.findFreeRegister
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@@ -29,7 +27,8 @@ val hideCategoryBar = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -1,11 +1,11 @@
package app.revanced.patches.music.layout.navigationbar package app.revanced.patches.music.layout.navigationbar
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint import app.revanced.patcher.fingerprint
import app.revanced.util.containsLiteralInstruction
import app.revanced.util.getReference import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction import app.revanced.util.indexOfFirstInstruction
import app.revanced.util.literal import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@@ -23,9 +23,9 @@ internal val tabLayoutTextFingerprint = fingerprint {
Opcode.MOVE_RESULT Opcode.MOVE_RESULT
) )
strings("FEmusic_search") strings("FEmusic_search")
literal { text1 }
custom { method, _ -> custom { method, _ ->
indexOfGetVisibilityInstruction(method) >= 0 method.containsLiteralInstruction(text1)
&& indexOfGetVisibilityInstruction(method) >= 0
} }
} }

View File

@@ -40,7 +40,8 @@ val navigationBarPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -28,7 +28,8 @@ val hideGetPremiumPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -1,18 +0,0 @@
package app.revanced.patches.music.layout.upgradebutton
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val pivotBarConstructorFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
returns("V")
parameters("L", "Z")
opcodes(
Opcode.CHECK_CAST,
Opcode.INVOKE_INTERFACE,
Opcode.GOTO,
Opcode.IPUT_OBJECT,
Opcode.RETURN_VOID
)
}

View File

@@ -1,104 +1,12 @@
package app.revanced.patches.music.layout.upgradebutton package app.revanced.patches.music.layout.upgradebutton
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.extensions.newLabel
import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.util.smali.toInstructions import app.revanced.patches.music.layout.navigationbar.navigationBarPatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.settings.PreferenceScreen
import app.revanced.patches.music.misc.settings.settingsPatch
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.util.getReference
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22t
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideUpgradeButtonPatch;" @Deprecated("Patch is obsolete and was replaced by navigation bar patch", ReplaceWith("navigationBarPatch"))
@Deprecated("This patch will be removed in the future.")
@Suppress("unused") @Suppress("unused")
val hideUpgradeButton = bytecodePatch( val hideUpgradeButton = bytecodePatch{
description = "Hides the upgrade tab from the pivot bar.", dependsOn(navigationBarPatch)
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
)
compatibleWith(
"com.google.android.apps.youtube.music"(
"7.29.52"
)
)
execute {
addResources("music", "layout.upgradebutton.hideUpgradeButtonPatch")
// TODO: Add an extension patch to allow this to be enabled/disabled in app.
if (false) {
PreferenceScreen.ADS.addPreferences(
SwitchPreference("revanced_music_hide_upgrade_button")
)
}
pivotBarConstructorFingerprint.method.apply {
val pivotBarElementFieldReference =
getInstruction(pivotBarConstructorFingerprint.patternMatch!!.endIndex - 1)
.getReference<FieldReference>()
val register = getInstruction<FiveRegisterInstruction>(0).registerC
// First compile all the needed instructions.
val instructionList = """
invoke-interface { v0 }, Ljava/util/List;->size()I
move-result v1
const/4 v2, 0x4
invoke-interface {v0, v2}, Ljava/util/List;->remove(I)Ljava/lang/Object;
iput-object v0, v$register, $pivotBarElementFieldReference
""".toInstructions().toMutableList()
val endIndex = pivotBarConstructorFingerprint.patternMatch!!.endIndex
// Replace the instruction to retain the label at given index.
replaceInstruction(
endIndex - 1,
instructionList[0], // invoke-interface.
)
// Do not forget to remove this instruction since we added it already.
instructionList.removeFirst()
val exitInstruction = instructionList.last() // iput-object
addInstruction(
endIndex,
exitInstruction,
)
// Do not forget to remove this instruction since we added it already.
instructionList.removeLast()
// Add the necessary if statement to remove the upgrade tab button in case it exists.
instructionList.add(
2, // if-le.
BuilderInstruction22t(
Opcode.IF_LE,
1,
2,
newLabel(endIndex),
),
)
addInstructions(
endIndex,
instructionList,
)
}
}
} }
@Deprecated("Patch was renamed", ReplaceWith("hideUpgradeButton")) @Deprecated("Patch was renamed", ReplaceWith("hideUpgradeButton"))

View File

@@ -17,7 +17,8 @@ val bypassCertificateChecksPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -17,7 +17,8 @@ val backgroundPlaybackPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )

View File

@@ -0,0 +1,25 @@
package app.revanced.patches.music.misc.debugging
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.settings.PreferenceScreen
import app.revanced.patches.music.misc.settings.settingsPatch
import app.revanced.patches.shared.misc.debugging.enableDebuggingPatch
@Suppress("unused")
val enableDebuggingPatch = enableDebuggingPatch(
block = {
dependsOn(
sharedExtensionPatch,
settingsPatch,
)
compatibleWith(
"com.google.android.apps.youtube.music"(
"7.29.52"
)
)
},
// String feature flag does not appear to be present with YT Music.
hookStringFeatureFlag = false,
preferenceScreen = PreferenceScreen.MISC
)

View File

@@ -8,12 +8,16 @@ import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.music.misc.extension.sharedExtensionPatch import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.settings.preference.* import app.revanced.patches.shared.misc.settings.preference.BasePreference
import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.shared.misc.settings.settingsPatch import app.revanced.patches.shared.misc.settings.settingsPatch
import app.revanced.util.* import app.revanced.util.ResourceGroup
import app.revanced.util.copyResources
import app.revanced.util.copyXmlNode
import app.revanced.util.inputStreamFromBundledResource
import com.android.tools.smali.dexlib2.util.MethodUtil import com.android.tools.smali.dexlib2.util.MethodUtil
private const val BASE_ACTIVITY_HOOK_CLASS_DESCRIPTOR = private const val BASE_ACTIVITY_HOOK_CLASS_DESCRIPTOR =
@@ -23,7 +27,6 @@ private const val GOOGLE_API_ACTIVITY_HOOK_CLASS_DESCRIPTOR =
private val preferences = mutableSetOf<BasePreference>() private val preferences = mutableSetOf<BasePreference>()
private val settingsResourcePatch = resourcePatch { private val settingsResourcePatch = resourcePatch {
dependsOn( dependsOn(
resourceMappingPatch, resourceMappingPatch,
@@ -87,27 +90,6 @@ val settingsPatch = bytecodePatch(
addResources("music", "misc.settings.settingsPatch") addResources("music", "misc.settings.settingsPatch")
addResources("shared", "misc.debugging.enableDebuggingPatch") addResources("shared", "misc.debugging.enableDebuggingPatch")
// Should make a separate debugging patch, but for now include it with all installations.
PreferenceScreen.MISC.addPreferences(
PreferenceScreenPreference(
key = "revanced_debug_screen",
sorting = Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_debug"),
NonInteractivePreference(
"revanced_debug_export_logs_to_clipboard",
tag = "app.revanced.extension.shared.settings.preference.ExportLogToClipboardPreference",
selectable = true
),
NonInteractivePreference(
"revanced_debug_logs_clear_buffer",
tag = "app.revanced.extension.shared.settings.preference.ClearLogBufferPreference",
selectable = true
)
)
)
)
// Add an "About" preference to the top. // Add an "About" preference to the top.
preferences += NonInteractivePreference( preferences += NonInteractivePreference(
key = "revanced_settings_music_screen_0_about", key = "revanced_settings_music_screen_0_about",
@@ -154,19 +136,19 @@ fun newIntent(settingsName: String) = IntentPreference.Intent(
object PreferenceScreen : BasePreferenceScreen() { object PreferenceScreen : BasePreferenceScreen() {
val ADS = Screen( val ADS = Screen(
"revanced_settings_music_screen_1_ads", key = "revanced_settings_music_screen_1_ads",
summaryKey = null summaryKey = null
) )
val GENERAL = Screen( val GENERAL = Screen(
"revanced_settings_music_screen_2_general", key = "revanced_settings_music_screen_2_general",
summaryKey = null summaryKey = null
) )
val PLAYER = Screen( val PLAYER = Screen(
"revanced_settings_music_screen_3_player", key = "revanced_settings_music_screen_3_player",
summaryKey = null summaryKey = null
) )
val MISC = Screen( val MISC = Screen(
"revanced_settings_music_screen_4_misc", key = "revanced_settings_music_screen_4_misc",
summaryKey = null summaryKey = null
) )

View File

@@ -33,7 +33,8 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
compatibleWith( compatibleWith(
"com.google.android.apps.youtube.music"( "com.google.android.apps.youtube.music"(
"7.29.52" "7.29.52",
"8.10.52"
) )
) )
}, },

View File

@@ -0,0 +1,147 @@
package app.revanced.patches.shared.misc.debugging
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.BytecodePatchBuilder
import app.revanced.patcher.patch.BytecodePatchContext
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.BasePreference
import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/shared/patches/EnableDebuggingPatch;"
/**
* Patch shared with YouTube and YT Music.
*/
internal fun enableDebuggingPatch(
block: BytecodePatchBuilder.() -> Unit = {},
executeBlock: BytecodePatchContext.() -> Unit = {},
hookStringFeatureFlag: Boolean,
preferenceScreen: BasePreferenceScreen.Screen,
additionalDebugPreferences: List<BasePreference> = emptyList()
) = bytecodePatch(
name = "Enable debugging",
description = "Adds options for debugging and exporting ReVanced logs to the clipboard.",
) {
dependsOn(addResourcesPatch)
block()
execute {
executeBlock()
addResources("shared", "misc.debugging.enableDebuggingPatch")
val preferences = mutableSetOf<BasePreference>(
SwitchPreference("revanced_debug"),
)
preferences.addAll(additionalDebugPreferences)
preferences.addAll(
listOf(
SwitchPreference("revanced_debug_stacktrace"),
SwitchPreference("revanced_debug_toast_on_error"),
NonInteractivePreference(
"revanced_debug_export_logs_to_clipboard",
tag = "app.revanced.extension.shared.settings.preference.ExportLogToClipboardPreference",
selectable = true
),
NonInteractivePreference(
"revanced_debug_logs_clear_buffer",
tag = "app.revanced.extension.shared.settings.preference.ClearLogBufferPreference",
selectable = true
)
)
)
preferenceScreen.addPreferences(
PreferenceScreenPreference(
key = "revanced_debug_screen",
sorting = Sorting.UNSORTED,
preferences = preferences,
)
)
// Hook the methods that look up if a feature flag is active.
experimentalBooleanFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
findInstructionIndicesReversedOrThrow(Opcode.RETURN).forEach { index ->
val register = getInstruction<OneRegisterInstruction>(index).registerA
addInstructions(
index,
"""
invoke-static { v$register, p1 }, $EXTENSION_CLASS_DESCRIPTOR->isBooleanFeatureFlagEnabled(ZLjava/lang/Long;)Z
move-result v$register
"""
)
}
}
experimentalDoubleFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
val insertIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT_WIDE)
addInstructions(
insertIndex,
"""
move-result-wide v0 # Also clobbers v1 (p0) since result is wide.
invoke-static/range { v0 .. v5 }, $EXTENSION_CLASS_DESCRIPTOR->isDoubleFeatureFlagEnabled(DJD)D
move-result-wide v0
return-wide v0
"""
)
}
experimentalLongFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
val insertIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT_WIDE)
addInstructions(
insertIndex,
"""
move-result-wide v0
invoke-static/range { v0 .. v5 }, $EXTENSION_CLASS_DESCRIPTOR->isLongFeatureFlagEnabled(JJJ)J
move-result-wide v0
return-wide v0
"""
)
}
if (hookStringFeatureFlag) experimentalStringFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.MOVE_RESULT_OBJECT)
addInstructions(
insertIndex,
"""
move-result-object v0
invoke-static { v0, p1, p2, p3 }, $EXTENSION_CLASS_DESCRIPTOR->isStringFeatureFlagEnabled(Ljava/lang/String;JLjava/lang/String;)Ljava/lang/String;
move-result-object v0
return-object v0
"""
)
}
// There exists other experimental accessor methods for byte[]
// and wrappers for obfuscated classes, but currently none of those are hooked.
}
}

View File

@@ -0,0 +1,35 @@
package app.revanced.patches.shared.misc.debugging
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val experimentalFeatureFlagParentFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("L")
parameters("L", "J", "[B")
strings("Unable to parse proto typed experiment flag: ")
}
internal val experimentalBooleanFeatureFlagFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("Z")
parameters("L", "J", "Z")
}
internal val experimentalDoubleFeatureFlagFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("D")
parameters("J", "D")
}
internal val experimentalLongFeatureFlagFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("J")
parameters("J", "J")
}
internal val experimentalStringFeatureFlagFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Ljava/lang/String;")
parameters("J", "Ljava/lang/String;")
}

View File

@@ -1,9 +1,13 @@
package app.revanced.patches.shared.misc.spoof package app.revanced.patches.shared.misc.spoof
import app.revanced.patcher.fingerprint import app.revanced.patcher.fingerprint
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction
import app.revanced.util.literal import app.revanced.util.literal
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
internal val buildInitPlaybackRequestFingerprint = fingerprint { internal val buildInitPlaybackRequestFingerprint = fingerprint {
returns("Lorg/chromium/net/UrlRequest\$Builder;") returns("Lorg/chromium/net/UrlRequest\$Builder;")
@@ -37,10 +41,6 @@ internal val buildRequestFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC) accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("Lorg/chromium/net/UrlRequest") // UrlRequest; or UrlRequest$Builder; returns("Lorg/chromium/net/UrlRequest") // UrlRequest; or UrlRequest$Builder;
custom { methodDef, _ -> custom { methodDef, _ ->
if (indexOfNewUrlRequestBuilderInstruction(methodDef) < 0) {
return@custom false
}
// Different targets have slightly different parameters // Different targets have slightly different parameters
// Earlier targets have parameters: // Earlier targets have parameters:
@@ -74,10 +74,10 @@ internal val buildRequestFingerprint = fingerprint {
val parameterTypesSize = parameterTypes.size val parameterTypesSize = parameterTypes.size
(parameterTypesSize == 6 || parameterTypesSize == 7 || parameterTypesSize == 8) && (parameterTypesSize == 6 || parameterTypesSize == 7 || parameterTypesSize == 8) &&
parameterTypes[1] == "Ljava/util/Map;" // URL headers. parameterTypes[1] == "Ljava/util/Map;" // URL headers.
&& indexOfNewUrlRequestBuilderInstruction(methodDef) >= 0
} }
} }
internal val protobufClassParseByteBufferFingerprint = fingerprint { internal val protobufClassParseByteBufferFingerprint = fingerprint {
accessFlags(AccessFlags.PROTECTED, AccessFlags.STATIC) accessFlags(AccessFlags.PROTECTED, AccessFlags.STATIC)
returns("L") returns("L")
@@ -191,3 +191,13 @@ internal val playbackStartDescriptorFeatureFlagFingerprint = fingerprint {
returns("Z") returns("Z")
literal { PLAYBACK_START_CHECK_ENDPOINT_USED_FEATURE_FLAG } literal { PLAYBACK_START_CHECK_ENDPOINT_USED_FEATURE_FLAG }
} }
internal fun indexOfNewUrlRequestBuilderInstruction(method: Method) = method.indexOfFirstInstruction {
val reference = getReference<MethodReference>()
opcode == Opcode.INVOKE_VIRTUAL && reference?.definingClass == "Lorg/chromium/net/CronetEngine;"
&& reference.name == "newUrlRequestBuilder"
&& reference.parameterTypes.size == 3
&& reference.parameterTypes[0] == "Ljava/lang/String;"
&& reference.parameterTypes[1] == "Lorg/chromium/net/UrlRequest\$Callback;"
&& reference.parameterTypes[2] == "Ljava/util/concurrent/Executor;"
}

View File

@@ -16,20 +16,17 @@ import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.util.findFreeRegister import app.revanced.util.findFreeRegister
import app.revanced.util.findInstructionIndicesReversedOrThrow import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.getReference import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction
import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.insertLiteralOverride import app.revanced.util.insertLiteralOverride
import app.revanced.util.returnEarly import app.revanced.util.returnEarly
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction 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.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
@@ -337,12 +334,3 @@ fun spoofVideoStreamsPatch(
executeBlock() executeBlock()
} }
} }
internal fun indexOfNewUrlRequestBuilderInstruction(method: Method) = method.indexOfFirstInstruction {
opcode == Opcode.INVOKE_VIRTUAL && getReference<MethodReference>().toString() ==
"Lorg/chromium/net/CronetEngine;" +
"->newUrlRequestBuilder(" +
"Ljava/lang/String;Lorg/chromium/net/UrlRequest${'$'}Callback;" +
"Ljava/util/concurrent/Executor;" +
")Lorg/chromium/net/UrlRequest${'$'}Builder;"
}

View File

@@ -78,10 +78,9 @@ val hideAdsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -27,10 +27,9 @@ val hideGetPremiumPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -25,10 +25,9 @@ val videoAdsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -55,10 +55,9 @@ val copyVideoUrlPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -26,10 +26,9 @@ val removeViewerDiscretionDialogPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -29,8 +29,8 @@ val disableDoubleTapActionsPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.youtube"( "com.google.android.youtube"(
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -76,10 +76,9 @@ val downloadsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -22,10 +22,9 @@ val seekbarPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )
} }

View File

@@ -90,10 +90,9 @@ val swipeControlsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -26,10 +26,9 @@ val autoCaptionsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -45,10 +45,9 @@ val customBrandingPatch = resourcePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -95,10 +95,9 @@ val changeHeaderPatch = resourcePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -24,10 +24,9 @@ val hideButtonsPatch = resourcePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )
@@ -41,6 +40,7 @@ val hideButtonsPatch = resourcePatch(
SwitchPreference("revanced_disable_like_subscribe_glow"), SwitchPreference("revanced_disable_like_subscribe_glow"),
SwitchPreference("revanced_hide_ask_button"), SwitchPreference("revanced_hide_ask_button"),
SwitchPreference("revanced_hide_clip_button"), SwitchPreference("revanced_hide_clip_button"),
SwitchPreference("revanced_hide_comments_button"),
SwitchPreference("revanced_hide_download_button"), SwitchPreference("revanced_hide_download_button"),
SwitchPreference("revanced_hide_hype_button"), SwitchPreference("revanced_hide_hype_button"),
SwitchPreference("revanced_hide_like_dislike_button"), SwitchPreference("revanced_hide_like_dislike_button"),

View File

@@ -42,10 +42,9 @@ val navigationButtonsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -60,10 +60,9 @@ val hidePlayerOverlayButtonsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -35,10 +35,9 @@ val changeFormFactorPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -61,10 +61,9 @@ val hideEndscreenCardsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -33,10 +33,9 @@ val hideEndScreenSuggestedVideoPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -31,10 +31,9 @@ val disableFullscreenAmbientModePatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -128,10 +128,9 @@ val hideLayoutComponentsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -59,10 +59,9 @@ val hideInfoCardsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -26,10 +26,9 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -50,10 +50,9 @@ val hideRelatedVideoOverlayPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -31,10 +31,9 @@ val disableRollingNumberAnimationPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -174,10 +174,9 @@ val hideShortsComponentsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -33,10 +33,9 @@ val disableSignInToTvPopupPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -23,10 +23,9 @@ val hideTimestampPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -155,10 +155,9 @@ val miniplayerPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -23,10 +23,9 @@ val playerPopupPanelsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -23,10 +23,9 @@ internal val exitFullscreenPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -25,10 +25,9 @@ val openVideosFullscreenPatch = bytecodePatch(
compatibleWith( compatibleWith(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -54,10 +54,9 @@ val customPlayerOverlayOpacityPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -63,10 +63,9 @@ val returnYouTubeDislikePatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -68,10 +68,9 @@ val wideSearchbarPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -46,10 +46,9 @@ val shortsAutoplayPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -66,10 +66,9 @@ val openShortsInRegularPlayerPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -128,10 +128,9 @@ val sponsorBlockPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -17,6 +17,7 @@ import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPref
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.playservice.is_19_43_or_greater import app.revanced.patches.youtube.misc.playservice.is_19_43_or_greater
import app.revanced.patches.youtube.misc.playservice.is_20_14_or_greater
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch import app.revanced.patches.youtube.misc.settings.settingsPatch
@@ -60,10 +61,9 @@ val spoofAppVersionPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )
@@ -79,17 +79,21 @@ val spoofAppVersionPatch = bytecodePatch(
tag = "app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory", tag = "app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory",
preferences = setOf( preferences = setOf(
SwitchPreference("revanced_spoof_app_version"), SwitchPreference("revanced_spoof_app_version"),
if (is_19_43_or_greater) { if (is_20_14_or_greater) {
ListPreference("revanced_spoof_app_version_target")
} else if (is_19_43_or_greater) {
ListPreference( ListPreference(
key = "revanced_spoof_app_version_target", key = "revanced_spoof_app_version_target",
summaryKey = null summaryKey = null,
entriesKey = "revanced_spoof_app_version_target_legacy_20_13_entries",
entryValuesKey = "revanced_spoof_app_version_target_legacy_20_13_entry_values"
) )
} else { } else {
ListPreference( ListPreference(
key = "revanced_spoof_app_version_target", key = "revanced_spoof_app_version_target",
summaryKey = null, summaryKey = null,
entriesKey = "revanced_spoof_app_version_target_legacy_entries", entriesKey = "revanced_spoof_app_version_target_legacy_19_34_entries",
entryValuesKey = "revanced_spoof_app_version_target_legacy_entry_values" entryValuesKey = "revanced_spoof_app_version_target_legacy_19_34_entry_values"
) )
} }
) )

View File

@@ -34,10 +34,9 @@ val changeStartPagePatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -36,10 +36,9 @@ val disableResumingShortsOnStartupPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -206,10 +206,9 @@ val themePatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -35,10 +35,9 @@ val alternativeThumbnailsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -29,10 +29,9 @@ val bypassImageRegionRestrictionsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -25,10 +25,9 @@ val announcementsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -26,10 +26,9 @@ val autoRepeatPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -53,10 +53,9 @@ val backgroundPlaybackPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -1,144 +1,34 @@
package app.revanced.patches.youtube.misc.debugging package app.revanced.patches.youtube.misc.debugging
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch import app.revanced.patches.shared.misc.debugging.enableDebuggingPatch
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
private const val EXTENSION_CLASS_DESCRIPTOR = @Suppress("unused")
"Lapp/revanced/extension/youtube/patches/EnableDebuggingPatch;" val enableDebuggingPatch = enableDebuggingPatch(
block = {
// TODO: Refactor this into a shared patch that can be used by both YT and YT Music. dependsOn(
// Almost all of the feature flag hooks are the same between both apps. sharedExtensionPatch,
val enableDebuggingPatch = bytecodePatch( settingsPatch,
name = "Enable debugging",
description = "Adds options for debugging and exporting ReVanced logs to the clipboard.",
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
versionCheckPatch
)
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"19.47.53",
"20.07.39",
"20.12.46",
"20.13.41",
) )
)
execute { compatibleWith(
addResources("shared", "misc.debugging.enableDebuggingPatch") "com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",
)
)
},
executeBlock = {
addResources("youtube", "misc.debugging.enableDebuggingPatch") addResources("youtube", "misc.debugging.enableDebuggingPatch")
},
PreferenceScreen.MISC.addPreferences( hookStringFeatureFlag = true,
PreferenceScreenPreference( preferenceScreen = PreferenceScreen.MISC,
key = "revanced_debug_screen", additionalDebugPreferences = listOf(SwitchPreference("revanced_debug_protobuffer"))
sorting = Sorting.UNSORTED, )
preferences = setOf(
SwitchPreference("revanced_debug"),
SwitchPreference("revanced_debug_protobuffer"),
SwitchPreference("revanced_debug_stacktrace"),
SwitchPreference("revanced_debug_toast_on_error"),
NonInteractivePreference(
"revanced_debug_export_logs_to_clipboard",
tag = "app.revanced.extension.shared.settings.preference.ExportLogToClipboardPreference",
selectable = true
),
NonInteractivePreference(
"revanced_debug_logs_clear_buffer",
tag = "app.revanced.extension.shared.settings.preference.ClearLogBufferPreference",
selectable = true
),
),
),
)
// Hook the methods that look up if a feature flag is active.
experimentalBooleanFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
findInstructionIndicesReversedOrThrow(Opcode.RETURN).forEach { index ->
val register = getInstruction<OneRegisterInstruction>(index).registerA
addInstructions(
index,
"""
invoke-static { v$register, p1 }, $EXTENSION_CLASS_DESCRIPTOR->isBooleanFeatureFlagEnabled(ZLjava/lang/Long;)Z
move-result v$register
"""
)
}
}
experimentalDoubleFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
val insertIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT_WIDE)
addInstructions(
insertIndex,
"""
move-result-wide v0 # Also clobbers v1 (p0) since result is wide.
invoke-static/range { v0 .. v5 }, $EXTENSION_CLASS_DESCRIPTOR->isDoubleFeatureFlagEnabled(DJD)D
move-result-wide v0
return-wide v0
"""
)
}
experimentalLongFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
val insertIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT_WIDE)
addInstructions(
insertIndex,
"""
move-result-wide v0
invoke-static/range { v0 .. v5 }, $EXTENSION_CLASS_DESCRIPTOR->isLongFeatureFlagEnabled(JJJ)J
move-result-wide v0
return-wide v0
"""
)
}
experimentalStringFeatureFlagFingerprint.match(
experimentalFeatureFlagParentFingerprint.originalClassDef
).method.apply {
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.MOVE_RESULT_OBJECT)
addInstructions(
insertIndex,
"""
move-result-object v0
invoke-static { v0, p1, p2, p3 }, $EXTENSION_CLASS_DESCRIPTOR->isStringFeatureFlagEnabled(Ljava/lang/String;JLjava/lang/String;)Ljava/lang/String;
move-result-object v0
return-object v0
"""
)
}
// There exists other experimental accessor methods for byte[]
// and wrappers for obfuscated classes, but currently none of those are hooked.
}
}

View File

@@ -26,10 +26,9 @@ val spoofDeviceDimensionsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -23,10 +23,9 @@ val checkWatchHistoryDomainNameResolutionPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -1,8 +1,8 @@
package app.revanced.patches.youtube.misc.fix.backtoexitgesture package app.revanced.patches.youtube.misc.fix.backtoexitgesture
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val scrollPositionFingerprint = fingerprint { internal val scrollPositionFingerprint = fingerprint {
accessFlags(AccessFlags.PROTECTED, AccessFlags.FINAL) accessFlags(AccessFlags.PROTECTED, AccessFlags.FINAL)
@@ -24,30 +24,18 @@ internal val recyclerViewTopScrollingFingerprint = fingerprint {
returns("V") returns("V")
parameters() parameters()
opcodes( opcodes(
Opcode.IGET_OBJECT,
Opcode.IF_EQZ,
Opcode.IGET_OBJECT,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT,
Opcode.IF_EQZ,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.CHECK_CAST, Opcode.CHECK_CAST,
Opcode.CONST_4, Opcode.CONST_4,
Opcode.INVOKE_VIRTUAL, Opcode.INVOKE_VIRTUAL,
Opcode.GOTO, Opcode.GOTO,
Opcode.IGET_OBJECT, Opcode.IGET_OBJECT,
Opcode.INVOKE_INTERFACE, Opcode.INVOKE_INTERFACE
) )
} }
internal val recyclerViewTopScrollingParentFingerprint = fingerprint { internal val recyclerViewTopScrollingParentFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR) accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
parameters("L", "L", "Landroid/view/ViewGroup;", "Landroid/view/ViewGroup;")
opcodes( opcodes(
Opcode.INVOKE_DIRECT,
Opcode.IPUT_OBJECT, Opcode.IPUT_OBJECT,
Opcode.IPUT_OBJECT, Opcode.IPUT_OBJECT,
Opcode.IPUT_OBJECT, Opcode.IPUT_OBJECT,
@@ -55,5 +43,8 @@ internal val recyclerViewTopScrollingParentFingerprint = fingerprint {
Opcode.CONST_16, Opcode.CONST_16,
Opcode.INVOKE_VIRTUAL, Opcode.INVOKE_VIRTUAL,
Opcode.NEW_INSTANCE, Opcode.NEW_INSTANCE,
Opcode.INVOKE_DIRECT,
Opcode.IPUT_OBJECT,
Opcode.RETURN_VOID
) )
} }

View File

@@ -15,13 +15,14 @@ internal val fixBackToExitGesturePatch = bytecodePatch(
) { ) {
execute { execute {
recyclerViewTopScrollingFingerprint.match(recyclerViewTopScrollingParentFingerprint.originalClassDef) recyclerViewTopScrollingFingerprint.match(
.let { recyclerViewTopScrollingParentFingerprint.originalClassDef
it.method.addInstruction( ).let {
it.patternMatch!!.endIndex, it.method.addInstruction(
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->onTopView()V" it.patternMatch!!.endIndex,
) "invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->onTopView()V"
} )
}
scrollPositionFingerprint.let { scrollPositionFingerprint.let {
navigate(it.originalMethod) navigate(it.originalMethod)

View File

@@ -37,10 +37,9 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch(
YOUTUBE_PACKAGE_NAME( YOUTUBE_PACKAGE_NAME(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )
} }

View File

@@ -28,10 +28,9 @@ val disableHapticFeedbackPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -34,10 +34,9 @@ val bypassURLRedirectsPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -43,10 +43,9 @@ val openLinksExternallyPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -32,10 +32,9 @@ val removeTrackingQueryParameterPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -24,10 +24,9 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -46,10 +46,9 @@ val forceOriginalAudioPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -56,10 +56,9 @@ val disableHdrPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -26,10 +26,9 @@ val videoQualityPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -30,10 +30,9 @@ val playbackSpeedPatch = bytecodePatch(
"com.google.android.youtube"( "com.google.android.youtube"(
"19.34.42", "19.34.42",
"19.43.41", "19.43.41",
"19.47.53",
"20.07.39", "20.07.39",
"20.12.46",
"20.13.41", "20.13.41",
"20.14.43",
) )
) )

View File

@@ -89,6 +89,7 @@ Second \"item\" text"</string>
<patch id="layout.buttons.action.hideButtonsPatch"> <patch id="layout.buttons.action.hideButtonsPatch">
<!-- 'Share' should be translated with the same localized wording that YouTube displays. --> <!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. --> <!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. --> <!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
@@ -253,8 +254,17 @@ Second \"item\" text"</string>
</patch> </patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch"> <patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
</patch> </patch>
<patch id="layout.upgradebutton.hideUpgradeButtonPatch"> <patch id="layout.upgradebutton.hideUpgradeButtonPatch">

View File

@@ -89,6 +89,7 @@ Second \"item\" text"</string>
<patch id="layout.buttons.action.hideButtonsPatch"> <patch id="layout.buttons.action.hideButtonsPatch">
<!-- 'Share' should be translated with the same localized wording that YouTube displays. --> <!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. --> <!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. --> <!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
@@ -253,8 +254,17 @@ Second \"item\" text"</string>
</patch> </patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch"> <patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
</patch> </patch>
<patch id="layout.upgradebutton.hideUpgradeButtonPatch"> <patch id="layout.upgradebutton.hideUpgradeButtonPatch">

View File

@@ -107,6 +107,15 @@ Second \"item\" text"</string>
<string name="revanced_debug_title">ØĒØŗØŦŲŠŲ„ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string> <string name="revanced_debug_title">ØĒØŗØŦŲŠŲ„ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string>
<string name="revanced_debug_summary_on">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† ØĒØŗØŦŲŠŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string> <string name="revanced_debug_summary_on">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† ØĒØŗØŦŲŠŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string>
<string name="revanced_debug_summary_off">ØĒŲ… ØĒØšØˇŲŠŲ„ ØĒØŗØŦŲŠŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string> <string name="revanced_debug_summary_off">ØĒŲ… ØĒØšØˇŲŠŲ„ ØĒØŗØŦŲŠŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string>
<string name="revanced_debug_stacktrace_title">ØŗØŦŲ„ ØĒØĒبؚ Ø§Ų„Ų…ŲƒØ¯Øŗ</string>
<string name="revanced_debug_stacktrace_summary_on">ØĒØĒØļŲ…Ų† ØŗØŦŲ„Ø§ØĒ Ø§Ų„ØĒØĩØ­ŲŠØ­ ØŗØŦŲ„ ØĒØĒبؚ Ø§Ų„Ų…ŲƒØ¯Øŗ</string>
<string name="revanced_debug_stacktrace_summary_off">Ų„Ø§ ØĒØĒØļŲ…Ų† ØŗØŦŲ„Ø§ØĒ Ø§Ų„ØĒØĩØ­ŲŠØ­ ØŗØŦŲ„ ØĒØĒبؚ Ø§Ų„Ų…ŲƒØ¯Øŗ</string>
<string name="revanced_debug_toast_on_error_title">ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ØšŲ†Ø¯ ؈ØŦŲˆØ¯ ØŽØˇØŖ ؁؊ ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">؊ØĒŲ… ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ؁؊ Ø­Ø§Ų„ØŠ Ø­Ø¯ŲˆØĢ ØŽØˇØŖ</string>
<string name="revanced_debug_toast_on_error_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ؁؊ Ø­Ø§Ų„ØŠ Ø­Ø¯ŲˆØĢ ØŽØˇØŖ</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"ŲŠØ¤Ø¯ŲŠ ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ Ø§Ų„ØŖØŽØˇØ§ØĄ ØĨŲ„Ų‰ ØĨØŽŲØ§ØĄ ŲƒØ§ŲØŠ ØĨØ´ØšØ§ØąØ§ØĒ ØŖØŽØˇØ§ØĄ ReVanced.
Ų„Ų† ؊ØĒŲ… ØĨØšŲ„Ø§Ų…Ųƒ Ø¨ØŖŲŠ ØŖØŽØˇØ§ØĄ ØēŲŠØą Ų…ØĒŲˆŲ‚ØšØŠ."</string>
<string name="revanced_debug_export_logs_to_clipboard_title">ØĒØĩØ¯ŲŠØą ØŗØŦŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string> <string name="revanced_debug_export_logs_to_clipboard_title">ØĒØĩØ¯ŲŠØą ØŗØŦŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string>
<string name="revanced_debug_export_logs_to_clipboard_summary">Ų†ØŗØŽ ØŗØŦŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ ØŖØŽØˇØ§ØĄ ReVanced ØĨŲ„Ų‰ Ø§Ų„Ø­Ø§ŲØ¸ØŠ</string> <string name="revanced_debug_export_logs_to_clipboard_summary">Ų†ØŗØŽ ØŗØŦŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ ØŖØŽØˇØ§ØĄ ReVanced ØĨŲ„Ų‰ Ø§Ų„Ø­Ø§ŲØ¸ØŠ</string>
<string name="revanced_debug_logs_disabled">ØĒŲ… ØĒØšØˇŲŠŲ„ ØĒØŗØŦŲŠŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string> <string name="revanced_debug_logs_disabled">ØĒŲ… ØĒØšØˇŲŠŲ„ ØĒØŗØŦŲŠŲ„Ø§ØĒ ØĒØĩØ­ŲŠØ­ Ø§Ų„ØŖØŽØˇØ§ØĄ</string>
@@ -151,15 +160,6 @@ Second \"item\" text"</string>
ŲŠŲ…ŲƒŲ† ØŖŲ† ŲŠØŗØ§ØšØ¯ Ų‡Ø°Ø§ ؁؊ ØĒØ­Ø¯ŲŠØ¯ Ø§Ų„Ų…ŲƒŲˆŲ†Ø§ØĒ ØšŲ†Ø¯ ØĨŲ†Ø´Ø§ØĄ ØšŲˆØ§Ų…Ų„ ØĒØĩŲŲŠØŠ Ų…ØŽØĩØĩØŠ. ŲŠŲ…ŲƒŲ† ØŖŲ† ŲŠØŗØ§ØšØ¯ Ų‡Ø°Ø§ ؁؊ ØĒØ­Ø¯ŲŠØ¯ Ø§Ų„Ų…ŲƒŲˆŲ†Ø§ØĒ ØšŲ†Ø¯ ØĨŲ†Ø´Ø§ØĄ ØšŲˆØ§Ų…Ų„ ØĒØĩŲŲŠØŠ Ų…ØŽØĩØĩØŠ.
ŲˆŲ…Øš Ø°Ų„ŲƒØŒ ØŗŲŠØ¤Ø¯ŲŠ ØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ØŖŲŠØļŲ‹Ø§ ØĨŲ„Ų‰ ØĒØŗØŦŲŠŲ„ بؚØļ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… Ų…ØĢŲ„ ØšŲ†ŲˆØ§Ų† IP Ø§Ų„ØŽØ§Øĩ Ø¨Ųƒ."</string> ŲˆŲ…Øš Ø°Ų„ŲƒØŒ ØŗŲŠØ¤Ø¯ŲŠ ØĒŲ…ŲƒŲŠŲ† Ų‡Ø°Ø§ ØŖŲŠØļŲ‹Ø§ ØĨŲ„Ų‰ ØĒØŗØŦŲŠŲ„ بؚØļ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… Ų…ØĢŲ„ ØšŲ†ŲˆØ§Ų† IP Ø§Ų„ØŽØ§Øĩ Ø¨Ųƒ."</string>
<string name="revanced_debug_stacktrace_title">ØŗØŦŲ„ ØĒØĒبؚ Ø§Ų„Ų…ŲƒØ¯Øŗ</string>
<string name="revanced_debug_stacktrace_summary_on">ØĒØĒØļŲ…Ų† ØŗØŦŲ„Ø§ØĒ Ø§Ų„ØĒØĩØ­ŲŠØ­ ØŗØŦŲ„ ØĒØĒبؚ Ø§Ų„Ų…ŲƒØ¯Øŗ</string>
<string name="revanced_debug_stacktrace_summary_off">Ų„Ø§ ØĒØĒØļŲ…Ų† ØŗØŦŲ„Ø§ØĒ Ø§Ų„ØĒØĩØ­ŲŠØ­ ØŗØŦŲ„ ØĒØĒبؚ Ø§Ų„Ų…ŲƒØ¯Øŗ</string>
<string name="revanced_debug_toast_on_error_title">ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ØšŲ†Ø¯ ؈ØŦŲˆØ¯ ØŽØˇØŖ ؁؊ ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">؊ØĒŲ… ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ؁؊ Ø­Ø§Ų„ØŠ Ø­Ø¯ŲˆØĢ ØŽØˇØŖ</string>
<string name="revanced_debug_toast_on_error_summary_off">Ų„Ø§ ؊ØĒŲ… ØšØąØļ Ų…Ų„Ø§Ø­Ø¸ØŠ ؁؊ Ø­Ø§Ų„ØŠ Ø­Ø¯ŲˆØĢ ØŽØˇØŖ</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"ŲŠØ¤Ø¯ŲŠ ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ Ø§Ų„ØŖØŽØˇØ§ØĄ ØĨŲ„Ų‰ ØĨØŽŲØ§ØĄ ŲƒØ§ŲØŠ ØĨØ´ØšØ§ØąØ§ØĒ ØŖØŽØˇØ§ØĄ ReVanced.
Ų„Ų† ؊ØĒŲ… ØĨØšŲ„Ø§Ų…Ųƒ Ø¨ØŖŲŠ ØŖØŽØˇØ§ØĄ ØēŲŠØą Ų…ØĒŲˆŲ‚ØšØŠ."</string>
</patch> </patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch"> <patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_hide_album_cards_title">ØĨØŽŲØ§ØĄ Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„ØŖŲ„Ø¨ŲˆŲ…</string> <string name="revanced_hide_album_cards_title">ØĨØŽŲØ§ØĄ Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„ØŖŲ„Ø¨ŲˆŲ…</string>
@@ -586,6 +586,10 @@ Second \"item\" text"</string>
<string name="revanced_hide_stop_ads_button_title">ØĨØŽŲØ§ØĄ ØĨŲŠŲ‚Ø§Ų Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ</string> <string name="revanced_hide_stop_ads_button_title">ØĨØŽŲØ§ØĄ ØĨŲŠŲ‚Ø§Ų Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ</string>
<string name="revanced_hide_stop_ads_button_summary_on">Ø˛Øą ØĨŲŠŲ‚Ø§Ų Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ų…ØŽŲŲŠ</string> <string name="revanced_hide_stop_ads_button_summary_on">Ø˛Øą ØĨŲŠŲ‚Ø§Ų Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ų…ØŽŲŲŠ</string>
<string name="revanced_hide_stop_ads_button_summary_off">Ø˛Øą ØĨŲŠŲ‚Ø§Ų Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ų…ØšØąŲˆØļ</string> <string name="revanced_hide_stop_ads_button_summary_off">Ø˛Øą ØĨŲŠŲ‚Ø§Ų Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ Ų…ØšØąŲˆØļ</string>
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<string name="revanced_hide_comments_button_title">ØĨØŽŲØ§ØĄ Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ</string>
<string name="revanced_hide_comments_button_summary_on">Ø˛Øą Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ Ų…ØŽŲŲŠ</string>
<string name="revanced_hide_comments_button_summary_off">Ø˛Øą Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ Ø¸Ø§Ų‡Øą</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">ØĨØŽŲØ§ØĄ Ø§Ų„ØĨØ¨Ų„Ø§Øē</string> <string name="revanced_hide_report_button_title">ØĨØŽŲØ§ØĄ Ø§Ų„ØĨØ¨Ų„Ø§Øē</string>
@@ -1242,8 +1246,9 @@ Second \"item\" text"</string>
ØĨذا ØĒŲ… ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„Ų‡ Ų„Ø§Ø­Ų‚Ų‹Ø§ØŒ Ų…Ų† Ø§Ų„Ų…ØŗØĒØ­ØŗŲ† Ų…ØŗØ­ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ Ų„Ų…Ų†Øš Ø­Ø¯ŲˆØĢ ØŖØŽØˇØ§ØĄ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…."</string> ØĨذا ØĒŲ… ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„Ų‡ Ų„Ø§Ø­Ų‚Ų‹Ø§ØŒ Ų…Ų† Ø§Ų„Ų…ØŗØĒØ­ØŗŲ† Ų…ØŗØ­ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ Ų„Ų…Ų†Øš Ø­Ø¯ŲˆØĢ ØŖØŽØˇØ§ØĄ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…."</string>
<string name="revanced_spoof_app_version_target_title">Ø§Ų„Ų‡Ø¯Ų Ų…Ų† ØĒØēŲŠŲŠØą ØĨØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string> <string name="revanced_spoof_app_version_target_title">Ø§Ų„Ų‡Ø¯Ų Ų…Ų† ØĒØēŲŠŲŠØą ØĨØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - Ø§ØŗØĒؚاد؊ ØŖŲŠŲ‚ŲˆŲ†Ø§ØĒ Ų…Ø´ØēŲ„ Shorts Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string> <string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Ø§ØŗØĒؚاد؊ Ø´ØąŲŠØˇ ØĨØŦØąØ§ØĄØ§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØēŲŠØą Ø§Ų„Ų…ØˇŲˆŲŠ</string>
<string name="revanced_spoof_app_version_target_entry_2">19.01.34 - Ø§ØŗØĒؚاد؊ ØŖŲŠŲ‚ŲˆŲ†Ø§ØĒ Ø§Ų„ØĒŲ†Ų‚Ų„ Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string> <string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Ø§ØŗØĒؚاد؊ ØŖŲŠŲ‚ŲˆŲ†Ø§ØĒ Ų…Ø´ØēŲ„ Shorts Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - Ø§ØŗØĒؚاد؊ ØŖŲŠŲ‚ŲˆŲ†Ø§ØĒ Ø§Ų„ØĒŲ†Ų‚Ų„ Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
</patch> </patch>
<patch id="layout.startpage.changeStartPagePatch"> <patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">ØĒØēŲŠŲŠØą ØĩŲØ­ØŠ Ø§Ų„Ø¨Ø¯Ø§ŲŠØŠ</string> <string name="revanced_change_start_page_title">ØĒØēŲŠŲŠØą ØĩŲØ­ØŠ Ø§Ų„Ø¨Ø¯Ø§ŲŠØŠ</string>
@@ -1585,11 +1590,46 @@ Second \"item\" text"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ØĒŲƒØąØ§Øą Ø§Ų„Ø¯Ø§ØĻŲ…</string> <string name="revanced_music_play_permanent_repeat_summary_on">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† Ø§Ų„ØĒŲƒØąØ§Øą Ø§Ų„Ø¯Ø§ØĻŲ…</string>
<string name="revanced_music_play_permanent_repeat_summary_off">ØĒŲ… ØĒØšØˇŲŠŲ„ Ø§Ų„ØĒŲƒØąØ§Øą Ø§Ų„Ø¯Ø§ØĻŲ…</string> <string name="revanced_music_play_permanent_repeat_summary_off">ØĒŲ… ØĒØšØˇŲŠŲ„ Ø§Ų„ØĒŲƒØąØ§Øą Ø§Ų„Ø¯Ø§ØĻŲ…</string>
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
<string name="revanced_music_hide_cast_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§Ų„ØĨØąØŗØ§Ų„</string>
<string name="revanced_music_hide_cast_button_summary_on">Ø˛Øą Ø§Ų„ØĨØąØŗØ§Ų„ Ų…ØŽŲŲŠ</string>
<string name="revanced_music_hide_cast_button_summary_off">Ø˛Øą Ø§Ų„ØĨØąØŗØ§Ų„ Ø¸Ø§Ų‡Øą</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">ØĨØŽŲØ§ØĄ Ø´ØąŲŠØˇ Ø§Ų„ŲØĻاØĒ</string> <string name="revanced_music_hide_category_bar_title">ØĨØŽŲØ§ØĄ Ø´ØąŲŠØˇ Ø§Ų„ŲØĻاØĒ</string>
<string name="revanced_music_hide_category_bar_summary_on">Ø´ØąŲŠØˇ Ø§Ų„ŲØĻاØĒ Ų…ØŽŲŲŠ</string> <string name="revanced_music_hide_category_bar_summary_on">Ø´ØąŲŠØˇ Ø§Ų„ŲØĻاØĒ Ų…ØŽŲŲŠ</string>
<string name="revanced_music_hide_category_bar_summary_off">Ø´ØąŲŠØˇ Ø§Ų„ŲØĻاØĒ Ų…ØšØąŲˆØļ</string> <string name="revanced_music_hide_category_bar_summary_off">Ø´ØąŲŠØˇ Ø§Ų„ŲØĻاØĒ Ų…ØšØąŲˆØļ</string>
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„</string>
<string name="revanced_music_navigation_bar_screen_summary">ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„ ØŖŲˆ ØĒØēŲŠŲŠØąŲ‡Ø§</string>
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_home_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą \"Ø§Ų„ØąØĻŲŠØŗŲŠØŠ\"</string>
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">Ø˛Øą \"Ø§Ų„ØąØĻŲŠØŗŲŠØŠ\" Ų…ØŽŲŲŠ</string>
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">Ø˛Øą \"Ø§Ų„ØąØĻŲŠØŗŲŠØŠ\" Ø¸Ø§Ų‡Øą</string>
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_samples_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą \"Ø§Ų„Ų…Ų‚ØĒØˇŲØ§ØĒ\"</string>
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">Ø˛Øą \"Ø§Ų„Ų…Ų‚ØĒØˇŲØ§ØĒ\" Ų…ØŽŲŲŠ</string>
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">Ø˛Øą \"Ø§Ų„Ų…Ų‚ØĒØˇŲØ§ØĒ\" Ø¸Ø§Ų‡Øą</string>
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_explore_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą \"Ø§ØŗØĒŲƒØ´Ø§Ų\"</string>
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">Ø˛Øą \"Ø§ØŗØĒŲƒØ´Ø§Ų\" Ų…ØŽŲŲŠ</string>
<string name="revanced_music_hide_navigation_bar_explore_button_summary_off">Ø˛Øą \"Ø§ØŗØĒŲƒØ´Ø§Ų\" Ø¸Ø§Ų‡Øą</string>
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_library_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą \"Ø§Ų„Ų…ŲƒØĒب؊\"</string>
<string name="revanced_music_hide_navigation_bar_library_button_summary_on">Ø˛Øą \"Ø§Ų„Ų…ŲƒØĒب؊\" Ų…ØŽŲŲŠ</string>
<string name="revanced_music_hide_navigation_bar_library_button_summary_off">Ø˛Øą \"Ø§Ų„Ų…ŲƒØĒب؊\" Ø¸Ø§Ų‡Øą</string>
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_upgrade_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą \"Ø§Ų„ØĒØąŲ‚ŲŠØŠ\"</string>
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_on">Ø˛Øą \"Ø§Ų„ØĒØąŲ‚ŲŠØŠ\" Ų…ØŽŲŲŠ</string>
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_off">Ø˛Øą \"Ø§Ų„ØĒØąŲ‚ŲŠØŠ\" Ø¸Ø§Ų‡Øą</string>
<string name="revanced_music_hide_navigation_bar_title">ØĨØŽŲØ§ØĄ Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„</string>
<string name="revanced_music_hide_navigation_bar_summary_on">Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„ Ų…ØŽŲŲŠ</string>
<string name="revanced_music_hide_navigation_bar_summary_off">Ø´ØąŲŠØˇ Ø§Ų„ØĒŲ†Ų‚Ų„ Ø¸Ø§Ų‡Øą</string>
<string name="revanced_music_hide_navigation_bar_labels_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØ§ØĒ ØŖØ˛ØąØ§Øą Ø§Ų„ØĒŲ†Ų‚Ų„</string>
<string name="revanced_music_hide_navigation_bar_labels_summary_on">Ø§Ų„ØĒØŗŲ…ŲŠØ§ØĒ Ų…ØŽŲŲŠØŠ</string>
<string name="revanced_music_hide_navigation_bar_labels_summary_off">Ø§Ų„ØĒØŗŲ…ŲŠØ§ØĒ Ø¸Ø§Ų‡ØąØŠ</string>
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
<string name="revanced_music_hide_get_premium_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ \'Ø§Ų„Ø­ØĩŲˆŲ„ ØšŲ„Ų‰ Music Premium\'</string> <string name="revanced_music_hide_get_premium_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ…ŲŠØŠ \'Ø§Ų„Ø­ØĩŲˆŲ„ ØšŲ„Ų‰ Music Premium\'</string>
<string name="revanced_music_hide_get_premium_label_summary_on">Ø§Ų„ØĒØŗŲ…ŲŠØŠ Ų…ØŽŲŲŠØŠ</string> <string name="revanced_music_hide_get_premium_label_summary_on">Ø§Ų„ØĒØŗŲ…ŲŠØŠ Ų…ØŽŲŲŠØŠ</string>

View File

@@ -89,6 +89,7 @@ Second \"item\" text"</string>
<patch id="layout.buttons.action.hideButtonsPatch"> <patch id="layout.buttons.action.hideButtonsPatch">
<!-- 'Share' should be translated with the same localized wording that YouTube displays. --> <!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. --> <!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. --> <!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
@@ -255,8 +256,17 @@ Second \"item\" text"</string>
</patch> </patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch"> <patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
</patch> </patch>
<patch id="layout.upgradebutton.hideUpgradeButtonPatch"> <patch id="layout.upgradebutton.hideUpgradeButtonPatch">

View File

@@ -107,6 +107,15 @@ Oynatma işləməyə bilər"</string>
<string name="revanced_debug_title">Sazlama jurnalÄą</string> <string name="revanced_debug_title">Sazlama jurnalÄą</string>
<string name="revanced_debug_summary_on">Sazlama jurnalÄą işləkdir</string> <string name="revanced_debug_summary_on">Sazlama jurnalÄą işləkdir</string>
<string name="revanced_debug_summary_off">Sazlama jurnalÄą qeyri-aktivdir</string> <string name="revanced_debug_summary_off">Sazlama jurnalÄą qeyri-aktivdir</string>
<string name="revanced_debug_stacktrace_title">Yığın izləri jurnalı</string>
<string name="revanced_debug_stacktrace_summary_on">Sazlama jurnalına yığın izləri daxildir</string>
<string name="revanced_debug_stacktrace_summary_off">Sazlama jurnalına yığın izləri daxil deyil</string>
<string name="revanced_debug_toast_on_error_title">ReVanced xətasÄąnda ani bildiriş gÃļstər</string>
<string name="revanced_debug_toast_on_error_summary_on">Xəta baş verərsə ani bildiriş gÃļrÃŧnÃŧr</string>
<string name="revanced_debug_toast_on_error_summary_off">Xəta baş verərsə ani bildiriş gÃļrÃŧnmÃŧr</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"Xəta ani bildirişlərin qapatmaq, bÃŧtÃŧn ReVanced xəta bildirişlərin gizlədir.
GÃļzlənilməz hallardan xəbərdar olmayacaqsÄąnÄąz."</string>
<string name="revanced_debug_export_logs_to_clipboard_title">Sazlama qeydlərini ixrac edin</string> <string name="revanced_debug_export_logs_to_clipboard_title">Sazlama qeydlərini ixrac edin</string>
<string name="revanced_debug_export_logs_to_clipboard_summary">ReVanced sazlama qeydlərini buferə kÃļçÃŧrÃŧr</string> <string name="revanced_debug_export_logs_to_clipboard_summary">ReVanced sazlama qeydlərini buferə kÃļçÃŧrÃŧr</string>
<string name="revanced_debug_logs_disabled">Sazlama qeydi qapalÄądÄąr</string> <string name="revanced_debug_logs_disabled">Sazlama qeydi qapalÄądÄąr</string>
@@ -151,15 +160,6 @@ Oynatma işləməyə bilər"</string>
Bu, xÃŧsusi filtrlər yaradarkən quruluşlarÄą mÃŧəyyən etməyə kÃļmək edə bilər. Bu, xÃŧsusi filtrlər yaradarkən quruluşlarÄą mÃŧəyyən etməyə kÃļmək edə bilər.
Hər halda, bunu aktivləşdirmə IP ÃŧnvanÄąnÄąz kimi bəzi istifadəçi məlumatÄąn da daxil edəcək."</string> Hər halda, bunu aktivləşdirmə IP ÃŧnvanÄąnÄąz kimi bəzi istifadəçi məlumatÄąn da daxil edəcək."</string>
<string name="revanced_debug_stacktrace_title">Yığın izləri jurnalı</string>
<string name="revanced_debug_stacktrace_summary_on">Sazlama jurnalına yığın izləri daxildir</string>
<string name="revanced_debug_stacktrace_summary_off">Sazlama jurnalına yığın izləri daxil deyil</string>
<string name="revanced_debug_toast_on_error_title">ReVanced xətasÄąnda ani bildiriş gÃļstər</string>
<string name="revanced_debug_toast_on_error_summary_on">Xəta baş verərsə ani bildiriş gÃļrÃŧnÃŧr</string>
<string name="revanced_debug_toast_on_error_summary_off">Xəta baş verərsə ani bildiriş gÃļrÃŧnmÃŧr</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"Xəta ani bildirişlərin qapatmaq, bÃŧtÃŧn ReVanced xəta bildirişlərin gizlədir.
GÃļzlənilməz hallardan xəbərdar olmayacaqsÄąnÄąz."</string>
</patch> </patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch"> <patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_hide_album_cards_title">Albom kartlarını gizlət</string> <string name="revanced_hide_album_cards_title">Albom kartlarını gizlət</string>
@@ -586,6 +586,7 @@ EkranÄąn sağ tərəfində dÃŧzÃŧnə sÃŧrÃŧşdÃŧrərək səs səviyyəsini tənz
<string name="revanced_hide_stop_ads_button_title">Reklamları Dayandırın-ı gizlət</string> <string name="revanced_hide_stop_ads_button_title">Reklamları Dayandırın-ı gizlət</string>
<string name="revanced_hide_stop_ads_button_summary_on">ReklamlarÄą dayandÄąr dÃŧyməsi gizlidir</string> <string name="revanced_hide_stop_ads_button_summary_on">ReklamlarÄą dayandÄąr dÃŧyməsi gizlidir</string>
<string name="revanced_hide_stop_ads_button_summary_off">ReklamlarÄą dayandÄąr dÃŧyməsi gÃļrÃŧnÃŧr</string> <string name="revanced_hide_stop_ads_button_summary_off">ReklamlarÄą dayandÄąr dÃŧyməsi gÃļrÃŧnÃŧr</string>
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">\"Xəbər verin\"i gizlət</string> <string name="revanced_hide_report_button_title">\"Xəbər verin\"i gizlət</string>
@@ -1241,8 +1242,8 @@ Bu tətbiqin gÃļrÃŧnÃŧşÃŧn və xÃŧsusiyyətlərin dəyişdirəcək, lakin bilin
Sonradan qapadÄąlarsa, UI səhvlərin Ãļnləmək ÃŧçÃŧn tətbiq məlumatlarÄąn silmək tÃļvsiyə olunur."</string> Sonradan qapadÄąlarsa, UI səhvlərin Ãļnləmək ÃŧçÃŧn tətbiq məlumatlarÄąn silmək tÃļvsiyə olunur."</string>
<string name="revanced_spoof_app_version_target_title">Saxta tətbiq versiyası hədəfi</string> <string name="revanced_spoof_app_version_target_title">Saxta tətbiq versiyası hədəfi</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - KÃļhnə Shorts oynadÄącÄą işarələrin bərpa et</string> <string name="revanced_spoof_app_version_target_entry_2">19.35.36 - KÃļhnə Shorts oynadÄącÄą işarələrin bərpa et</string>
<string name="revanced_spoof_app_version_target_entry_2">19.01.34 - KÃļhnə fəaliyyət simvollarÄąn bərpa et</string> <string name="revanced_spoof_app_version_target_entry_3">19.01.34 - KÃļhnə fəaliyyət simvollarÄąn bərpa et</string>
</patch> </patch>
<patch id="layout.startpage.changeStartPagePatch"> <patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">Başlatma səhifəsini dəyişdir</string> <string name="revanced_change_start_page_title">Başlatma səhifəsini dəyişdir</string>
@@ -1584,11 +1585,20 @@ Bunu aktivləşdirmə daha yÃŧksək video keyfiyyətləri əngəlin silə bilər
<string name="revanced_music_play_permanent_repeat_summary_on">Kəsintisiz təkrarlama aktivdir</string> <string name="revanced_music_play_permanent_repeat_summary_on">Kəsintisiz təkrarlama aktivdir</string>
<string name="revanced_music_play_permanent_repeat_summary_off">Kəsintisiz təkrarlama qapalıdır</string> <string name="revanced_music_play_permanent_repeat_summary_off">Kəsintisiz təkrarlama qapalıdır</string>
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">Kateqoriya cizgisin gizlət</string> <string name="revanced_music_hide_category_bar_title">Kateqoriya cizgisin gizlət</string>
<string name="revanced_music_hide_category_bar_summary_on">Kateqoriya cizgisi gizlidir</string> <string name="revanced_music_hide_category_bar_summary_on">Kateqoriya cizgisi gizlidir</string>
<string name="revanced_music_hide_category_bar_summary_off">Kateqoriya cizgisi gÃļrÃŧnÃŧr</string> <string name="revanced_music_hide_category_bar_summary_off">Kateqoriya cizgisi gÃļrÃŧnÃŧr</string>
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
<string name="revanced_music_hide_get_premium_label_title"> \'Musiqi Premiumu Əldə et\' etiketini gizlət</string> <string name="revanced_music_hide_get_premium_label_title"> \'Musiqi Premiumu Əldə et\' etiketini gizlət</string>
<string name="revanced_music_hide_get_premium_label_summary_on">Etiket gizlidir</string> <string name="revanced_music_hide_get_premium_label_summary_on">Etiket gizlidir</string>

View File

@@ -107,6 +107,15 @@ Second \"item\" text"</string>
<string name="revanced_debug_title">ЗаĐŋҖҁ адĐģадĐēŅ–</string> <string name="revanced_debug_title">ЗаĐŋҖҁ адĐģадĐēŅ–</string>
<string name="revanced_debug_summary_on">Đ–ŅƒŅ€ĐŊаĐģŅ‹ адĐģадĐēŅ– ŅžĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string> <string name="revanced_debug_summary_on">Đ–ŅƒŅ€ĐŊаĐģŅ‹ адĐģадĐēŅ– ŅžĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string>
<string name="revanced_debug_summary_off">Đ–ŅƒŅ€ĐŊаĐģŅ‹ адĐģадĐēŅ– адĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string> <string name="revanced_debug_summary_off">Đ–ŅƒŅ€ĐŊаĐģŅ‹ адĐģадĐēŅ– адĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string>
<string name="revanced_debug_stacktrace_title">ĐĄĐģŅĐ´Ņ‹ ŅŅ‚ŅĐēа ĐļŅƒŅ€ĐŊаĐģа</string>
<string name="revanced_debug_stacktrace_summary_on">Đ–ŅƒŅ€ĐŊаĐģŅ‹ адĐģадĐēŅ– ŅžĐēĐģŅŽŅ‡Đ°ŅŽŅ†ŅŒ Ņ‚Ņ€Đ°ŅŅ–Ņ€ĐžŅžĐē҃ ŅŅ‚ŅĐēа</string>
<string name="revanced_debug_stacktrace_summary_off">Đ–ŅƒŅ€ĐŊаĐģŅ‹ адĐģадĐēŅ– ĐŊĐĩ ŅžĐēĐģŅŽŅ‡Đ°ŅŽŅ†ŅŒ Ņ‚Ņ€Đ°ŅŅ–Ņ€ĐžŅžĐē҃ ŅŅ‚ŅĐēа</string>
<string name="revanced_debug_toast_on_error_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ Ņ‚ĐžŅŅ‚ ĐŋҀҋ ĐŋаĐŧŅ‹Đģ҆ҋ ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">ПаĐēĐ°ĐˇĐ˛Đ°Ņ†ŅŒ toast ҃ Đ˛Ņ‹ĐŋадĐē҃ ĐŋаĐŧŅ‹ĐģĐēŅ–</string>
<string name="revanced_debug_toast_on_error_summary_off">НĐĩ ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†ŅŒ toast ҃ Đ˛Ņ‹ĐŋадĐē҃ ĐŋаĐŧŅ‹ĐģĐēŅ–</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"АдĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅŅž ĐŋŅ€Đ° ĐŋаĐŧŅ‹ĐģĐēŅ– ŅŅ…Đ°Đ˛Đ°Đĩ ŅžŅĐĩ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ– ReVanced ĐŋŅ€Đ° ĐŋаĐŧŅ‹ĐģĐēŅ–.
Đ’Ņ‹ ĐŊĐĩ ĐąŅƒĐ´ĐˇĐĩ҆Đĩ Đ°Ņ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°Ņ†ŅŒ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ– ĐŋŅ€Đ° ĐŊĐĩŅ‡Đ°ĐēаĐŊŅ‹Ņ ĐŋадСĐĩŅ–."</string>
<string name="revanced_debug_export_logs_to_clipboard_title">Đ­ĐēҁĐŋĐ°Ņ€Ņ‚Đ°Đ˛Đ°Ņ†ŅŒ адĐģĐ°Đ´Đ°Ņ‡ĐŊŅ‹Ņ ĐģĐ°ĐŗŅ–</string> <string name="revanced_debug_export_logs_to_clipboard_title">Đ­ĐēҁĐŋĐ°Ņ€Ņ‚Đ°Đ˛Đ°Ņ†ŅŒ адĐģĐ°Đ´Đ°Ņ‡ĐŊŅ‹Ņ ĐģĐ°ĐŗŅ–</string>
<string name="revanced_debug_export_logs_to_clipboard_summary">КаĐŋŅ–Ņ€ŅƒĐĩ адĐģĐ°Đ´Đ°Ņ‡ĐŊŅ‹Ņ ĐģĐ°ĐŗŅ– ReVanced ҃ ĐąŅƒŅ„ĐĩŅ€ айĐŧĐĩĐŊ҃</string> <string name="revanced_debug_export_logs_to_clipboard_summary">КаĐŋŅ–Ņ€ŅƒĐĩ адĐģĐ°Đ´Đ°Ņ‡ĐŊŅ‹Ņ ĐģĐ°ĐŗŅ– ReVanced ҃ ĐąŅƒŅ„ĐĩŅ€ айĐŧĐĩĐŊ҃</string>
<string name="revanced_debug_logs_disabled">АдĐģĐ°Đ´Đ°Ņ‡ĐŊаĐĩ ĐģĐ°ĐŗĐ°Đ˛Đ°ĐŊĐŊĐĩ адĐēĐģŅŽŅ‡Đ°ĐŊа</string> <string name="revanced_debug_logs_disabled">АдĐģĐ°Đ´Đ°Ņ‡ĐŊаĐĩ ĐģĐ°ĐŗĐ°Đ˛Đ°ĐŊĐŊĐĩ адĐēĐģŅŽŅ‡Đ°ĐŊа</string>
@@ -151,15 +160,6 @@ Second \"item\" text"</string>
Đ“ŅŅ‚Đ° ĐŧĐžĐļа даĐŋаĐŧĐ°ĐŗŅ‡Ņ‹ Ņ–Đ´ŅĐŊ҂ҋ҄ҖĐēĐ°Đ˛Đ°Ņ†ŅŒ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ ĐŋҀҋ ŅŅ‚Đ˛Đ°Ņ€ŅĐŊĐŊŅ– ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°Ņ†ĐēŅ–Ņ… ҄ҖĐģŅŒŅ‚Ņ€Đ°Ņž. Đ“ŅŅ‚Đ° ĐŧĐžĐļа даĐŋаĐŧĐ°ĐŗŅ‡Ņ‹ Ņ–Đ´ŅĐŊ҂ҋ҄ҖĐēĐ°Đ˛Đ°Ņ†ŅŒ ĐēаĐŧĐŋаĐŊĐĩĐŊ҂ҋ ĐŋҀҋ ŅŅ‚Đ˛Đ°Ņ€ŅĐŊĐŊŅ– ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°Ņ†ĐēŅ–Ņ… ҄ҖĐģŅŒŅ‚Ņ€Đ°Ņž.
АдĐŊаĐē ҃ĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°ĐŗĐ° ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đ° Ņ‚Đ°ĐēŅĐ°Đŧа ĐąŅƒĐ´ĐˇĐĩ СаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ ĐŊĐĩĐēĐ°Ņ‚ĐžŅ€Ņ‹Ņ даĐŊŅ‹Ņ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа, Ņ‚Đ°ĐēŅ–Ņ ŅĐē Đ˛Đ°Ņˆ IP-Đ°Đ´Ņ€Đ°Ņ."</string> АдĐŊаĐē ҃ĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŗŅŅ‚Đ°ĐŗĐ° ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đ° Ņ‚Đ°ĐēŅĐ°Đŧа ĐąŅƒĐ´ĐˇĐĩ СаĐŋŅ–ŅĐ˛Đ°Ņ†ŅŒ ĐŊĐĩĐēĐ°Ņ‚ĐžŅ€Ņ‹Ņ даĐŊŅ‹Ņ ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģҌĐŊŅ–Đēа, Ņ‚Đ°ĐēŅ–Ņ ŅĐē Đ˛Đ°Ņˆ IP-Đ°Đ´Ņ€Đ°Ņ."</string>
<string name="revanced_debug_stacktrace_title">ĐĄĐģŅĐ´Ņ‹ ŅŅ‚ŅĐēа ĐļŅƒŅ€ĐŊаĐģа</string>
<string name="revanced_debug_stacktrace_summary_on">Đ–ŅƒŅ€ĐŊаĐģŅ‹ адĐģадĐēŅ– ŅžĐēĐģŅŽŅ‡Đ°ŅŽŅ†ŅŒ Ņ‚Ņ€Đ°ŅŅ–Ņ€ĐžŅžĐē҃ ŅŅ‚ŅĐēа</string>
<string name="revanced_debug_stacktrace_summary_off">Đ–ŅƒŅ€ĐŊаĐģŅ‹ адĐģадĐēŅ– ĐŊĐĩ ŅžĐēĐģŅŽŅ‡Đ°ŅŽŅ†ŅŒ Ņ‚Ņ€Đ°ŅŅ–Ņ€ĐžŅžĐē҃ ŅŅ‚ŅĐēа</string>
<string name="revanced_debug_toast_on_error_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ Ņ‚ĐžŅŅ‚ ĐŋҀҋ ĐŋаĐŧŅ‹Đģ҆ҋ ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">ПаĐēĐ°ĐˇĐ˛Đ°Ņ†ŅŒ toast ҃ Đ˛Ņ‹ĐŋадĐē҃ ĐŋаĐŧŅ‹ĐģĐēŅ–</string>
<string name="revanced_debug_toast_on_error_summary_off">НĐĩ ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†ŅŒ toast ҃ Đ˛Ņ‹ĐŋадĐē҃ ĐŋаĐŧŅ‹ĐģĐēŅ–</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"АдĐēĐģŅŽŅ‡ŅĐŊĐŊĐĩ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅŅž ĐŋŅ€Đ° ĐŋаĐŧŅ‹ĐģĐēŅ– ŅŅ…Đ°Đ˛Đ°Đĩ ŅžŅĐĩ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ– ReVanced ĐŋŅ€Đ° ĐŋаĐŧŅ‹ĐģĐēŅ–.
Đ’Ņ‹ ĐŊĐĩ ĐąŅƒĐ´ĐˇĐĩ҆Đĩ Đ°Ņ‚Ņ€Ņ‹ĐŧĐģŅ–Đ˛Đ°Ņ†ŅŒ аĐŋĐ°Đ˛ŅŅˆŅ‡ŅĐŊĐŊŅ– ĐŋŅ€Đ° ĐŊĐĩŅ‡Đ°ĐēаĐŊŅ‹Ņ ĐŋадСĐĩŅ–."</string>
</patch> </patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch"> <patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_hide_album_cards_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐ°Ņ€Ņ‚Ņ‹ аĐģŅŒĐąĐžĐŧа</string> <string name="revanced_hide_album_cards_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐ°Ņ€Ņ‚Ņ‹ аĐģŅŒĐąĐžĐŧа</string>
@@ -586,6 +586,10 @@ Second \"item\" text"</string>
<string name="revanced_hide_stop_ads_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐĄĐŋŅ‹ĐŊŅ–Ņ†ŅŒ Ņ€ŅĐēĐģаĐŧ҃</string> <string name="revanced_hide_stop_ads_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐĄĐŋŅ‹ĐŊŅ–Ņ†ŅŒ Ņ€ŅĐēĐģаĐŧ҃</string>
<string name="revanced_hide_stop_ads_button_summary_on">КĐŊĐžĐŋĐēа \"ĐĄĐŋŅ‹ĐŊŅ–Ņ†ŅŒ Ņ€ŅĐēĐģаĐŧ҃\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string> <string name="revanced_hide_stop_ads_button_summary_on">КĐŊĐžĐŋĐēа \"ĐĄĐŋŅ‹ĐŊŅ–Ņ†ŅŒ Ņ€ŅĐēĐģаĐŧ҃\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_stop_ads_button_summary_off">КĐŊĐžĐŋĐēа \"ĐĄĐŋŅ‹ĐŊŅ–Ņ†ŅŒ Ņ€ŅĐēĐģаĐŧ҃\" ĐŋаĐēаСаĐŊа</string> <string name="revanced_hide_stop_ads_button_summary_off">КĐŊĐžĐŋĐēа \"ĐĄĐŋŅ‹ĐŊŅ–Ņ†ŅŒ Ņ€ŅĐēĐģаĐŧ҃\" ĐŋаĐēаСаĐŊа</string>
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<string name="revanced_hide_comments_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹Ņ–</string>
<string name="revanced_hide_comments_button_summary_on">КĐŊĐžĐŋĐēа ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_hide_comments_button_summary_off">КĐŊĐžĐŋĐēа ĐēаĐŧĐĩĐŊŅ‚Đ°Ņ€Ņ‹ŅŅž ĐŋаĐēаСаĐŊа</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ҁĐŋŅ€Đ°Đ˛Đ°ĐˇĐ´Đ°Ņ‡Ņƒ</string> <string name="revanced_hide_report_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ҁĐŋŅ€Đ°Đ˛Đ°ĐˇĐ´Đ°Ņ‡Ņƒ</string>
@@ -1243,8 +1247,9 @@ Second \"item\" text"</string>
КаĐģŅ– ĐŋаСĐŊĐĩĐš ĐąŅƒĐ´ĐˇĐĩ адĐēĐģŅŽŅ‡Đ°ĐŊа, Ņ€ŅĐēаĐŧĐĩĐŊĐ´ŅƒĐĩŅ†Ņ†Đ° Đ°Ņ‡Ņ‹ŅŅ†Ņ–Ņ†ŅŒ даĐŊŅ‹Ņ ĐŋҀҋĐēĐģадаĐŊĐŊŅ, Đēай ĐŋаСйĐĩĐŗĐŊŅƒŅ†ŅŒ ĐŋаĐŧŅ‹ĐģаĐē ҃ Ņ–ĐŊŅ‚ŅŅ€Ņ„ĐĩĐšŅĐĩ."</string> КаĐģŅ– ĐŋаСĐŊĐĩĐš ĐąŅƒĐ´ĐˇĐĩ адĐēĐģŅŽŅ‡Đ°ĐŊа, Ņ€ŅĐēаĐŧĐĩĐŊĐ´ŅƒĐĩŅ†Ņ†Đ° Đ°Ņ‡Ņ‹ŅŅ†Ņ–Ņ†ŅŒ даĐŊŅ‹Ņ ĐŋҀҋĐēĐģадаĐŊĐŊŅ, Đēай ĐŋаСйĐĩĐŗĐŊŅƒŅ†ŅŒ ĐŋаĐŧŅ‹ĐģаĐē ҃ Ņ–ĐŊŅ‚ŅŅ€Ņ„ĐĩĐšŅĐĩ."</string>
<string name="revanced_spoof_app_version_target_title">ĐŸĐ°Đ´Ņ€ĐžĐąĐēа ĐŧŅŅ‚Đ°Đ˛Đ°Đš вĐĩҀҁҖҖ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹</string> <string name="revanced_spoof_app_version_target_title">ĐŸĐ°Đ´Ņ€ĐžĐąĐēа ĐŧŅŅ‚Đ°Đ˛Đ°Đš вĐĩҀҁҖҖ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 — Đ’ĐžŅŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Đĩ СĐŊĐ°Ņ‡Đēи ĐŋĐģĐĩĐĩŅ€Đ° Shorts</string> <string name="revanced_spoof_app_version_target_entry_1">20.13.41 - АдĐŊĐ°Đ˛Ņ–Ņ†ŅŒ ĐŊĐĩ ĐˇĐŗĐžŅ€ĐŊŅƒŅ‚Ņ‹ Ņ€Đ°Đ´ĐžĐē дСĐĩŅĐŊĐŊŅŅž Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_spoof_app_version_target_entry_2">19.01.34 - АдĐŊĐ°ŅžĐģĐĩĐŊĐŊĐĩ ŅŅ‚Đ°Ņ€Ņ‹Ņ… СĐŊĐ°Ņ‡ĐēĐžŅž ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string> <string name="revanced_spoof_app_version_target_entry_2">19.35.36 — Đ’ĐžŅŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Đĩ СĐŊĐ°Ņ‡Đēи ĐŋĐģĐĩĐĩŅ€Đ° Shorts</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - АдĐŊĐ°ŅžĐģĐĩĐŊĐŊĐĩ ŅŅ‚Đ°Ņ€Ņ‹Ņ… СĐŊĐ°Ņ‡ĐēĐžŅž ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
</patch> </patch>
<patch id="layout.startpage.changeStartPagePatch"> <patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">ЗĐŧŅĐŊŅ–Ņ†ŅŒ ŅŅ‚Đ°Ņ€Ņ‚Đ°Đ˛ŅƒŅŽ ŅŅ‚Đ°Ņ€ĐžĐŊĐē҃</string> <string name="revanced_change_start_page_title">ЗĐŧŅĐŊŅ–Ņ†ŅŒ ŅŅ‚Đ°Ņ€Ņ‚Đ°Đ˛ŅƒŅŽ ŅŅ‚Đ°Ņ€ĐžĐŊĐē҃</string>
@@ -1586,11 +1591,46 @@ Second \"item\" text"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">ĐŸĐ°ŅŅ‚Đ°ŅĐŊĐŊŅ‹ ĐŋĐ°ŅžŅ‚ĐžŅ€ ҃ĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string> <string name="revanced_music_play_permanent_repeat_summary_on">ĐŸĐ°ŅŅ‚Đ°ŅĐŊĐŊŅ‹ ĐŋĐ°ŅžŅ‚ĐžŅ€ ҃ĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string>
<string name="revanced_music_play_permanent_repeat_summary_off">ĐŸĐ°ŅŅ‚Đ°ŅĐŊĐŊŅ‹ ĐŋĐ°ŅžŅ‚ĐžŅ€ адĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string> <string name="revanced_music_play_permanent_repeat_summary_off">ĐŸĐ°ŅŅ‚Đ°ŅĐŊĐŊŅ‹ ĐŋĐ°ŅžŅ‚ĐžŅ€ адĐēĐģŅŽŅ‡Đ°ĐŊŅ‹</string>
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
<string name="revanced_music_hide_cast_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ Ņ‚Ņ€Đ°ĐŊҁĐģŅŅ†Ņ‹Ņ–</string>
<string name="revanced_music_hide_cast_button_summary_on">КĐŊĐžĐŋĐēа Ņ‚Ņ€Đ°ĐŊҁĐģŅŅ†Ņ‹Ņ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_music_hide_cast_button_summary_off">КĐŊĐžĐŋĐēа Ņ‚Ņ€Đ°ĐŊҁĐģŅŅ†Ņ‹Ņ– ĐŋаĐēаСаĐŊа</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐŊŅĐģҌ ĐēĐ°Ņ‚ŅĐŗĐžŅ€Ņ‹Đš</string> <string name="revanced_music_hide_category_bar_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐŊŅĐģҌ ĐēĐ°Ņ‚ŅĐŗĐžŅ€Ņ‹Đš</string>
<string name="revanced_music_hide_category_bar_summary_on">ПаĐŊŅĐģҌ ĐēĐ°Ņ‚ŅĐŗĐžŅ€Ņ‹Đš ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string> <string name="revanced_music_hide_category_bar_summary_on">ПаĐŊŅĐģҌ ĐēĐ°Ņ‚ŅĐŗĐžŅ€Ņ‹Đš ŅŅ…Đ°Đ˛Đ°ĐŊĐ°Ņ</string>
<string name="revanced_music_hide_category_bar_summary_off">ПаĐŊŅĐģҌ ĐēĐ°Ņ‚ŅĐŗĐžŅ€Ņ‹Đš ĐŋаĐēаСаĐŊĐ°Ņ</string> <string name="revanced_music_hide_category_bar_summary_off">ПаĐŊŅĐģҌ ĐēĐ°Ņ‚ŅĐŗĐžŅ€Ņ‹Đš ĐŋаĐēаСаĐŊĐ°Ņ</string>
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">ПаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
<string name="revanced_music_navigation_bar_screen_summary">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ айО СĐŧŅĐŊŅ–Ņ†ŅŒ ĐēĐŊĐžĐŋĐēŅ– ĐŋаĐŊŅĐģŅ– ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_home_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ГаĐģĐžŅžĐŊĐ°Ņ\"</string>
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">КĐŊĐžĐŋĐēа \"ГаĐģĐžŅžĐŊĐ°Ņ\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">КĐŊĐžĐŋĐēа \"ГаĐģĐžŅžĐŊĐ°Ņ\" ĐŋаĐēаСаĐŊа</string>
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_samples_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ĐŖĐˇĐžŅ€Ņ‹\"</string>
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">КĐŊĐžĐŋĐēа \"ĐŖĐˇĐžŅ€Ņ‹\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">КĐŊĐžĐŋĐēа \"ĐŖĐˇĐžŅ€Ņ‹\" ĐŋаĐēаСаĐŊа</string>
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_explore_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"ĐĐŗĐģŅĐ´\"</string>
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">КĐŊĐžĐŋĐēа \"ĐĐŗĐģŅĐ´\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_music_hide_navigation_bar_explore_button_summary_off">КĐŊĐžĐŋĐēа \"ĐĐŗĐģŅĐ´\" ĐŋаĐēаСаĐŊа</string>
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_library_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"Đ‘Ņ–ĐąĐģŅ–ŅŅ‚ŅĐēа\"</string>
<string name="revanced_music_hide_navigation_bar_library_button_summary_on">КĐŊĐžĐŋĐēа \"Đ‘Ņ–ĐąĐģŅ–ŅŅ‚ŅĐēа\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_music_hide_navigation_bar_library_button_summary_off">КĐŊĐžĐŋĐēа \"Đ‘Ņ–ĐąĐģŅ–ŅŅ‚ŅĐēа\" ĐŋаĐēаСаĐŊа</string>
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_upgrade_button_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐēĐŊĐžĐŋĐē҃ \"АйĐŊĐ°Đ˛Ņ–Ņ†ŅŒ\"</string>
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_on">КĐŊĐžĐŋĐēа \"АйĐŊĐ°Đ˛Ņ–Ņ†ŅŒ\" ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_off">КĐŊĐžĐŋĐēа \"АйĐŊĐ°Đ˛Ņ–Ņ†ŅŒ\" ĐŋаĐēаСаĐŊа</string>
<string name="revanced_music_hide_navigation_bar_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
<string name="revanced_music_hide_navigation_bar_summary_on">ПаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ– ŅŅ…Đ°Đ˛Đ°ĐŊа</string>
<string name="revanced_music_hide_navigation_bar_summary_off">ПаĐŊŅĐģҌ ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ– ĐŋаĐēаСаĐŊа</string>
<string name="revanced_music_hide_navigation_bar_labels_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŋОдĐŋҖҁҋ ĐēĐŊĐžĐŋаĐē ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
<string name="revanced_music_hide_navigation_bar_labels_summary_on">ПодĐŋҖҁҋ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>
<string name="revanced_music_hide_navigation_bar_labels_summary_off">ПодĐŋҖҁҋ ĐŋаĐēаСаĐŊŅ‹</string>
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
<string name="revanced_music_hide_get_premium_label_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŊадĐŋҖҁ \"ĐŅ‚Ņ€Ņ‹ĐŧĐ°Ņ†ŅŒ Music Premium\"</string> <string name="revanced_music_hide_get_premium_label_title">ĐĄŅ…Đ°Đ˛Đ°Ņ†ŅŒ ĐŊадĐŋҖҁ \"ĐŅ‚Ņ€Ņ‹ĐŧĐ°Ņ†ŅŒ Music Premium\"</string>
<string name="revanced_music_hide_get_premium_label_summary_on">НадĐŋҖҁ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string> <string name="revanced_music_hide_get_premium_label_summary_on">НадĐŋҖҁ ŅŅ…Đ°Đ˛Đ°ĐŊŅ‹</string>

View File

@@ -107,6 +107,15 @@ Second \"item\" text"</string>
<string name="revanced_debug_title">ДĐŊĐĩвĐŊиĐē ĐŊа ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐŗŅ€Đĩ҈Đēи</string> <string name="revanced_debug_title">ДĐŊĐĩвĐŊиĐē ĐŊа ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐŗŅ€Đĩ҈Đēи</string>
<string name="revanced_debug_summary_on">ДĐŊĐĩвĐŊиĐēŅŠŅ‚ Са ĐžŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string> <string name="revanced_debug_summary_on">ДĐŊĐĩвĐŊиĐēŅŠŅ‚ Са ĐžŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string>
<string name="revanced_debug_summary_off">ДĐŊĐĩвĐŊиĐēŅŠŅ‚ Са ĐžŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string> <string name="revanced_debug_summary_off">ДĐŊĐĩвĐŊиĐēŅŠŅ‚ Са ĐžŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊ</string>
<string name="revanced_debug_stacktrace_title">ĐĄĐģĐĩди ĐžŅ‚ ҁ҂ĐĩĐēа ĐŊа Đ´ĐŊĐĩвĐŊиĐēа</string>
<string name="revanced_debug_stacktrace_summary_on">ДĐŊĐĩвĐŊиĐēŅŠŅ‚ Са ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи ŅŅŠĐ´ŅŠŅ€Đļа ҁĐģĐĩди ĐžŅ‚ ҁ҂ĐĩĐēа</string>
<string name="revanced_debug_stacktrace_summary_off">ДĐŊĐĩвĐŊиĐēŅŠŅ‚ Са ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи ĐŊĐĩ ŅŅŠĐ´ŅŠŅ€Đļа ҁĐģĐĩди ĐžŅ‚ ҁ҂ĐĩĐēа</string>
<string name="revanced_debug_toast_on_error_title">ПоĐēаĐļи ŅĐ¸ŅŅ‚ĐĩĐŧĐŊĐž ŅŅŠĐžĐąŅ‰ĐĩĐŊиĐĩ ĐŋŅ€Đ¸ ReVanced ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_summary_on">ПоĐēаСва ҁĐĩ toast, аĐēĐž Đ˛ŅŠĐˇĐŊиĐēĐŊĐĩ ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_summary_off">НĐĩ ҁĐĩ ĐŋĐžĐēаСва toast, аĐēĐž Đ˛ŅŠĐˇĐŊиĐēĐŊĐĩ ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"ИСĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа Đ¸ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸ ŅŅŠĐžĐąŅ‰ĐĩĐŊĐ¸Ņ Са ĐŗŅ€Đĩ҈Đēи ĐēŅ€Đ¸Đĩ Đ˛ŅĐ¸Ņ‡Đēи иСвĐĩŅŅ‚Đ¸Ņ Са ĐŗŅ€Đĩ҈Đēи ĐŊа ReVanced.
ĐŅĐŧа да ĐąŅŠĐ´ĐĩŅ‚Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐĩĐŊи Са ĐŊĐĩĐžŅ‡Đ°ĐēваĐŊи ŅŅŠĐąĐ¸Ņ‚Đ¸Ņ."</string>
<string name="revanced_debug_export_logs_to_clipboard_title">ЕĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐģĐžĐŗĐžĐ˛Đĩ Са ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи</string> <string name="revanced_debug_export_logs_to_clipboard_title">ЕĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐģĐžĐŗĐžĐ˛Đĩ Са ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи</string>
<string name="revanced_debug_export_logs_to_clipboard_summary">КоĐŋĐ¸Ņ€Đ° ĐģĐžĐŗĐžĐ˛ĐĩŅ‚Đĩ Са ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи ĐŊа ReVanced в ĐēĐģиĐŋĐąĐžŅ€Đ´Đ°</string> <string name="revanced_debug_export_logs_to_clipboard_summary">КоĐŋĐ¸Ņ€Đ° ĐģĐžĐŗĐžĐ˛ĐĩŅ‚Đĩ Са ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи ĐŊа ReVanced в ĐēĐģиĐŋĐąĐžŅ€Đ´Đ°</string>
<string name="revanced_debug_logs_disabled">ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐŗŅ€Đĩ҈Đēи Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string> <string name="revanced_debug_logs_disabled">ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ĐŗŅ€Đĩ҈Đēи Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
@@ -151,15 +160,6 @@ Second \"item\" text"</string>
ĐĸОва ĐŧĐžĐļĐĩ да ĐŋĐžĐŧĐžĐŗĐŊĐĩ Са идĐĩĐŊŅ‚Đ¸Ņ„Đ¸Ņ†Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅ‚Đ¸ ĐŋŅ€Đ¸ ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋĐĩŅ€ŅĐžĐŊаĐģĐ¸ĐˇĐ¸Ņ€Đ°ĐŊи Ņ„Đ¸ĐģŅ‚Ņ€Đ¸. ĐĸОва ĐŧĐžĐļĐĩ да ĐŋĐžĐŧĐžĐŗĐŊĐĩ Са идĐĩĐŊŅ‚Đ¸Ņ„Đ¸Ņ†Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅ‚Đ¸ ĐŋŅ€Đ¸ ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋĐĩŅ€ŅĐžĐŊаĐģĐ¸ĐˇĐ¸Ņ€Đ°ĐŊи Ņ„Đ¸ĐģŅ‚Ņ€Đ¸.
АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēа ĐžĐąĐ°Ņ‡Đĩ ҉Đĩ Ņ€ĐĩĐŗĐ¸ŅŅ‚Ņ€Đ¸Ņ€Đ° и ĐŊŅĐēОи ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēи даĐŊĐŊи, ĐēĐ°Ņ‚Đž ĐŊаĐŋŅ€Đ¸ĐŧĐĩŅ€ Đ˛Đ°ŅˆĐ¸Ņ IP Đ°Đ´Ņ€Đĩҁ."</string> АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēа ĐžĐąĐ°Ņ‡Đĩ ҉Đĩ Ņ€ĐĩĐŗĐ¸ŅŅ‚Ņ€Đ¸Ņ€Đ° и ĐŊŅĐēОи ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēи даĐŊĐŊи, ĐēĐ°Ņ‚Đž ĐŊаĐŋŅ€Đ¸ĐŧĐĩŅ€ Đ˛Đ°ŅˆĐ¸Ņ IP Đ°Đ´Ņ€Đĩҁ."</string>
<string name="revanced_debug_stacktrace_title">ĐĄĐģĐĩди ĐžŅ‚ ҁ҂ĐĩĐēа ĐŊа Đ´ĐŊĐĩвĐŊиĐēа</string>
<string name="revanced_debug_stacktrace_summary_on">ДĐŊĐĩвĐŊиĐēŅŠŅ‚ Са ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи ŅŅŠĐ´ŅŠŅ€Đļа ҁĐģĐĩди ĐžŅ‚ ҁ҂ĐĩĐēа</string>
<string name="revanced_debug_stacktrace_summary_off">ДĐŊĐĩвĐŊиĐēŅŠŅ‚ Са ĐžŅ‚ŅŅ‚Ņ€Đ°ĐŊŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŗŅ€Đĩ҈Đēи ĐŊĐĩ ŅŅŠĐ´ŅŠŅ€Đļа ҁĐģĐĩди ĐžŅ‚ ҁ҂ĐĩĐēа</string>
<string name="revanced_debug_toast_on_error_title">ПоĐēаĐļи ŅĐ¸ŅŅ‚ĐĩĐŧĐŊĐž ŅŅŠĐžĐąŅ‰ĐĩĐŊиĐĩ ĐŋŅ€Đ¸ ReVanced ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_summary_on">ПоĐēаСва ҁĐĩ toast, аĐēĐž Đ˛ŅŠĐˇĐŊиĐēĐŊĐĩ ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_summary_off">НĐĩ ҁĐĩ ĐŋĐžĐēаСва toast, аĐēĐž Đ˛ŅŠĐˇĐŊиĐēĐŊĐĩ ĐŗŅ€Đĩ҈Đēа</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"ИСĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа Đ¸ĐˇŅĐēĐ°Ņ‡Đ°Ņ‰Đ¸ ŅŅŠĐžĐąŅ‰ĐĩĐŊĐ¸Ņ Са ĐŗŅ€Đĩ҈Đēи ĐēŅ€Đ¸Đĩ Đ˛ŅĐ¸Ņ‡Đēи иСвĐĩŅŅ‚Đ¸Ņ Са ĐŗŅ€Đĩ҈Đēи ĐŊа ReVanced.
ĐŅĐŧа да ĐąŅŠĐ´ĐĩŅ‚Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐĩĐŊи Са ĐŊĐĩĐžŅ‡Đ°ĐēваĐŊи ŅŅŠĐąĐ¸Ņ‚Đ¸Ņ."</string>
</patch> </patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch"> <patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_hide_album_cards_title">\"ĐšĐ°Ņ€Ņ‚Đ¸ ĐŊа аĐģĐąŅƒĐŧĐ¸Ņ‚Đĩ\"</string> <string name="revanced_hide_album_cards_title">\"ĐšĐ°Ņ€Ņ‚Đ¸ ĐŊа аĐģĐąŅƒĐŧĐ¸Ņ‚Đĩ\"</string>
@@ -586,6 +586,10 @@ Second \"item\" text"</string>
<string name="revanced_hide_stop_ads_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа „СĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи“</string> <string name="revanced_hide_stop_ads_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа „СĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи“</string>
<string name="revanced_hide_stop_ads_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ҁĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_hide_stop_ads_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ҁĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_stop_ads_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ҁĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи Đĩ ĐŋĐžĐēаСаĐŊ</string> <string name="revanced_hide_stop_ads_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ҁĐŋĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ€ĐĩĐēĐģаĐŧи Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<string name="revanced_hide_comments_button_title">ĐĄĐēŅ€Đ¸Đš ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸</string>
<string name="revanced_hide_comments_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_hide_comments_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Đ‘ŅƒŅ‚ĐžĐŊ Са Đ´ĐžĐēĐģади</string> <string name="revanced_hide_report_button_title">Đ‘ŅƒŅ‚ĐžĐŊ Са Đ´ĐžĐēĐģади</string>
@@ -1242,8 +1246,9 @@ Second \"item\" text"</string>
АĐēĐž ĐŋĐž-ĐēҊҁĐŊĐž ĐąŅŠĐ´Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž, ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠŅ‡Đ¸Ņ‚ĐĩĐģĐŊĐž Đĩ да Đ¸ĐˇŅ‡Đ¸ŅŅ‚Đ¸Ņ‚Đĩ даĐŊĐŊĐ¸Ņ‚Đĩ ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž, Са да ĐŋŅ€ĐĩĐ´ĐžŅ‚Đ˛Ņ€Đ°Ņ‚Đ¸Ņ‚Đĩ ĐŗŅ€Đĩ҈Đēи в ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐ¸Ņ иĐŊŅ‚ĐĩҀ҄ĐĩĐšŅ."</string> АĐēĐž ĐŋĐž-ĐēҊҁĐŊĐž ĐąŅŠĐ´Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž, ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠŅ‡Đ¸Ņ‚ĐĩĐģĐŊĐž Đĩ да Đ¸ĐˇŅ‡Đ¸ŅŅ‚Đ¸Ņ‚Đĩ даĐŊĐŊĐ¸Ņ‚Đĩ ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž, Са да ĐŋŅ€ĐĩĐ´ĐžŅ‚Đ˛Ņ€Đ°Ņ‚Đ¸Ņ‚Đĩ ĐŗŅ€Đĩ҈Đēи в ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐ¸Ņ иĐŊŅ‚ĐĩҀ҄ĐĩĐšŅ."</string>
<string name="revanced_spoof_app_version_target_title">ПодĐģŅŠĐŗĐ˛Đ°ĐŊĐĩ Са вĐĩŅ€ŅĐ¸ŅŅ‚Đ° ĐŊа</string> <string name="revanced_spoof_app_version_target_title">ПодĐģŅŠĐŗĐ˛Đ°ĐŊĐĩ Са вĐĩŅ€ŅĐ¸ŅŅ‚Đ° ĐŊа</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОвĐĩŅ‚Đĩ ŅŅ‚Đ°Ņ€Đ¸Ņ‚Đĩ иĐēĐžĐŊи ĐŊа Shorts в ĐŋĐģĐĩĐšŅŠŅ€Đ°</string> <string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐĩŅĐŗŅŠĐ˛Đ°ĐĩĐŧа ĐģĐĩĐŊŅ‚Đ° ҁ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ Са видĐĩĐž</string>
<string name="revanced_spoof_app_version_target_entry_2">19.01.34 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ŅŅ‚Đ°Ņ€Đ¸ иĐēĐžĐŊи Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ</string> <string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОвĐĩŅ‚Đĩ ŅŅ‚Đ°Ņ€Đ¸Ņ‚Đĩ иĐēĐžĐŊи ĐŊа Shorts в ĐŋĐģĐĩĐšŅŠŅ€Đ°</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ŅŅ‚Đ°Ņ€Đ¸ иĐēĐžĐŊи Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ</string>
</patch> </patch>
<patch id="layout.startpage.changeStartPagePatch"> <patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">ĐŸŅ€ĐžĐŧŅĐŊа ĐŊа ĐŊĐ°Ņ‡Đ°ĐģĐŊĐ°Ņ‚Đ° ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°</string> <string name="revanced_change_start_page_title">ĐŸŅ€ĐžĐŧŅĐŊа ĐŊа ĐŊĐ°Ņ‡Đ°ĐģĐŊĐ°Ņ‚Đ° ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°</string>
@@ -1585,11 +1590,46 @@ Second \"item\" text"</string>
<string name="revanced_music_play_permanent_repeat_summary_on">ĐŸĐžŅŅ‚ĐžŅĐŊĐŊĐžŅ‚Đž ĐŋĐžĐ˛Ņ‚Đ°Ņ€ŅĐŊĐĩ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string> <string name="revanced_music_play_permanent_repeat_summary_on">ĐŸĐžŅŅ‚ĐžŅĐŊĐŊĐžŅ‚Đž ĐŋĐžĐ˛Ņ‚Đ°Ņ€ŅĐŊĐĩ Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_music_play_permanent_repeat_summary_off">ĐŸĐžŅŅ‚ĐžŅĐŊĐŊĐžŅ‚Đž ĐŋĐžĐ˛Ņ‚Đ°Ņ€ŅĐŊĐĩ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string> <string name="revanced_music_play_permanent_repeat_summary_off">ĐŸĐžŅŅ‚ĐžŅĐŊĐŊĐžŅ‚Đž ĐŋĐžĐ˛Ņ‚Đ°Ņ€ŅĐŊĐĩ Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
<string name="revanced_music_hide_cast_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа Са ĐŋŅ€ĐĩдаваĐŊĐĩ</string>
<string name="revanced_music_hide_cast_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐŋŅ€ĐĩдаваĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_music_hide_cast_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ Са ĐŋŅ€ĐĩдаваĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° ҁ ĐēĐ°Ņ‚ĐĩĐŗĐžŅ€Đ¸Đ¸</string> <string name="revanced_music_hide_category_bar_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐģĐĩĐŊŅ‚Đ°Ņ‚Đ° ҁ ĐēĐ°Ņ‚ĐĩĐŗĐžŅ€Đ¸Đ¸</string>
<string name="revanced_music_hide_category_bar_summary_on">ЛĐĩĐŊŅ‚Đ°Ņ‚Đ° ҁ ĐēĐ°Ņ‚ĐĩĐŗĐžŅ€Đ¸Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string> <string name="revanced_music_hide_category_bar_summary_on">ЛĐĩĐŊŅ‚Đ°Ņ‚Đ° ҁ ĐēĐ°Ņ‚ĐĩĐŗĐžŅ€Đ¸Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
<string name="revanced_music_hide_category_bar_summary_off">ЛĐĩĐŊŅ‚Đ°Ņ‚Đ° ҁ ĐēĐ°Ņ‚ĐĩĐŗĐžŅ€Đ¸Đ¸ Đĩ ĐŋĐžĐēаСаĐŊа</string> <string name="revanced_music_hide_category_bar_summary_off">ЛĐĩĐŊŅ‚Đ°Ņ‚Đ° ҁ ĐēĐ°Ņ‚ĐĩĐŗĐžŅ€Đ¸Đ¸ Đĩ ĐŋĐžĐēаСаĐŊа</string>
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">ĐĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸ĐžĐŊĐŊа ĐģĐĩĐŊŅ‚Đ°</string>
<string name="revanced_music_navigation_bar_screen_summary">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ иĐģи ĐŋŅ€ĐžĐŧŅĐŊа ĐŊа ĐąŅƒŅ‚ĐžĐŊĐ¸Ņ‚Đĩ ĐŊа ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸ĐžĐŊĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ°</string>
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_home_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа ĐĐ°Ņ‡Đ°ĐģĐž</string>
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐĐ°Ņ‡Đ°ĐģĐž Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐĐ°Ņ‡Đ°ĐģĐž Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_samples_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа ĐœĐžŅŅ‚Ņ€Đ¸</string>
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐœĐžŅŅ‚Ņ€Đ¸ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐœĐžŅŅ‚Ņ€Đ¸ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_explore_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа ĐŸŅ€ĐžŅƒŅ‡Đ˛Đ°ĐŊĐĩ</string>
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŸŅ€ĐžŅƒŅ‡Đ˛Đ°ĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_music_hide_navigation_bar_explore_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐŸŅ€ĐžŅƒŅ‡Đ˛Đ°ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_library_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа БибĐģĐ¸ĐžŅ‚ĐĩĐēа</string>
<string name="revanced_music_hide_navigation_bar_library_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ БибĐģĐ¸ĐžŅ‚ĐĩĐēа Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_music_hide_navigation_bar_library_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ БибĐģĐ¸ĐžŅ‚ĐĩĐēа Đĩ ĐŋĐžĐēаСаĐŊ</string>
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_upgrade_button_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐąŅƒŅ‚ĐžĐŊа ĐĐ°Đ´ĐŗŅ€Đ°ĐļдаĐŊĐĩ</string>
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_on">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐĐ°Đ´ĐŗŅ€Đ°ĐļдаĐŊĐĩ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_off">Đ‘ŅƒŅ‚ĐžĐŊŅŠŅ‚ ĐĐ°Đ´ĐŗŅ€Đ°ĐļдаĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
<string name="revanced_music_hide_navigation_bar_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸ĐžĐŊĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ°</string>
<string name="revanced_music_hide_navigation_bar_summary_on">ĐĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸ĐžĐŊĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ° Đĩ ҁĐēŅ€Đ¸Ņ‚Đ°</string>
<string name="revanced_music_hide_navigation_bar_summary_off">ĐĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸ĐžĐŊĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ° Đĩ ĐŋĐžĐēаСаĐŊа</string>
<string name="revanced_music_hide_navigation_bar_labels_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ ĐŊа ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸ĐžĐŊĐŊĐ¸Ņ‚Đĩ ĐąŅƒŅ‚ĐžĐŊи</string>
<string name="revanced_music_hide_navigation_bar_labels_summary_on">Đ•Ņ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ ŅĐ° ҁĐēŅ€Đ¸Ņ‚Đ¸</string>
<string name="revanced_music_hide_navigation_bar_labels_summary_off">Đ•Ņ‚Đ¸ĐēĐĩŅ‚Đ¸Ņ‚Đĩ ŅĐ° ĐŋĐžĐēаСаĐŊи</string>
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
<string name="revanced_music_hide_get_premium_label_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ° „ВзĐĩĐŧĐĩŅ‚Đĩ Music Premium“</string> <string name="revanced_music_hide_get_premium_label_title">ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ° „ВзĐĩĐŧĐĩŅ‚Đĩ Music Premium“</string>
<string name="revanced_music_hide_get_premium_label_summary_on">Đ•Ņ‚Đ¸ĐēĐĩŅ‚ŅŠŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string> <string name="revanced_music_hide_get_premium_label_summary_on">Đ•Ņ‚Đ¸ĐēĐĩŅ‚ŅŠŅ‚ Đĩ ҁĐēŅ€Đ¸Ņ‚</string>

View File

@@ -107,6 +107,15 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_debug_title">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āĻŋāĻ‚</string> <string name="revanced_debug_title">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āĻŋāĻ‚</string>
<string name="revanced_debug_summary_on">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āϏāĻ•ā§āϰāĻŋ⧟ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_debug_summary_on">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āϏāĻ•ā§āϰāĻŋ⧟ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_debug_summary_off">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻšā§Ÿā§‡āϛ⧇</string> <string name="revanced_debug_summary_off">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋ⧟ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_debug_stacktrace_title">āĻ¸ā§āĻŸā§‡āĻ• āĻŸā§āϰ⧇āϏ āϞāĻ—</string>
<string name="revanced_debug_stacktrace_summary_on">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻ¸ā§āĻŸā§‡āĻ• āĻŸā§āϰ⧇āϏ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇</string>
<string name="revanced_debug_stacktrace_summary_off">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻ¸ā§āĻŸā§‡āĻ• āĻŸā§āϰ⧇āϏ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇ āύāĻž</string>
<string name="revanced_debug_toast_on_error_title">ReVanced āĻāϰ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻŸā§‹āĻ¸ā§āϟ āĻĻ⧇āĻ–āĻžāύ</string>
<string name="revanced_debug_toast_on_error_summary_on">āϝāĻĻāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡ āϤāĻŦ⧇ toast āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇</string>
<string name="revanced_debug_toast_on_error_summary_off">āϝāĻĻāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡ āϤāĻŦ⧇ toast āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇ āύāĻž</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"āĻ¤ā§āϰ⧁āϟāĻŋ \"toast\" āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ ReVanced āĻ¤ā§āϰ⧁āϟāĻŋ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āĻšāϝāĻŧāĨ¤
āφāĻĒāύāĻŋ āϕ⧋āύāĻ“ āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āϘāϟāύāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āĻ…āĻŦāĻšāĻŋāϤ āĻšāĻŦ⧇āύ āύāĻžāĨ¤"</string>
<string name="revanced_debug_export_logs_to_clipboard_title">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āϗ⧁āϞāĻŋ āϰāĻĢāϤāĻžāύāĻŋ āĻ•āϰ⧁āύ</string> <string name="revanced_debug_export_logs_to_clipboard_title">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āϗ⧁āϞāĻŋ āϰāĻĢāϤāĻžāύāĻŋ āĻ•āϰ⧁āύ</string>
<string name="revanced_debug_export_logs_to_clipboard_summary">āĻ•ā§āϞāĻŋāĻĒāĻŦā§‹āĻ°ā§āĻĄā§‡ ReVanced āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āϗ⧁āϞāĻŋ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰ⧇</string> <string name="revanced_debug_export_logs_to_clipboard_summary">āĻ•ā§āϞāĻŋāĻĒāĻŦā§‹āĻ°ā§āĻĄā§‡ ReVanced āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āϗ⧁āϞāĻŋ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰ⧇</string>
<string name="revanced_debug_logs_disabled">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āĻŋāĻ‚ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_debug_logs_disabled">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āĻŋāĻ‚ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
@@ -147,15 +156,6 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_debug_protobuffer_summary_on">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻĒā§āϰāĻŸā§‹āĻ•āϞ āĻŦāĻžāĻĢāĻžāϰ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇</string> <string name="revanced_debug_protobuffer_summary_on">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻĒā§āϰāĻŸā§‹āĻ•āϞ āĻŦāĻžāĻĢāĻžāϰ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇</string>
<string name="revanced_debug_protobuffer_summary_off">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻĒā§āϰāĻŸā§‹āĻ•āϞ āĻŦāĻžāĻĢāĻžāϰ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇ āύāĻž</string> <string name="revanced_debug_protobuffer_summary_off">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻĒā§āϰāĻŸā§‹āĻ•āϞ āĻŦāĻžāĻĢāĻžāϰ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇ āύāĻž</string>
<string name="revanced_debug_protobuffer_user_dialog_message">"āĻāχ āϏ⧇āϟāĻŋāĻ‚āϏ āϏāĻ•ā§āώāĻŽ āĻ•āϰāϞ⧇ āĻ•āĻŋāϛ⧁ UI āωāĻĒāĻžāĻĻāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āύ-āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻĒāĻžāĻ ā§āϝ āϏāĻš āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϞ⧇āφāωāϟ āĻĄā§‡āϟāĻž āϞāĻ— āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤\n\nāĻāϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āωāĻĒāĻžāĻĻāĻžāύ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤\n\nāϤāĻŦ⧇, āĻāϟāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāϞ⧇ āφāĻĒāύāĻžāϰ āφāχāĻĒāĻŋ āĻ āĻŋāĻ•āĻžāύāĻžāϰ āĻŽāϤ⧋ āĻ•āĻŋāϛ⧁ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĄā§‡āϟāĻžāĻ“ āϞāĻ— āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤"</string> <string name="revanced_debug_protobuffer_user_dialog_message">"āĻāχ āϏ⧇āϟāĻŋāĻ‚āϏ āϏāĻ•ā§āώāĻŽ āĻ•āϰāϞ⧇ āĻ•āĻŋāϛ⧁ UI āωāĻĒāĻžāĻĻāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āύ-āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻĒāĻžāĻ ā§āϝ āϏāĻš āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϞ⧇āφāωāϟ āĻĄā§‡āϟāĻž āϞāĻ— āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤\n\nāĻāϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āωāĻĒāĻžāĻĻāĻžāύ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤\n\nāϤāĻŦ⧇, āĻāϟāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāϞ⧇ āφāĻĒāύāĻžāϰ āφāχāĻĒāĻŋ āĻ āĻŋāĻ•āĻžāύāĻžāϰ āĻŽāϤ⧋ āĻ•āĻŋāϛ⧁ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĄā§‡āϟāĻžāĻ“ āϞāĻ— āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤"</string>
<string name="revanced_debug_stacktrace_title">āĻ¸ā§āĻŸā§‡āĻ• āĻŸā§āϰ⧇āϏ āϞāĻ—</string>
<string name="revanced_debug_stacktrace_summary_on">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻ¸ā§āĻŸā§‡āĻ• āĻŸā§āϰ⧇āϏ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇</string>
<string name="revanced_debug_stacktrace_summary_off">āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻ¸ā§āĻŸā§‡āĻ• āĻŸā§āϰ⧇āϏ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇ āύāĻž</string>
<string name="revanced_debug_toast_on_error_title">ReVanced āĻāϰ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻŸā§‹āĻ¸ā§āϟ āĻĻ⧇āĻ–āĻžāύ</string>
<string name="revanced_debug_toast_on_error_summary_on">āϝāĻĻāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡ āϤāĻŦ⧇ toast āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇</string>
<string name="revanced_debug_toast_on_error_summary_off">āϝāĻĻāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡ āϤāĻŦ⧇ toast āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇ āύāĻž</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"āĻ¤ā§āϰ⧁āϟāĻŋ \"toast\" āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ ReVanced āĻ¤ā§āϰ⧁āϟāĻŋ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āĻšāϝāĻŧāĨ¤
āφāĻĒāύāĻŋ āϕ⧋āύāĻ“ āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āϘāϟāύāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āĻ…āĻŦāĻšāĻŋāϤ āĻšāĻŦ⧇āύ āύāĻžāĨ¤"</string>
</patch> </patch>
<patch id="layout.hide.general.hideLayoutComponentsPatch"> <patch id="layout.hide.general.hideLayoutComponentsPatch">
<string name="revanced_hide_album_cards_title">āĻ…ā§āϝāĻžāϞāĻŦāĻžāĻŽ āĻ•āĻžāĻ°ā§āĻĄ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_album_cards_title">āĻ…ā§āϝāĻžāϞāĻŦāĻžāĻŽ āĻ•āĻžāĻ°ā§āĻĄ āϞ⧁āĻ•āĻžāύ</string>
@@ -582,6 +582,10 @@ MicroG-āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ
<string name="revanced_hide_stop_ads_button_title">āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_stop_ads_button_title">āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_stop_ads_button_summary_on">āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_hide_stop_ads_button_summary_on">āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_stop_ads_button_summary_off">āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string> <string name="revanced_hide_stop_ads_button_summary_off">āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻšā§āϛ⧇</string>
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<string name="revanced_hide_comments_button_title">āĻŽāĻ¨ā§āϤāĻŦā§āϝ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_hide_comments_button_summary_on">āĻŽāĻ¨ā§āϤāĻŦā§āϝ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_hide_comments_button_summary_off">āĻŽāĻ¨ā§āϤāĻŦā§āϝ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Report āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_hide_report_button_title">Report āϞ⧁āĻ•āĻžāύ</string>
@@ -1238,8 +1242,9 @@ YouTube āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āĻ…āĻŸā§‹ āĻĒā§āϞ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ
āĻĒāϰ⧇ āϝāĻĻāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻšāϝāĻŧ, UI āĻŦāĻžāĻ— āĻāĻĄāĻŧāĻžāϤ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤"</string> āĻĒāϰ⧇ āϝāĻĻāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻšāϝāĻŧ, UI āĻŦāĻžāĻ— āĻāĻĄāĻŧāĻžāϤ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤"</string>
<string name="revanced_spoof_app_version_target_title">āĻ¸ā§āĻĒ⧁āĻĢ āĻ…ā§āϝāĻžāĻĒ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϞāĻ•ā§āĻˇā§āϝ</string> <string name="revanced_spoof_app_version_target_title">āĻ¸ā§āĻĒ⧁āĻĢ āĻ…ā§āϝāĻžāĻĒ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϞāĻ•ā§āĻˇā§āϝ</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - āĻĒ⧁āϰāύ⧋ Shorts āĻĒā§āϞ⧇āϝāĻŧāĻžāϰ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string> <string name="revanced_spoof_app_version_target_entry_1">20.13.41 - āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āύ⧟ āĻāĻŽāύ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻŦāĻžāϰ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_app_version_target_entry_2">19.01.34 - āĻĒ⧁āϰāύ⧋ āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string> <string name="revanced_spoof_app_version_target_entry_2">19.35.36 - āĻĒ⧁āϰāύ⧋ Shorts āĻĒā§āϞ⧇āϝāĻŧāĻžāϰ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - āĻĒ⧁āϰāύ⧋ āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
</patch> </patch>
<patch id="layout.startpage.changeStartPagePatch"> <patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">āĻļ⧁āϰ⧁āϰ āĻĒ⧃āĻˇā§āĻ āĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ</string> <string name="revanced_change_start_page_title">āĻļ⧁āϰ⧁āϰ āĻĒ⧃āĻˇā§āĻ āĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ</string>
@@ -1581,11 +1586,46 @@ DeArrow āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āĻāĻ–āĻžāύ⧇ āϟ
<string name="revanced_music_play_permanent_repeat_summary_on">āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_music_play_permanent_repeat_summary_on">āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_music_play_permanent_repeat_summary_off">āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string> <string name="revanced_music_play_permanent_repeat_summary_off">āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
<string name="revanced_music_hide_cast_button_title">āĻ•āĻžāĻ¸ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_cast_button_summary_on">āĻ•āĻžāĻ¸ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_cast_button_summary_off">āĻ•āĻžāĻ¸ā§āϟ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
<string name="revanced_music_hide_category_bar_title">āĻ•ā§āϝāĻžāϟāĻžāĻ—āϰāĻŋ āĻŦāĻžāϰ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_music_hide_category_bar_title">āĻ•ā§āϝāĻžāϟāĻžāĻ—āϰāĻŋ āĻŦāĻžāϰ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_category_bar_summary_on">āĻ•ā§āϝāĻžāϟāĻžāĻ—āϰāĻŋ āĻŦāĻžāϰ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_music_hide_category_bar_summary_on">āĻ•ā§āϝāĻžāϟāĻžāĻ—āϰāĻŋ āĻŦāĻžāϰ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_category_bar_summary_off">āĻ•ā§āϝāĻžāϟāĻžāĻ—āϰāĻŋ āĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_music_hide_category_bar_summary_off">āĻ•ā§āϝāĻžāϟāĻžāĻ—āϰāĻŋ āĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰ</string>
<string name="revanced_music_navigation_bar_screen_summary">āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰ⧇āϰ āĻŦā§‹āϤāĻžāĻŽāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ āĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ</string>
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_home_button_title">āĻšā§‹āĻŽ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">āĻšā§‹āĻŽ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">āĻšā§‹āĻŽ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_samples_button_title">āĻ¸ā§āϝāĻžāĻŽā§āĻĒāϞ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">āĻ¸ā§āϝāĻžāĻŽā§āĻĒāϞ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">āĻ¸ā§āϝāĻžāĻŽā§āĻĒāϞ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_explore_button_title">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_explore_button_summary_off">āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_library_button_title">āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_navigation_bar_library_button_summary_on">āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_library_button_summary_off">āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
<string name="revanced_music_hide_navigation_bar_upgrade_button_title">āφāĻĒāĻ—ā§āϰ⧇āĻĄ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_on">āφāĻĒāĻ—ā§āϰ⧇āĻĄ āĻŦā§‹āϤāĻžāĻŽ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_off">āφāĻĒāĻ—ā§āϰ⧇āĻĄ āĻŦā§‹āϤāĻžāĻŽ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_title">āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_navigation_bar_summary_on">āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_summary_off">āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_labels_title">āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āĻŦā§‹āϤāĻžāĻŽā§‡āϰ āϞ⧇āĻŦ⧇āϞāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_navigation_bar_labels_summary_on">āϞ⧇āĻŦ⧇āϞāϗ⧁āϞāĻŋ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>
<string name="revanced_music_hide_navigation_bar_labels_summary_off">āϞ⧇āĻŦ⧇āϞāϗ⧁āϞāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āφāϛ⧇</string>
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
<string name="revanced_music_hide_get_premium_label_title">\'āϗ⧇āϟ āĻŽāĻŋāωāϜāĻŋāĻ• āĻĒā§āϰāĻŋāĻŽāĻŋāϝāĻŧāĻžāĻŽ\' āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ</string> <string name="revanced_music_hide_get_premium_label_title">\'āϗ⧇āϟ āĻŽāĻŋāωāϜāĻŋāĻ• āĻĒā§āϰāĻŋāĻŽāĻŋāϝāĻŧāĻžāĻŽ\' āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ</string>
<string name="revanced_music_hide_get_premium_label_summary_on">āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string> <string name="revanced_music_hide_get_premium_label_summary_on">āϞ⧇āĻŦ⧇āϞ āϞ⧁āĻ•āĻžāύ⧋ āφāϛ⧇</string>

View File

@@ -89,6 +89,7 @@ Second \"item\" text"</string>
<patch id="layout.buttons.action.hideButtonsPatch"> <patch id="layout.buttons.action.hideButtonsPatch">
<!-- 'Share' should be translated with the same localized wording that YouTube displays. --> <!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. --> <!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays. <!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually only shows on live streams. --> This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. --> <!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
@@ -253,8 +254,17 @@ Second \"item\" text"</string>
</patch> </patch>
<patch id="interaction.permanentrepeat.permanentRepeatPatch"> <patch id="interaction.permanentrepeat.permanentRepeatPatch">
</patch> </patch>
<patch id="layout.castbutton.hideCastButton">
</patch>
<patch id="layout.compactheader.hideCategoryBar"> <patch id="layout.compactheader.hideCategoryBar">
</patch> </patch>
<patch id="layout.navigationbar.navigationBarPatch">
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
</patch>
<patch id="layout.premium.hideGetPremiumPatch"> <patch id="layout.premium.hideGetPremiumPatch">
</patch> </patch>
<patch id="layout.upgradebutton.hideUpgradeButtonPatch"> <patch id="layout.upgradebutton.hideUpgradeButtonPatch">

Some files were not shown because too many files have changed in this diff Show More