mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-15 23:33:57 +00:00
Compare commits
13 Commits
v5.40.0-de
...
v5.40.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7651ef0881 | ||
|
|
f97d33206b | ||
|
|
3d986e6716 | ||
|
|
01c0f1bd1a | ||
|
|
4178e8a64f | ||
|
|
7e1bb8f3c7 | ||
|
|
f7f4a1b0f0 | ||
|
|
e89660d234 | ||
|
|
db796fb883 | ||
|
|
6bb8bad8d7 | ||
|
|
aa1fb41ad8 | ||
|
|
418f5945c2 | ||
|
|
e26c971067 |
35
CHANGELOG.md
35
CHANGELOG.md
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -15,10 +15,9 @@ public class Settings extends BaseSettings {
|
||||
// Ads
|
||||
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_UPGRADE_BUTTON = new BooleanSetting("revanced_music_hide_upgrade_button", TRUE, true);
|
||||
|
||||
// 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_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);
|
||||
|
||||
@@ -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() {
|
||||
if (versionName == null) {
|
||||
|
||||
@@ -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.ConcurrentMap;
|
||||
@@ -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 VIDEO_ACTION_BAR_PATH_PREFIX = "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 final StringFilterGroup likeSubscribeGlow;
|
||||
@@ -82,6 +86,10 @@ final class ButtonsFilter extends Filter {
|
||||
Settings.HIDE_STOP_ADS_BUTTON,
|
||||
"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,
|
||||
// as there's a chance the path is a generic action button and won't contain 'clip_button'
|
||||
new ByteArrayFilterGroup(
|
||||
@@ -124,9 +132,8 @@ final class ButtonsFilter extends Filter {
|
||||
}
|
||||
|
||||
if (matchedGroup == bufferFilterPathGroup) {
|
||||
// Make sure the current path is the right one
|
||||
// to avoid false positives.
|
||||
return path.startsWith(VIDEO_ACTION_BAR_PATH)
|
||||
// Make sure the current path is the right one to avoid false positives.
|
||||
return (path.startsWith(VIDEO_ACTION_BAR_PATH) || path.startsWith(COMPACTIFY_VIDEO_ACTION_BAR_PATH))
|
||||
&& bufferButtonsGroupList.check(buffer).isFiltered();
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehavi
|
||||
import android.graphics.Color;
|
||||
|
||||
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.BooleanSetting;
|
||||
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 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_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_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);
|
||||
@@ -513,10 +515,14 @@ public class Settings extends BaseSettings {
|
||||
DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.resetToDefault();
|
||||
}
|
||||
|
||||
// Old spoof versions that no longer work.
|
||||
if (SPOOF_APP_VERSION_TARGET.get().compareTo(SPOOF_APP_VERSION_TARGET.defaultValue) < 0) {
|
||||
Logger.printInfo(() -> "Resetting spoof app version target");
|
||||
// Old spoof versions that no longer work,
|
||||
// or is spoofing to a version the same or newer than this app.
|
||||
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.resetToDefault();
|
||||
}
|
||||
|
||||
// RYD requires manually migrating old settings since the lack of
|
||||
|
||||
@@ -95,6 +95,7 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_kids_videos");
|
||||
} else if (clientType == ClientType.ANDROID_CREATOR) {
|
||||
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");
|
||||
}
|
||||
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.40.0-dev.5
|
||||
version = 5.40.0-dev.10
|
||||
|
||||
@@ -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 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 static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,8 @@ val hideVideoAdsPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ val enableExclusiveAudioPlaybackPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -27,7 +27,8 @@ val permanentRepeatPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@ val permanentShufflePatch = bytecodePatch(
|
||||
) {
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -33,7 +33,8 @@ val hideCastButton = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
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.getInstruction
|
||||
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.settingsPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.util.addInstructionsAtControlFlowLabel
|
||||
import app.revanced.util.findFreeRegister
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@@ -29,7 +27,8 @@ val hideCategoryBar = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
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.util.containsLiteralInstruction
|
||||
import app.revanced.util.getReference
|
||||
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.reference.MethodReference
|
||||
|
||||
@@ -23,9 +23,9 @@ internal val tabLayoutTextFingerprint = fingerprint {
|
||||
Opcode.MOVE_RESULT
|
||||
)
|
||||
strings("FEmusic_search")
|
||||
literal { text1 }
|
||||
custom { method, _ ->
|
||||
indexOfGetVisibilityInstruction(method) >= 0
|
||||
method.containsLiteralInstruction(text1)
|
||||
&& indexOfGetVisibilityInstruction(method) >= 0
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,8 @@ val navigationBarPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -28,7 +28,8 @@ val hideGetPremiumPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
@@ -1,104 +1,12 @@
|
||||
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.util.smali.toInstructions
|
||||
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
|
||||
import app.revanced.patches.music.layout.navigationbar.navigationBarPatch
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideUpgradeButtonPatch;"
|
||||
|
||||
@Deprecated("This patch will be removed in the future.")
|
||||
@Deprecated("Patch is obsolete and was replaced by navigation bar patch", ReplaceWith("navigationBarPatch"))
|
||||
@Suppress("unused")
|
||||
val hideUpgradeButton = bytecodePatch(
|
||||
description = "Hides the upgrade tab from the pivot bar.",
|
||||
) {
|
||||
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,
|
||||
)
|
||||
}
|
||||
}
|
||||
val hideUpgradeButton = bytecodePatch{
|
||||
dependsOn(navigationBarPatch)
|
||||
}
|
||||
|
||||
@Deprecated("Patch was renamed", ReplaceWith("hideUpgradeButton"))
|
||||
|
||||
@@ -17,7 +17,8 @@ val bypassCertificateChecksPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ val backgroundPlaybackPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
@@ -8,12 +8,16 @@ 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.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.Sorting
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
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
|
||||
|
||||
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 settingsResourcePatch = resourcePatch {
|
||||
dependsOn(
|
||||
resourceMappingPatch,
|
||||
@@ -87,27 +90,6 @@ val settingsPatch = bytecodePatch(
|
||||
addResources("music", "misc.settings.settingsPatch")
|
||||
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.
|
||||
preferences += NonInteractivePreference(
|
||||
key = "revanced_settings_music_screen_0_about",
|
||||
@@ -154,19 +136,19 @@ fun newIntent(settingsName: String) = IntentPreference.Intent(
|
||||
|
||||
object PreferenceScreen : BasePreferenceScreen() {
|
||||
val ADS = Screen(
|
||||
"revanced_settings_music_screen_1_ads",
|
||||
key = "revanced_settings_music_screen_1_ads",
|
||||
summaryKey = null
|
||||
)
|
||||
val GENERAL = Screen(
|
||||
"revanced_settings_music_screen_2_general",
|
||||
key = "revanced_settings_music_screen_2_general",
|
||||
summaryKey = null
|
||||
)
|
||||
val PLAYER = Screen(
|
||||
"revanced_settings_music_screen_3_player",
|
||||
key = "revanced_settings_music_screen_3_player",
|
||||
summaryKey = null
|
||||
)
|
||||
val MISC = Screen(
|
||||
"revanced_settings_music_screen_4_misc",
|
||||
key = "revanced_settings_music_screen_4_misc",
|
||||
summaryKey = null
|
||||
)
|
||||
|
||||
|
||||
@@ -33,7 +33,8 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52"
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
}
|
||||
@@ -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;")
|
||||
}
|
||||
@@ -1,9 +1,13 @@
|
||||
package app.revanced.patches.shared.misc.spoof
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.getReference
|
||||
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.reference.MethodReference
|
||||
|
||||
internal val buildInitPlaybackRequestFingerprint = fingerprint {
|
||||
returns("Lorg/chromium/net/UrlRequest\$Builder;")
|
||||
@@ -37,10 +41,6 @@ internal val buildRequestFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("Lorg/chromium/net/UrlRequest") // UrlRequest; or UrlRequest$Builder;
|
||||
custom { methodDef, _ ->
|
||||
if (indexOfNewUrlRequestBuilderInstruction(methodDef) < 0) {
|
||||
return@custom false
|
||||
}
|
||||
|
||||
// Different targets have slightly different parameters
|
||||
|
||||
// Earlier targets have parameters:
|
||||
@@ -74,10 +74,10 @@ internal val buildRequestFingerprint = fingerprint {
|
||||
val parameterTypesSize = parameterTypes.size
|
||||
(parameterTypesSize == 6 || parameterTypesSize == 7 || parameterTypesSize == 8) &&
|
||||
parameterTypes[1] == "Ljava/util/Map;" // URL headers.
|
||||
&& indexOfNewUrlRequestBuilderInstruction(methodDef) >= 0
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal val protobufClassParseByteBufferFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PROTECTED, AccessFlags.STATIC)
|
||||
returns("L")
|
||||
@@ -191,3 +191,13 @@ internal val playbackStartDescriptorFeatureFlagFingerprint = fingerprint {
|
||||
returns("Z")
|
||||
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;"
|
||||
}
|
||||
|
||||
@@ -16,20 +16,17 @@ import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.util.findFreeRegister
|
||||
import app.revanced.util.findInstructionIndicesReversedOrThrow
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.insertLiteralOverride
|
||||
import app.revanced.util.returnEarly
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
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.OneRegisterInstruction
|
||||
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.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.ImmutableMethodParameter
|
||||
|
||||
@@ -337,12 +334,3 @@ fun spoofVideoStreamsPatch(
|
||||
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;"
|
||||
}
|
||||
|
||||
@@ -78,10 +78,9 @@ val hideAdsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -27,10 +27,9 @@ val hideGetPremiumPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -25,10 +25,9 @@ val videoAdsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -55,10 +55,9 @@ val copyVideoUrlPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -26,10 +26,9 @@ val removeViewerDiscretionDialogPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@ val disableDoubleTapActionsPatch = bytecodePatch(
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -76,10 +76,9 @@ val downloadsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -22,10 +22,9 @@ val seekbarPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -90,10 +90,9 @@ val swipeControlsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -26,10 +26,9 @@ val autoCaptionsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -45,10 +45,9 @@ val customBrandingPatch = resourcePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -95,10 +95,9 @@ val changeHeaderPatch = resourcePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -24,10 +24,9 @@ val hideButtonsPatch = resourcePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -41,6 +40,7 @@ val hideButtonsPatch = resourcePatch(
|
||||
SwitchPreference("revanced_disable_like_subscribe_glow"),
|
||||
SwitchPreference("revanced_hide_ask_button"),
|
||||
SwitchPreference("revanced_hide_clip_button"),
|
||||
SwitchPreference("revanced_hide_comments_button"),
|
||||
SwitchPreference("revanced_hide_download_button"),
|
||||
SwitchPreference("revanced_hide_hype_button"),
|
||||
SwitchPreference("revanced_hide_like_dislike_button"),
|
||||
|
||||
@@ -42,10 +42,9 @@ val navigationButtonsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -60,10 +60,9 @@ val hidePlayerOverlayButtonsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -35,10 +35,9 @@ val changeFormFactorPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -61,10 +61,9 @@ val hideEndscreenCardsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -33,10 +33,9 @@ val hideEndScreenSuggestedVideoPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -31,10 +31,9 @@ val disableFullscreenAmbientModePatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -128,10 +128,9 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -59,10 +59,9 @@ val hideInfoCardsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -26,10 +26,9 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -50,10 +50,9 @@ val hideRelatedVideoOverlayPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -31,10 +31,9 @@ val disableRollingNumberAnimationPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -174,10 +174,9 @@ val hideShortsComponentsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -33,10 +33,9 @@ val disableSignInToTvPopupPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -23,10 +23,9 @@ val hideTimestampPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -155,10 +155,9 @@ val miniplayerPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -23,10 +23,9 @@ val playerPopupPanelsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -23,10 +23,9 @@ internal val exitFullscreenPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -25,10 +25,9 @@ val openVideosFullscreenPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -54,10 +54,9 @@ val customPlayerOverlayOpacityPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -63,10 +63,9 @@ val returnYouTubeDislikePatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -68,10 +68,9 @@ val wideSearchbarPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -46,10 +46,9 @@ val shortsAutoplayPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -66,10 +66,9 @@ val openShortsInRegularPlayerPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -128,10 +128,9 @@ val sponsorBlockPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -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.youtube.misc.extension.sharedExtensionPatch
|
||||
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.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
@@ -60,10 +61,9 @@ val spoofAppVersionPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -79,17 +79,21 @@ val spoofAppVersionPatch = bytecodePatch(
|
||||
tag = "app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory",
|
||||
preferences = setOf(
|
||||
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(
|
||||
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 {
|
||||
ListPreference(
|
||||
key = "revanced_spoof_app_version_target",
|
||||
summaryKey = null,
|
||||
entriesKey = "revanced_spoof_app_version_target_legacy_entries",
|
||||
entryValuesKey = "revanced_spoof_app_version_target_legacy_entry_values"
|
||||
entriesKey = "revanced_spoof_app_version_target_legacy_19_34_entries",
|
||||
entryValuesKey = "revanced_spoof_app_version_target_legacy_19_34_entry_values"
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -34,10 +34,9 @@ val changeStartPagePatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -36,10 +36,9 @@ val disableResumingShortsOnStartupPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -206,10 +206,9 @@ val themePatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -35,10 +35,9 @@ val alternativeThumbnailsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -29,10 +29,9 @@ val bypassImageRegionRestrictionsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -25,10 +25,9 @@ val announcementsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -26,10 +26,9 @@ val autoRepeatPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -53,10 +53,9 @@ val backgroundPlaybackPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,144 +1,34 @@
|
||||
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.addResourcesPatch
|
||||
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.debugging.enableDebuggingPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
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.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 =
|
||||
"Lapp/revanced/extension/youtube/patches/EnableDebuggingPatch;"
|
||||
|
||||
// TODO: Refactor this into a shared patch that can be used by both YT and YT Music.
|
||||
// Almost all of the feature flag hooks are the same between both apps.
|
||||
val enableDebuggingPatch = bytecodePatch(
|
||||
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",
|
||||
@Suppress("unused")
|
||||
val enableDebuggingPatch = enableDebuggingPatch(
|
||||
block = {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("shared", "misc.debugging.enableDebuggingPatch")
|
||||
compatibleWith(
|
||||
"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")
|
||||
|
||||
PreferenceScreen.MISC.addPreferences(
|
||||
PreferenceScreenPreference(
|
||||
key = "revanced_debug_screen",
|
||||
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.
|
||||
}
|
||||
}
|
||||
},
|
||||
hookStringFeatureFlag = true,
|
||||
preferenceScreen = PreferenceScreen.MISC,
|
||||
additionalDebugPreferences = listOf(SwitchPreference("revanced_debug_protobuffer"))
|
||||
)
|
||||
|
||||
@@ -26,10 +26,9 @@ val spoofDeviceDimensionsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -23,10 +23,9 @@ val checkWatchHistoryDomainNameResolutionPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
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 com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val scrollPositionFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PROTECTED, AccessFlags.FINAL)
|
||||
@@ -24,30 +24,18 @@ internal val recyclerViewTopScrollingFingerprint = fingerprint {
|
||||
returns("V")
|
||||
parameters()
|
||||
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.CONST_4,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.GOTO,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_INTERFACE,
|
||||
Opcode.INVOKE_INTERFACE
|
||||
)
|
||||
}
|
||||
|
||||
internal val recyclerViewTopScrollingParentFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
parameters("L", "L", "Landroid/view/ViewGroup;", "Landroid/view/ViewGroup;")
|
||||
opcodes(
|
||||
Opcode.INVOKE_DIRECT,
|
||||
Opcode.IPUT_OBJECT,
|
||||
Opcode.IPUT_OBJECT,
|
||||
Opcode.IPUT_OBJECT,
|
||||
@@ -55,5 +43,8 @@ internal val recyclerViewTopScrollingParentFingerprint = fingerprint {
|
||||
Opcode.CONST_16,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.NEW_INSTANCE,
|
||||
Opcode.INVOKE_DIRECT,
|
||||
Opcode.IPUT_OBJECT,
|
||||
Opcode.RETURN_VOID
|
||||
)
|
||||
}
|
||||
|
||||
@@ -15,13 +15,14 @@ internal val fixBackToExitGesturePatch = bytecodePatch(
|
||||
) {
|
||||
|
||||
execute {
|
||||
recyclerViewTopScrollingFingerprint.match(recyclerViewTopScrollingParentFingerprint.originalClassDef)
|
||||
.let {
|
||||
it.method.addInstruction(
|
||||
it.patternMatch!!.endIndex,
|
||||
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->onTopView()V"
|
||||
)
|
||||
}
|
||||
recyclerViewTopScrollingFingerprint.match(
|
||||
recyclerViewTopScrollingParentFingerprint.originalClassDef
|
||||
).let {
|
||||
it.method.addInstruction(
|
||||
it.patternMatch!!.endIndex,
|
||||
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->onTopView()V"
|
||||
)
|
||||
}
|
||||
|
||||
scrollPositionFingerprint.let {
|
||||
navigate(it.originalMethod)
|
||||
|
||||
@@ -37,10 +37,9 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch(
|
||||
YOUTUBE_PACKAGE_NAME(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -28,10 +28,9 @@ val disableHapticFeedbackPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -34,10 +34,9 @@ val bypassURLRedirectsPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -43,10 +43,9 @@ val openLinksExternallyPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -32,10 +32,9 @@ val removeTrackingQueryParameterPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -24,10 +24,9 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -46,10 +46,9 @@ val forceOriginalAudioPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -56,10 +56,9 @@ val disableHdrPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -26,10 +26,9 @@ val videoQualityPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -30,10 +30,9 @@ val playbackSpeedPatch = bytecodePatch(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.47.53",
|
||||
"20.07.39",
|
||||
"20.12.46",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<!-- '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. -->
|
||||
<!-- 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.
|
||||
This button usually only shows on live streams. -->
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -253,8 +254,17 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</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>
|
||||
<patch id="layout.upgradebutton.hideUpgradeButtonPatch">
|
||||
|
||||
@@ -89,6 +89,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<!-- '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. -->
|
||||
<!-- 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.
|
||||
This button usually only shows on live streams. -->
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -253,8 +254,17 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</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>
|
||||
<patch id="layout.upgradebutton.hideUpgradeButtonPatch">
|
||||
|
||||
@@ -107,6 +107,15 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_debug_title">ØĒØŗØŦŲŲ ØĒØĩØŲØ Ø§ŲØŖØŽØˇØ§ØĄ</string>
|
||||
<string name="revanced_debug_summary_on">ØĒŲ
ØĒŲ
ŲŲŲ ØĒØŗØŦŲŲØ§ØĒ ØĒØĩØŲØ Ø§ŲØŖØŽØˇØ§ØĄ</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_summary">ŲØŗØŽ ØŗØŦŲØ§ØĒ ØĒØĩØŲØ ØŖØŽØˇØ§ØĄ ReVanced ØĨŲŲ Ø§ŲØØ§ŲØ¸ØŠ</string>
|
||||
<string name="revanced_debug_logs_disabled">ØĒŲ
ØĒØšØˇŲŲ ØĒØŗØŦŲŲØ§ØĒ ØĒØĩØŲØ Ø§ŲØŖØŽØˇØ§ØĄ</string>
|
||||
@@ -151,15 +160,6 @@ Second \"item\" text"</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 id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<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_summary_on">Ø˛Øą ØĨŲŲØ§Ų Ø§ŲØĨØšŲØ§ŲاØĒ Ų
ØŽŲŲ</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.
|
||||
This button usually only shows on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">ØĨØŽŲØ§ØĄ Ø§ŲØĨØ¨ŲØ§Øē</string>
|
||||
@@ -1242,8 +1246,9 @@ Second \"item\" text"</string>
|
||||
|
||||
ØĨذا ØĒŲ
ØĨŲŲØ§Ų ØĒØ´ØēŲŲŲ ŲØ§ØŲŲØ§Ø Ų
Ų Ø§ŲŲ
ØŗØĒØØŗŲ Ų
ØŗØ Ø¨ŲØ§ŲاØĒ Ø§ŲØĒØˇØ¨ŲŲ ŲŲ
ŲØš ØØ¯ŲØĢ ØŖØŽØˇØ§ØĄ ŲŲ ŲØ§ØŦŲØŠ Ø§ŲŲ
ØŗØĒ؎دŲ
."</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_2">19.01.34 - Ø§ØŗØĒؚاد؊ ØŖŲŲŲŲØ§ØĒ Ø§ŲØĒŲŲŲ Ø§ŲŲØ¯ŲŲ
ØŠ</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Ø§ØŗØĒؚاد؊ Ø´ØąŲØˇ ØĨØŦØąØ§ØĄØ§ØĒ اŲŲŲØ¯ŲŲ ØēŲØą Ø§ŲŲ
ØˇŲŲ</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 id="layout.startpage.changeStartPagePatch">
|
||||
<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_off">ØĒŲ
ØĒØšØˇŲŲ Ø§ŲØĒŲØąØ§Øą Ø§ŲØ¯Ø§ØĻŲ
</string>
|
||||
</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">
|
||||
<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_off">Ø´ØąŲØˇ اŲŲØĻØ§ØĒ Ų
ØšØąŲØļ</string>
|
||||
</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">
|
||||
<string name="revanced_music_hide_get_premium_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ
ŲØŠ \'Ø§ŲØØĩŲŲ ØšŲŲ Music Premium\'</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_on">Ø§ŲØĒØŗŲ
ŲØŠ Ų
ØŽŲŲØŠ</string>
|
||||
|
||||
@@ -89,6 +89,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<!-- '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. -->
|
||||
<!-- 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.
|
||||
This button usually only shows on live streams. -->
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -255,8 +256,17 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</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>
|
||||
<patch id="layout.upgradebutton.hideUpgradeButtonPatch">
|
||||
|
||||
@@ -107,6 +107,15 @@ Oynatma iÅlÉmÉyÉ bilÉr"</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_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_summary">ReVanced sazlama qeydlÉrini buferÉ kÃļçÃŧrÃŧ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.
|
||||
|
||||
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 id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<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_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>
|
||||
<!-- 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.
|
||||
This button usually only shows on live streams. -->
|
||||
<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>
|
||||
<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.01.34 - KÃļhnÉ fÉaliyyÉt simvollarÄąn 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_3">19.01.34 - KÃļhnÉ fÉaliyyÉt simvollarÄąn bÉrpa et</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<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_off">KÉsintisiz tÉkrarlama qapalÄądÄąr</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
</patch>
|
||||
<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_summary_on">Kateqoriya cizgisi gizlidir</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kateqoriya cizgisi gÃļrÃŧnÃŧr</string>
|
||||
</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">
|
||||
<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>
|
||||
|
||||
@@ -107,6 +107,15 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_debug_title">ĐаĐŋŅŅ Đ°Đ´ĐģадĐēŅ</string>
|
||||
<string name="revanced_debug_summary_on">ĐŅŅĐŊаĐģŅ Đ°Đ´ĐģадĐēŅ ŅĐēĐģŅŅаĐŊŅ</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_summary">ĐаĐŋŅŅŅĐĩ адĐģадаŅĐŊŅŅ ĐģĐ°ĐŗŅ ReVanced Ņ ĐąŅŅĐĩŅ Đ°ĐąĐŧĐĩĐŊŅ</string>
|
||||
<string name="revanced_debug_logs_disabled">ĐĐ´ĐģадаŅĐŊаĐĩ ĐģĐ°ĐŗĐ°Đ˛Đ°ĐŊĐŊĐĩ адĐēĐģŅŅаĐŊа</string>
|
||||
@@ -151,15 +160,6 @@ Second \"item\" text"</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 id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<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_summary_on">ĐĐŊĐžĐŋĐēа \"ĐĄĐŋŅĐŊŅŅŅ ŅŅĐēĐģаĐŧŅ\" ŅŅ
аваĐŊа</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.
|
||||
This button usually only shows on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">ĐĄŅ
аваŅŅ ŅĐŋŅаваСдаŅŅ</string>
|
||||
@@ -1243,8 +1247,9 @@ Second \"item\" text"</string>
|
||||
|
||||
ĐаĐģŅ ĐŋаСĐŊĐĩĐš ĐąŅдСĐĩ адĐēĐģŅŅаĐŊа, ŅŅĐēаĐŧĐĩĐŊĐ´ŅĐĩŅŅа аŅŅŅŅŅŅŅ Đ´Đ°ĐŊŅŅ ĐŋŅŅĐēĐģадаĐŊĐŊŅ, Đēай ĐŋаСйĐĩĐŗĐŊŅŅŅ ĐŋаĐŧŅĐģаĐē Ņ ŅĐŊŅŅŅŅĐĩĐšŅĐĩ."</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_2">19.01.34 - ĐĐ´ĐŊаŅĐģĐĩĐŊĐŊĐĩ ŅŅаŅŅŅ
СĐŊаŅĐēĐžŅ ĐŊавŅĐŗĐ°ŅŅŅ</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - ĐĐ´ĐŊавŅŅŅ ĐŊĐĩ ĐˇĐŗĐžŅĐŊŅŅŅ ŅадОĐē дСĐĩŅĐŊĐŊŅŅ Đ˛ŅĐ´Ņа</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 id="layout.startpage.changeStartPagePatch">
|
||||
<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_off">ĐаŅŅаŅĐŊĐŊŅ ĐŋаŅŅĐžŅ Đ°Đ´ĐēĐģŅŅаĐŊŅ</string>
|
||||
</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">
|
||||
<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_off">ĐаĐŊŅĐģŅ ĐēаŅŅĐŗĐžŅŅĐš ĐŋаĐēаСаĐŊаŅ</string>
|
||||
</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">
|
||||
<string name="revanced_music_hide_get_premium_label_title">ĐĄŅ
аваŅŅ ĐŊадĐŋŅŅ \"ĐŅŅŅĐŧаŅŅ Music Premium\"</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_on">ĐадĐŋŅŅ ŅŅ
аваĐŊŅ</string>
|
||||
|
||||
@@ -107,6 +107,15 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_debug_title">ĐĐŊĐĩвĐŊиĐē ĐŊа ĐžŅŅŅŅаĐŊŅваĐŊĐĩŅĐž ĐŊа ĐŗŅĐĩŅĐēи</string>
|
||||
<string name="revanced_debug_summary_on">ĐĐŊĐĩвĐŊиĐēŅŅ ĐˇĐ° ĐžŅŅŅаĐŊŅваĐŊĐĩ ĐŊа ĐŗŅĐĩŅĐēи Đĩ аĐēŅивиŅаĐŊ</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_summary">ĐĐžĐŋиŅа ĐģĐžĐŗĐžĐ˛ĐĩŅĐĩ Са ĐžŅŅŅŅаĐŊŅваĐŊĐĩ ĐŊа ĐŗŅĐĩŅĐēи ĐŊа ReVanced в ĐēĐģиĐŋйОŅда</string>
|
||||
<string name="revanced_debug_logs_disabled">ĐŅŅŅŅаĐŊŅваĐŊĐĩŅĐž ĐŊа ĐŗŅĐĩŅĐēи Đĩ Đ´ĐĩаĐēŅивиŅаĐŊĐž</string>
|
||||
@@ -151,15 +160,6 @@ Second \"item\" text"</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 id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<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_summary_on">ĐŅŅĐžĐŊŅŅ ĐˇĐ° ŅĐŋиŅаĐŊĐĩ ĐŊа ŅĐĩĐēĐģаĐŧи Đĩ ŅĐēŅиŅ</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.
|
||||
This button usually only shows on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">ĐŅŅĐžĐŊ Са Đ´ĐžĐēĐģади</string>
|
||||
@@ -1242,8 +1246,9 @@ Second \"item\" text"</string>
|
||||
|
||||
ĐĐēĐž ĐŋĐž-ĐēŅŅĐŊĐž ĐąŅĐ´Đĩ иСĐēĐģŅŅĐĩĐŊĐž, ĐŋŅĐĩĐŋĐžŅŅŅиŅĐĩĐģĐŊĐž Đĩ да иСŅиŅŅиŅĐĩ даĐŊĐŊиŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž, Са да ĐŋŅĐĩĐ´ĐžŅвŅаŅиŅĐĩ ĐŗŅĐĩŅĐēи в ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēĐ¸Ņ Đ¸ĐŊŅĐĩŅŅĐĩĐšŅ."</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_2">19.01.34 - ĐŅСŅŅаĐŊОвŅваĐŊĐĩ ĐŊа ŅŅаŅи иĐēĐžĐŊи Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°ŅиŅ</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - ĐŅСŅŅаĐŊОвŅваĐŊĐĩ ĐŊа ĐŊĐĩŅĐŗŅваĐĩĐŧа ĐģĐĩĐŊŅа Ņ Đ´ĐĩĐšŅŅĐ˛Đ¸Ņ ĐˇĐ° видĐĩĐž</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 id="layout.startpage.changeStartPagePatch">
|
||||
<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_off">ĐĐžŅŅĐžŅĐŊĐŊĐžŅĐž ĐŋОвŅаŅŅĐŊĐĩ Đĩ Đ´ĐĩаĐēŅивиŅаĐŊĐž</string>
|
||||
</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">
|
||||
<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_off">ĐĐĩĐŊŅаŅа Ņ ĐēаŅĐĩĐŗĐžŅии Đĩ ĐŋĐžĐēаСаĐŊа</string>
|
||||
</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">
|
||||
<string name="revanced_music_hide_get_premium_label_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐĩŅиĐēĐĩŅа âĐСĐĩĐŧĐĩŅĐĩ Music Premiumâ</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_on">ĐŅиĐēĐĩŅŅŅ Đĩ ŅĐēŅиŅ</string>
|
||||
|
||||
@@ -107,6 +107,15 @@ MicroG-āĻāϰ āĻāύā§āϝ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ
|
||||
<string name="revanced_debug_title">āĻĄāĻŋāĻŦāĻžāĻ āϞāĻāĻŋāĻ</string>
|
||||
<string name="revanced_debug_summary_on">āĻĄāĻŋāĻŦāĻžāĻ āϞāĻ āϏāĻā§āϰāĻŋā§ āĻšā§ā§āĻā§</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_summary">āĻā§āϞāĻŋāĻĒāĻŦā§āϰā§āĻĄā§ ReVanced āĻĄāĻŋāĻŦāĻžāĻ āϞāĻāĻā§āϞāĻŋ āĻ
āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§</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_off">āĻĄāĻŋāĻŦāĻžāĻ āϞāĻ āĻĒā§āϰāĻā§āĻāϞ āĻŦāĻžāĻĢāĻžāϰ āϏāĻāϝā§āĻā§āϤ āĻāϰāĻŦā§ āύāĻž</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 id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<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_summary_on">āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻŦāύā§āϧ āĻāϰā§āύ āĻŦā§āϤāĻžāĻŽāĻāĻŋ āϞā§āĻāĻžāύ⧠āĻāĻā§</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.
|
||||
This button usually only shows on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">Report āϞā§āĻāĻžāύ</string>
|
||||
@@ -1238,8 +1242,9 @@ YouTube āϏā§āĻāĻŋāĻāϏ⧠āĻ
āĻā§ āĻĒā§āϞ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ
|
||||
|
||||
āĻĒāϰ⧠āϝāĻĻāĻŋ āĻŦāύā§āϧ āĻāϰāĻž āĻšāϝāĻŧ, UI āĻŦāĻžāĻ āĻāĻĄāĻŧāĻžāϤ⧠āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĄā§āĻāĻž āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤"</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_2">19.01.34 - āĻĒā§āϰāύ⧠āύā§āĻāĻŋāĻā§āĻļāύ āĻāĻāĻāύ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āύ</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āύ⧠āĻāĻŽāύ āĻāĻŋāĻĄāĻŋāĻ āĻ
ā§āϝāĻžāĻāĻļāύ āĻŦāĻžāϰ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āύ</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 id="layout.startpage.changeStartPagePatch">
|
||||
<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_off">āϏā§āĻĨāĻžāϝāĻŧā§ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻ
āĻā§āώāĻŽ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§</string>
|
||||
</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">
|
||||
<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_off">āĻā§āϝāĻžāĻāĻžāĻāϰāĻŋ āĻŦāĻžāϰ āĻĻā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
</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">
|
||||
<string name="revanced_music_hide_get_premium_label_title">\'āĻā§āĻ āĻŽāĻŋāĻāĻāĻŋāĻ āĻĒā§āϰāĻŋāĻŽāĻŋāϝāĻŧāĻžāĻŽ\' āϞā§āĻŦā§āϞ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_on">āϞā§āĻŦā§āϞ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
|
||||
@@ -89,6 +89,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<!-- '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. -->
|
||||
<!-- 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.
|
||||
This button usually only shows on live streams. -->
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -253,8 +254,17 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</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>
|
||||
<patch id="layout.upgradebutton.hideUpgradeButtonPatch">
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user