chore: Merge branch dev to main (#6174)

This commit is contained in:
LisoUseInAIKyrios
2025-11-01 16:32:23 +01:00
committed by GitHub
144 changed files with 867 additions and 685 deletions

View File

@@ -1,3 +1,52 @@
# [5.45.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.5...v5.45.0-dev.6) (2025-11-01)
### Features
* **Spoof video streams:** Add experimental "Android No SDK" client type ([5f23bfe](https://github.com/ReVanced/revanced-patches/commit/5f23bfe833c6e01617a7dbc5325b4a3fb931e53e))
# [5.45.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.4...v5.45.0-dev.5) (2025-11-01)
### Bug Fixes
* **TikTok - Downloads:** Fix download path setting ([#6191](https://github.com/ReVanced/revanced-patches/issues/6191)) ([3e4990a](https://github.com/ReVanced/revanced-patches/commit/3e4990afff4c86b93970b153db713ad0f813124d))
* **YouTube - Spoof video streams:** Remove spoof stream audio selector that no longer works ([292fae4](https://github.com/ReVanced/revanced-patches/commit/292fae440c6d5694c5e84407becec2d91f1fd156))
# [5.45.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.3...v5.45.0-dev.4) (2025-10-30)
### Bug Fixes
* **YouTube - Change header:** Do not mirror header graphic with RTL languages ([a0c5604](https://github.com/ReVanced/revanced-patches/commit/a0c56049510ce040e1ccd49257864672c343344d))
# [5.45.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.2...v5.45.0-dev.3) (2025-10-27)
### Features
* **YouTube - Change Header:** Use SVG for header logo ([#6178](https://github.com/ReVanced/revanced-patches/issues/6178)) ([e9f45ce](https://github.com/ReVanced/revanced-patches/commit/e9f45ce92695d5857473ff71c14b190bded28a73))
# [5.45.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.1...v5.45.0-dev.2) (2025-10-26)
### Bug Fixes
* **YouTube - Force original audio:** Fall back to visionOS and not Android Studio if Android VR is not available ([6d01863](https://github.com/ReVanced/revanced-patches/commit/6d01863ec70617d9abc864ce6686ed9764dd151d))
* **YouTube Music - Hide category bar:** Correctly hide the category bar in newer app targets ([#6175](https://github.com/ReVanced/revanced-patches/issues/6175)) ([13cf172](https://github.com/ReVanced/revanced-patches/commit/13cf1724bf2f946c7129cab0db96721c90f9fe89))
# [5.45.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.44.0...v5.45.0-dev.1) (2025-10-26)
### Bug Fixes
* **Instagram:** Update failing fingerprints on newer versions ([#6181](https://github.com/ReVanced/revanced-patches/issues/6181)) ([c73a03c](https://github.com/ReVanced/revanced-patches/commit/c73a03c9e18a12262939c974cdf16221221d1487))
### Features
* **TikTok:** Add `Sanitize sharing links` patch ([#6176](https://github.com/ReVanced/revanced-patches/issues/6176)) ([ef44eaa](https://github.com/ReVanced/revanced-patches/commit/ef44eaa119b9d6c5faec051e22d20f883d0da4f1))
# [5.44.0](https://github.com/ReVanced/revanced-patches/compare/v5.43.1...v5.44.0) (2025-10-24)

View File

@@ -19,6 +19,6 @@ public class HideCastButtonPatch {
* Injection point
*/
public static void hideCastButton(View view) {
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON.get(), view);
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON, view);
}
}

View File

@@ -1,5 +1,8 @@
package app.revanced.extension.music.patches;
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
import android.view.View;
import app.revanced.extension.music.settings.Settings;
@SuppressWarnings("unused")
@@ -8,7 +11,7 @@ public class HideCategoryBarPatch {
/**
* Injection point
*/
public static boolean hideCategoryBar() {
return Settings.HIDE_CATEGORY_BAR.get();
public static void hideCategoryBar(View view) {
hideViewBy0dpUnderCondition(Settings.HIDE_CATEGORY_BAR, view);
}
}

View File

@@ -1,6 +1,7 @@
package app.revanced.extension.music.patches.spoof;
import static app.revanced.extension.music.settings.Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_NO_SDK;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
import static app.revanced.extension.shared.spoof.ClientType.VISIONOS;
@@ -18,8 +19,9 @@ public class SpoofVideoStreamsPatch {
public static void setClientOrderToUse() {
List<ClientType> availableClients = List.of(
ANDROID_VR_1_43_32,
ANDROID_VR_1_61_48,
VISIONOS
ANDROID_NO_SDK,
VISIONOS,
ANDROID_VR_1_61_48
);
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(

View File

@@ -150,14 +150,14 @@ public class CustomBrandingPatch {
}
for (ComponentName disable : componentsToDisable) {
// Use info logging because if the alias status become corrupt the app cannot launch.
Logger.printInfo(() -> "Disabling: " + disable.getClassName());
pm.setComponentEnabledSetting(disable,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
// Use info logging because if the alias status become corrupt the app cannot launch.
ComponentName componentToEnableFinal = componentToEnable;
Logger.printInfo(() -> "Enabling: " + componentToEnableFinal.getClassName());
pm.setComponentEnabledSetting(componentToEnable,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
} catch (Exception ex) {

View File

@@ -17,9 +17,6 @@ public class LinkSanitizer {
public LinkSanitizer(String ... parametersToRemove) {
final int parameterCount = parametersToRemove.length;
if (parameterCount == 0) {
throw new IllegalArgumentException("No parameters specified");
}
// List is faster if only checking a few parameters.
this.parametersToRemove = parameterCount > 4
@@ -40,10 +37,12 @@ public class LinkSanitizer {
try {
Uri.Builder builder = uri.buildUpon().clearQuery();
for (String paramName : uri.getQueryParameterNames()) {
if (!parametersToRemove.contains(paramName)) {
for (String value : uri.getQueryParameters(paramName)) {
builder.appendQueryParameter(paramName, value);
if (!parametersToRemove.isEmpty()) {
for (String paramName : uri.getQueryParameterNames()) {
if (!parametersToRemove.contains(paramName)) {
for (String value : uri.getQueryParameters(paramName)) {
builder.appendQueryParameter(paramName, value);
}
}
}
}

View File

@@ -4,7 +4,6 @@ import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static app.revanced.extension.shared.patches.CustomBrandingPatch.BrandingTheme;
import static app.revanced.extension.shared.settings.Setting.parent;
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.AudioStreamLanguageOverrideAvailability;
/**
* Settings shared across multiple apps.
@@ -34,7 +33,6 @@ public class BaseSettings {
//
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
public static final EnumSetting<AppLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AppLanguage.DEFAULT, new AudioStreamLanguageOverrideAvailability());
public static final BooleanSetting SPOOF_STREAMING_DATA_STATS_FOR_NERDS = new BooleanSetting("revanced_spoof_streaming_data_stats_for_nerds", TRUE, parent(SPOOF_VIDEO_STREAMS));
public static final BooleanSetting SANITIZE_SHARED_LINKS = new BooleanSetting("revanced_sanitize_sharing_links", TRUE);

View File

@@ -54,6 +54,33 @@ public enum ClientType {
ANDROID_VR_1_61_48.supportsMultiAudioTracks,
"Android VR 1.43"
),
/**
* Video not playable: Paid / Movie / Private / Age-restricted.
* Note: The 'Authorization' key must be excluded from the header.
*
* According to TeamNewPipe in 2022, if the 'androidSdkVersion' field is missing,
* the GVS did not return a valid response:
* [NewPipe#8713 (comment)](https://github.com/TeamNewPipe/NewPipe/issues/8713#issuecomment-1207443550).
*
* According to the latest commit in yt-dlp, the GVS returns a valid response
* even if the 'androidSdkVersion' field is missing:
* [yt-dlp#14693](https://github.com/yt-dlp/yt-dlp/pull/14693).
*
* For some reason, PoToken is not required.
*/
ANDROID_NO_SDK(
3,
"ANDROID",
"",
"",
"",
Build.VERSION.RELEASE,
"20.05.46",
"com.google.android.youtube/20.05.46 (Linux; U; Android " + Build.VERSION.RELEASE + ") gzip",
false,
true,
"Android No SDK"
),
/**
* Cannot play livestreams and lacks HDR, but can play videos with music and labeled "for children".
* <a href="https://dumps.tadiphone.dev/dumps/google/barbet">Google Pixel 9 Pro Fold</a>

View File

@@ -14,19 +14,11 @@ import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.AppLanguage;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
@SuppressWarnings("unused")
public class SpoofVideoStreamsPatch {
public static final class AudioStreamLanguageOverrideAvailability implements Setting.Availability {
@Override
public boolean isAvailable() {
return BaseSettings.SPOOF_VIDEO_STREAMS.get() && !preferredClient.useAuth;
}
}
/**
* Domain used for internet connectivity verification.
* It has an empty response body and is only used to check for a 204 response code.
@@ -62,8 +54,7 @@ public class SpoofVideoStreamsPatch {
}
/**
* @param language Language override for non-authenticated requests. If this is null then
* {@link BaseSettings#SPOOF_VIDEO_STREAMS_LANGUAGE} is used.
* @param language Language override for non-authenticated requests.
*/
public static void setLanguageOverride(@Nullable AppLanguage language) {
languageOverride = language;

View File

@@ -1,7 +1,5 @@
package app.revanced.extension.shared.spoof.requests;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
import org.json.JSONException;
import org.json.JSONObject;
@@ -13,7 +11,6 @@ import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.requests.Requester;
import app.revanced.extension.shared.requests.Route;
import app.revanced.extension.shared.settings.AppLanguage;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.spoof.ClientType;
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
@@ -44,7 +41,7 @@ final class PlayerRoutes {
AppLanguage language = SpoofVideoStreamsPatch.getLanguageOverride();
if (language == null) {
// Force original audio has not overrode the language.
language = BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get();
language = AppLanguage.DEFAULT;
}
//noinspection ExtractMethodRecommender
Locale streamLocale = language.getLocale();

View File

@@ -23,6 +23,12 @@ public class ExtensionPreferenceCategory extends ConditionalPreferenceCategory {
public void addPreferences(Context context) {
addPreference(new ReVancedTikTokAboutPreference(context));
addPreference(new TogglePreference(context,
"Sanitize sharing links",
"Remove tracking parameters from shared links.",
BaseSettings.SANITIZE_SHARED_LINKS
));
addPreference(new TogglePreference(context,
"Enable debug log",
"Show extension debug log.",

View File

@@ -0,0 +1,29 @@
package app.revanced.extension.tiktok.share;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.privacy.LinkSanitizer;
import app.revanced.extension.shared.settings.BaseSettings;
@SuppressWarnings("unused")
public final class ShareUrlSanitizer {
private static final LinkSanitizer sanitizer = new LinkSanitizer();
/**
* Injection point for setting check.
*/
public static boolean shouldSanitize() {
return BaseSettings.SANITIZE_SHARED_LINKS.get();
}
/**
* Injection point for URL sanitization.
*/
public static String sanitizeShareUrl(final String url) {
if (url == null || url.isEmpty()) {
return url;
}
return sanitizer.sanitizeUrlString(url);
}
}

View File

@@ -17,15 +17,25 @@ public class ChangeHeaderPatch {
DEFAULT(null, null),
REGULAR("ytWordmarkHeader", "yt_ringo2_wordmark_header"),
PREMIUM("ytPremiumWordmarkHeader", "yt_ringo2_premium_wordmark_header"),
REVANCED("revanced_header_logo", "revanced_header_logo"),
REVANCED_MINIMAL("revanced_header_logo_minimal", "revanced_header_logo_minimal"),
CUSTOM("custom_header", "custom_header");
ROUNDED("revanced_header_rounded"),
MINIMAL("revanced_header_minimal"),
CUSTOM("revanced_header_custom"),
// Old enum names for data migration. TODO: Eventually delete these.
@Deprecated
REVANCED(ROUNDED.attributeName),
@Deprecated
REVANCED_MINIMAL(MINIMAL.attributeName);
@Nullable
private final String attributeName;
@Nullable
private final String drawableName;
HeaderLogo(String attributeName) {
this(Objects.requireNonNull(attributeName), Objects.requireNonNull(attributeName));
}
HeaderLogo(@Nullable String attributeName, @Nullable String drawableName) {
this.attributeName = attributeName;
this.drawableName = drawableName;
@@ -42,9 +52,8 @@ public class ChangeHeaderPatch {
final int identifier = Utils.getResourceIdentifier(attributeName, "attr");
if (identifier == 0) {
// Identifier is zero if custom header setting was included in imported settings
// and a custom image was not included during patching.
Logger.printDebug(() -> "Could not find attribute: " + drawableName);
// Should never happen.
Logger.printException(() -> "Could not find attribute: " + drawableName);
Settings.HEADER_LOGO.resetToDefault();
return null;
}
@@ -63,12 +72,14 @@ public class ChangeHeaderPatch {
: "_light");
final int identifier = Utils.getResourceIdentifier(drawableFullName, "drawable");
if (identifier == 0) {
Logger.printDebug(() -> "Could not find drawable: " + drawableFullName);
Settings.HEADER_LOGO.resetToDefault();
return null;
if (identifier != 0) {
return Utils.getContext().getDrawable(identifier);
}
return Utils.getContext().getDrawable(identifier);
// Should never happen.
Logger.printException(() -> "Could not find drawable: " + drawableFullName);
Settings.HEADER_LOGO.resetToDefault();
return null;
}
}

View File

@@ -1,6 +1,7 @@
package app.revanced.extension.youtube.patches.spoof;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_CREATOR;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_NO_SDK;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
import static app.revanced.extension.shared.spoof.ClientType.IPADOS;
@@ -38,9 +39,10 @@ public class SpoofVideoStreamsPatch {
}
List<ClientType> availableClients = List.of(
VISIONOS,
ANDROID_CREATOR,
ANDROID_VR_1_43_32,
VISIONOS,
ANDROID_NO_SDK,
IPADOS);
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(

View File

@@ -2,7 +2,6 @@ package app.revanced.extension.youtube.settings;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
import static app.revanced.extension.shared.settings.Setting.parent;
import static app.revanced.extension.shared.settings.Setting.parentsAll;
import static app.revanced.extension.shared.settings.Setting.parentsAny;
@@ -17,7 +16,6 @@ import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerH
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideSubtextsAvailability;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MINIMAL;
import static app.revanced.extension.youtube.patches.OpenShortsInRegularPlayerPatch.ShortsPlayerType;
import static app.revanced.extension.youtube.patches.SeekbarThumbnailsPatch.SeekbarThumbnailsHighQualityAvailability;
import static app.revanced.extension.youtube.patches.components.PlayerFlyoutMenuItemsFilter.HideAudioFlyoutMenuAvailability;
@@ -41,7 +39,6 @@ import app.revanced.extension.shared.settings.IntegerSetting;
import app.revanced.extension.shared.settings.LongSetting;
import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.settings.StringSetting;
import app.revanced.extension.shared.settings.preference.SharedPrefCategory;
import app.revanced.extension.shared.spoof.ClientType;
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.DeArrowAvailability;
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillImagesAvailability;
@@ -452,14 +449,7 @@ public class Settings extends BaseSettings {
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFFFF", false, false);
// Deprecated migrations
private static final BooleanSetting DEPRECATED_AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
private static final IntegerSetting DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127);
private static final StringSetting DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033");
private static final BooleanSetting DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE);
private static final BooleanSetting DEPRECATED_RESTORE_OLD_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_restore_old_video_quality_menu", TRUE);
private static final BooleanSetting DEPRECATED_AUTO_CAPTIONS = new BooleanSetting("revanced_auto_captions", FALSE);
private static final FloatSetting DEPRECATED_SB_CATEGORY_SPONSOR_OPACITY = new FloatSetting("sb_sponsor_opacity", 0.8f, false, false);
private static final FloatSetting DEPRECATED_SB_CATEGORY_SELF_PROMO_OPACITY = new FloatSetting("sb_selfpromo_opacity", 0.8f, false, false);
@@ -475,17 +465,12 @@ public class Settings extends BaseSettings {
static {
// region Migration
migrateOldSettingToNew(DEPRECATED_AUTO_REPEAT, LOOP_VIDEO);
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
migrateOldSettingToNew(DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN, HIDE_END_SCREEN_SUGGESTED_VIDEO);
migrateOldSettingToNew(DEPRECATED_RESTORE_OLD_VIDEO_QUALITY_MENU, ADVANCED_VIDEO_QUALITY_MENU);
migrateOldSettingToNew(DEPRECATED_AUTO_CAPTIONS, DISABLE_AUTO_CAPTIONS);
// Migrate renamed enum.
//noinspection deprecation
if (MINIPLAYER_TYPE.get() == MiniplayerType.PHONE) {
MINIPLAYER_TYPE.save(MINIMAL);
// Migrate renamed change header enums.
if (HEADER_LOGO.get() == HeaderLogo.REVANCED) {
HEADER_LOGO.save(HeaderLogo.ROUNDED);
}
if (HEADER_LOGO.get() == HeaderLogo.REVANCED_MINIMAL) {
HEADER_LOGO.save(HeaderLogo.MINIMAL);
}
// Migrate old single color seekbar with a slightly brighter accent color based on the primary.
@@ -512,11 +497,6 @@ public class Settings extends BaseSettings {
DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY.resetToDefault();
}
if (!DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.isSetToDefault()) {
SWIPE_OVERLAY_OPACITY.save(DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.get() / 255);
DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.resetToDefault();
}
// 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() &&
@@ -534,13 +514,7 @@ public class Settings extends BaseSettings {
// RYD requires manually migrating old settings since the lack of
// a "revanced_" on the old setting causes duplicate key exceptions during export.
SharedPrefCategory revancedPrefs = Setting.preferences;
Setting.migrateFromOldPreferences(revancedPrefs, RYD_USER_ID, "ryd_user_id");
Setting.migrateFromOldPreferences(revancedPrefs, RYD_ENABLED, "ryd_enabled");
Setting.migrateFromOldPreferences(revancedPrefs, RYD_DISLIKE_PERCENTAGE, "ryd_dislike_percentage");
Setting.migrateFromOldPreferences(revancedPrefs, RYD_COMPACT_LAYOUT, "ryd_compact_layout");
Setting.migrateFromOldPreferences(revancedPrefs, RYD_ESTIMATED_LIKE, "ryd_estimated_like");
Setting.migrateFromOldPreferences(revancedPrefs, RYD_TOAST_ON_CONNECTION_ERROR, "ryd_toast_on_connection_error");
Setting.migrateFromOldPreferences(Setting.preferences, RYD_USER_ID, "ryd_user_id");
// Migrate old saved data. Must be done here before the settings can be used by any other code.
applyOldSbOpacityToColor(SB_CATEGORY_SPONSOR_COLOR, DEPRECATED_SB_CATEGORY_SPONSOR_OPACITY);

View File

@@ -1,63 +0,0 @@
package app.revanced.extension.youtube.settings.preference;
import static app.revanced.extension.shared.StringRef.str;
import android.content.Context;
import android.util.AttributeSet;
import app.revanced.extension.shared.settings.preference.SortedListPreference;
import app.revanced.extension.shared.spoof.ClientType;
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings({"deprecation", "unused"})
public class SpoofAudioSelectorListPreference extends SortedListPreference {
private final boolean available;
{
final boolean isAndroidStudio = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.ANDROID_CREATOR;
if (isAndroidStudio || SpoofVideoStreamsPatch.getLanguageOverride() != null) {
available = false;
super.setEnabled(false);
super.setSummary(str(isAndroidStudio
? "revanced_spoof_video_streams_language_android_studio"
: "revanced_spoof_video_streams_language_not_available"));
} else {
available = true;
}
}
public SpoofAudioSelectorListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public SpoofAudioSelectorListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public SpoofAudioSelectorListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SpoofAudioSelectorListPreference(Context context) {
super(context);
}
@Override
public void setEnabled(boolean enabled) {
if (!available) {
return;
}
super.setEnabled(enabled);
}
@Override
public void setSummary(CharSequence summary) {
if (!available) {
return;
}
super.setSummary(summary);
}
}

View File

@@ -80,29 +80,34 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
Logger.printDebug(() -> "Updating spoof stream side effects preference");
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
String summary = str("revanced_spoof_video_streams_about_no_audio_tracks");
String summary = "";
switch (clientType) {
case ANDROID_CREATOR ->
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
+ '\n' + str("revanced_spoof_video_streams_about_no_av1")
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio");
summary = str("revanced_spoof_video_streams_about_no_audio_tracks")
+ '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
+ '\n' + str("revanced_spoof_video_streams_about_no_av1")
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio");
// VR 1.61 is not exposed in the UI and should never be reached here.
case ANDROID_VR_1_43_32, ANDROID_VR_1_61_48 ->
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
summary = str("revanced_spoof_video_streams_about_no_audio_tracks")
+ '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
case ANDROID_NO_SDK ->
summary = str("revanced_spoof_video_streams_about_playback_failure");
case IPADOS ->
summary = str("revanced_spoof_video_streams_about_playback_failure")
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
case VISIONOS ->
summary = str("revanced_spoof_video_streams_about_experimental")
+ '\n' + summary
+ '\n' + str("revanced_spoof_video_streams_about_no_audio_tracks")
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
default -> Logger.printException(() -> "Unknown client: " + clientType);
}
// Only iPadOS can play children videos in incognito, but it commonly fails at 1 minute
// or doesn't even start playback at all. List the side effect for other clients
// or doesn't start playback at all. List the side effect for other clients
// since they will fall over to iPadOS.
if (clientType != ClientType.IPADOS) {
if (clientType != ClientType.IPADOS && clientType != ClientType.ANDROID_NO_SDK) {
summary += '\n' + str("revanced_spoof_video_streams_about_kids_videos");
}

View File

@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true
android.useAndroidX = true
kotlin.code.style = official
version = 5.44.0
version = 5.45.0-dev.6

View File

@@ -60,6 +60,10 @@ public final class app/revanced/patches/all/misc/connectivity/wifi/spoof/SpoofWi
public static final fun getSpoofWifiPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/all/misc/customcertificates/CustomCertificatesPatchKt {
public static final fun getCustomNetworkSecurityPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/all/misc/debugging/EnableAndroidDebuggingPatchKt {
public static final fun getEnableAndroidDebuggingPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
@@ -1184,6 +1188,10 @@ public final class app/revanced/patches/tiktok/misc/settings/SettingsPatchKt {
public static final fun getSettingsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/tiktok/misc/share/SanitizeShareUrlsPatchKt {
public static final fun getSanitizeShareUrlsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/tiktok/misc/spoof/sim/SpoofSimPatchKt {
public static final fun getSpoofSimPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}

View File

@@ -3,9 +3,10 @@ package app.revanced.patches.instagram.hide.navigation
import app.revanced.patcher.fingerprint
import app.revanced.patcher.patch.BytecodePatchContext
import com.android.tools.smali.dexlib2.AccessFlags
internal val initializeNavigationButtonsListFingerprint = fingerprint {
strings("Nav3")
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
parameters("Lcom/instagram/common/session/UserSession;", "Z")
returns("Ljava/util/List;")
}

View File

@@ -24,7 +24,7 @@ val enableDeveloperMenuPatch = bytecodePatch(
with(clearNotificationReceiverFingerprint.method) {
indexOfFirstInstructionReversedOrThrow(clearNotificationReceiverFingerprint.stringMatches!!.first().index) {
val reference = getReference<MethodReference>()
Opcode.INVOKE_STATIC == opcode &&
opcode in listOf(Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC_RANGE) &&
reference?.parameterTypes?.size == 1 &&
reference.parameterTypes.first() == "Lcom/instagram/common/session/UserSession;" &&
reference.returnType == "Z"

View File

@@ -1,20 +1,16 @@
package app.revanced.patches.music.layout.compactheader
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
import app.revanced.util.literal
internal val constructCategoryBarFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
internal val chipCloudFingerprint = fingerprint {
returns("V")
parameters("Landroid/content/Context;", "L", "L", "L")
opcodes(
Opcode.IPUT_OBJECT,
Opcode.CONST,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.IPUT_OBJECT,
Opcode.CONST,
Opcode.INVOKE_VIRTUAL
Opcode.CONST_4,
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT
)
literal { chipCloud }
}

View File

@@ -1,6 +1,6 @@
package app.revanced.patches.music.layout.compactheader
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
@@ -8,10 +8,14 @@ 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.mapping.get
import app.revanced.patches.shared.misc.mapping.resourceMappings
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.util.findFreeRegister
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
internal var chipCloud = -1L
private set
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideCategoryBarPatch;"
@Suppress("unused")
@@ -33,28 +37,21 @@ val hideCategoryBar = bytecodePatch(
)
execute {
chipCloud = resourceMappings["layout", "chip_cloud"]
addResources("music", "layout.compactheader.hideCategoryBar")
PreferenceScreen.GENERAL.addPreferences(
SwitchPreference("revanced_music_hide_category_bar"),
)
constructCategoryBarFingerprint.method.apply {
val insertIndex = constructCategoryBarFingerprint.patternMatch!!.startIndex
val register = getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
val freeRegister = findFreeRegister(insertIndex, register)
chipCloudFingerprint.method.apply {
val targetIndex = chipCloudFingerprint.patternMatch!!.endIndex
val targetRegister = getInstruction<OneRegisterInstruction>(targetIndex).registerA
addInstructionsWithLabels(
insertIndex,
"""
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->hideCategoryBar()Z
move-result v$freeRegister
if-eqz v$freeRegister, :show
const/16 v$freeRegister, 0x8
invoke-virtual { v$register, v$freeRegister }, Landroid/view/View;->setVisibility(I)V
:show
nop
"""
addInstruction(
targetIndex + 1,
"invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideCategoryBar(Landroid/view/View;)V"
)
}
}

View File

@@ -0,0 +1,25 @@
package app.revanced.patches.shared.layout.branding
import app.revanced.patcher.patch.rawResourcePatch
import app.revanced.util.inputStreamFromBundledResource
import java.nio.file.Files
/**
* Copies a branding license text file to the target apk.
*
* This patch must be a dependency for all patches that add ReVanced branding to the target app.
*/
internal val addBrandLicensePatch = rawResourcePatch {
execute {
val brandingLicenseFileName = "LICENSE_REVANCED.TXT"
val inputFileStream = inputStreamFromBundledResource(
"branding-license",
brandingLicenseFileName
)!!
val targetFile = get(brandingLicenseFileName, false).toPath()
Files.copy(inputFileStream, targetFile)
}
}

View File

@@ -36,13 +36,13 @@ import org.w3c.dom.NodeList
import java.io.File
import java.util.logging.Logger
private val mipmapDirectories = arrayOf(
private val mipmapDirectories = mapOf(
// Target app does not have ldpi icons.
"mipmap-mdpi",
"mipmap-hdpi",
"mipmap-xhdpi",
"mipmap-xxhdpi",
"mipmap-xxxhdpi"
"mipmap-mdpi" to "108x108 px",
"mipmap-hdpi" to "162x162 px",
"mipmap-xhdpi" to "216x216 px",
"mipmap-xxhdpi" to "324x324 px",
"mipmap-xxxhdpi" to "432x432 px"
)
private val iconStyleNames = arrayOf(
@@ -104,10 +104,13 @@ internal fun baseCustomBrandingPatch(
Folder with images to use as a custom icon.
The folder must contain one or more of the following folders, depending on the DPI of the device:
${mipmapDirectories.joinToString("\n") { "- $it" }}
${mipmapDirectories.keys.joinToString("\n") { "- $it" }}
Each of the folders must contain all of the following files:
${USER_CUSTOM_ADAPTIVE_FILE_NAMES.joinToString("\n")}
The image dimensions must be as follows:
${mipmapDirectories.map { (dpi, dim) -> "- $dpi: $dim" }.joinToString("\n")}
Optionally, the path contains a 'drawable' folder with any of the monochrome icon files:
$USER_CUSTOM_MONOCHROME_FILE_NAME
@@ -120,6 +123,7 @@ internal fun baseCustomBrandingPatch(
dependsOn(
addResourcesPatch,
resourceMappingPatch,
addBrandLicensePatch,
bytecodePatch {
execute {
mainActivityOnCreateFingerprint.method.addInstruction(
@@ -249,7 +253,7 @@ internal fun baseCustomBrandingPatch(
)
// Copy template icon files.
mipmapDirectories.forEach { dpi ->
mipmapDirectories.keys.forEach { dpi ->
copyResources(
"custom-branding",
ResourceGroup(
@@ -405,23 +409,24 @@ internal fun baseCustomBrandingPatch(
)
}
val sourceFolders = iconPathFile.listFiles { file -> file.isDirectory }
?: throw PatchException("The custom icon path contains no subfolders: " +
iconPathFile.absolutePath)
val resourceDirectory = get("res")
var copiedFiles = false
// For each source folder, copy the files to the target resource directories.
sourceFolders.forEach { dpiSourceFolder ->
iconPathFile.listFiles {
file -> file.isDirectory && file.name in mipmapDirectories
}!!.forEach { dpiSourceFolder ->
val targetDpiFolder = resourceDirectory.resolve(dpiSourceFolder.name)
if (!targetDpiFolder.exists()) return@forEach
if (!targetDpiFolder.exists()) {
// Should never happen.
throw IllegalStateException("Resource not found: $dpiSourceFolder")
}
val customFiles = dpiSourceFolder.listFiles { file ->
file.isFile && file.name in USER_CUSTOM_ADAPTIVE_FILE_NAMES
}!!
if (customFiles.size > 0 && customFiles.size != USER_CUSTOM_ADAPTIVE_FILE_NAMES.size) {
if (customFiles.isNotEmpty() && customFiles.size != USER_CUSTOM_ADAPTIVE_FILE_NAMES.size) {
throw PatchException("Must include all required icon files " +
"but only found " + customFiles.map { it.name })
}
@@ -451,8 +456,9 @@ internal fun baseCustomBrandingPatch(
}
if (!copiedFiles) {
throw PatchException("Could not find any replacement images in " +
"patch option path: " + iconPathFile.absolutePath)
throw PatchException("Expected to find directories and files: "
+ USER_CUSTOM_ADAPTIVE_FILE_NAMES.contentToString()
+ "\nBut none were found in the provided option file path: " + iconPathFile.absolutePath)
}
}

View File

@@ -6,6 +6,7 @@ import app.revanced.patcher.patch.resourcePatch
import app.revanced.patches.all.misc.resources.addResource
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.layout.branding.addBrandLicensePatch
import app.revanced.patches.shared.misc.settings.preference.BasePreference
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
@@ -61,7 +62,11 @@ fun settingsPatch (
rootPreferences: List<Pair<BasePreference, String>>? = null,
preferences: Set<BasePreference>,
) = resourcePatch {
dependsOn(addResourcesPatch, settingsColorPatch)
dependsOn(
addResourcesPatch,
settingsColorPatch,
addBrandLicensePatch
)
execute {
copyResources(

View File

@@ -3,14 +3,20 @@ package app.revanced.patches.tiktok.interaction.downloads
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.tiktok.misc.extension.sharedExtensionPatch
import app.revanced.patches.tiktok.misc.settings.settingsPatch
import app.revanced.patches.tiktok.misc.settings.settingsStatusLoadFingerprint
import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import app.revanced.util.returnEarly
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.reference.FieldReference
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/tiktok/download/DownloadsPatch;"
@Suppress("unused")
val downloadsPatch = bytecodePatch(
@@ -28,60 +34,45 @@ val downloadsPatch = bytecodePatch(
)
execute {
aclCommonShareFingerprint.method.replaceInstructions(
0,
"""
const/4 v0, 0x0
return v0
""",
)
aclCommonShare2Fingerprint.method.replaceInstructions(
0,
"""
const/4 v0, 0x2
return v0
""",
)
aclCommonShareFingerprint.method.returnEarly(0)
aclCommonShare2Fingerprint.method.returnEarly(2)
// Download videos without watermark.
aclCommonShare3Fingerprint.method.addInstructionsWithLabels(
0,
"""
invoke-static {}, Lapp/revanced/extension/tiktok/download/DownloadsPatch;->shouldRemoveWatermark()Z
move-result v0
if-eqz v0, :noremovewatermark
const/4 v0, 0x1
return v0
:noremovewatermark
nop
""",
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->shouldRemoveWatermark()Z
move-result v0
if-eqz v0, :noremovewatermark
const/4 v0, 0x1
return v0
:noremovewatermark
nop
""",
)
// Change the download path patch.
downloadUriFingerprint.method.apply {
val firstIndex = indexOfFirstInstructionOrThrow {
getReference<MethodReference>()?.name == "<init>"
}
val secondIndex = indexOfFirstInstructionOrThrow {
getReference<MethodReference>()?.returnType?.contains("Uri") == true
}
findInstructionIndicesReversedOrThrow {
getReference<FieldReference>().let {
it?.definingClass == "Landroid/os/Environment;" && it.name.startsWith("DIRECTORY_")
}
}.forEach { fieldIndex ->
val pathRegister = getInstruction<OneRegisterInstruction>(fieldIndex).registerA
val builderRegister = getInstruction<FiveRegisterInstruction>(fieldIndex + 1).registerC
addInstructions(
secondIndex,
"""
invoke-static {}, Lapp/revanced/extension/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String;
move-result-object v0
""",
)
// Remove 'field load → append → "/Camera/" → append' block.
removeInstructions(fieldIndex, 4)
addInstructions(
firstIndex,
"""
invoke-static {}, Lapp/revanced/extension/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String;
move-result-object v0
""",
)
addInstructions(
fieldIndex,
"""
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->getDownloadPath()Ljava/lang/String;
move-result-object v$pathRegister
invoke-virtual { v$builderRegister, v$pathRegister }, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
""",
)
}
}
settingsStatusLoadFingerprint.method.addInstruction(

View File

@@ -5,6 +5,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.shared.layout.branding.addBrandLicensePatch
import app.revanced.patches.tiktok.misc.extension.sharedExtensionPatch
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22c
@@ -18,7 +19,7 @@ val settingsPatch = bytecodePatch(
name = "Settings",
description = "Adds ReVanced settings to TikTok.",
) {
dependsOn(sharedExtensionPatch)
dependsOn(sharedExtensionPatch, addBrandLicensePatch)
compatibleWith(
"com.ss.android.ugc.trill"("36.5.4"),

View File

@@ -0,0 +1,25 @@
package app.revanced.patches.tiktok.misc.share
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val urlShorteningFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC, AccessFlags.FINAL)
returns("LX/")
parameters(
"I",
"Ljava/lang/String;",
"Ljava/lang/String;",
"Ljava/lang/String;"
)
opcodes(Opcode.RETURN_OBJECT)
// Same Kotlin intrinsics literal on both variants.
strings("getShortShareUrlObservab\u2026ongUrl, subBizSceneValue)")
custom { method, _ ->
// LIZLLL is obfuscated by ProGuard/R8, but stable across both TikTok and Musically.
method.name == "LIZLLL"
}
}

View File

@@ -0,0 +1,85 @@
package app.revanced.patches.tiktok.misc.share
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
import app.revanced.patches.shared.PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS
import app.revanced.patches.shared.PATCH_NAME_SANITIZE_SHARING_LINKS
import app.revanced.patches.tiktok.misc.extension.sharedExtensionPatch
import app.revanced.util.findFreeRegister
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
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.reference.MethodReference
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/tiktok/share/ShareUrlSanitizer;"
@Suppress("unused")
val sanitizeShareUrlsPatch = bytecodePatch(
name = PATCH_NAME_SANITIZE_SHARING_LINKS,
description = PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS,
) {
dependsOn(sharedExtensionPatch)
compatibleWith(
"com.ss.android.ugc.trill"("36.5.4"),
"com.zhiliaoapp.musically"("36.5.4"),
)
execute {
urlShorteningFingerprint.method.apply {
val invokeIndex = indexOfFirstInstructionOrThrow {
val ref = getReference<MethodReference>()
ref?.name == "LIZ" && ref.definingClass.startsWith("LX/")
}
val moveResultIndex = indexOfFirstInstructionOrThrow(invokeIndex, Opcode.MOVE_RESULT_OBJECT)
val urlRegister = getInstruction<OneRegisterInstruction>(moveResultIndex).registerA
// Resolve Observable wrapper classes at runtime
val observableWrapperIndex = indexOfFirstInstructionOrThrow(Opcode.NEW_INSTANCE)
val observableWrapperClass = getInstruction<ReferenceInstruction>(observableWrapperIndex)
.reference.toString()
val observableFactoryIndex = indexOfFirstInstructionOrThrow {
val ref = getReference<MethodReference>()
ref?.name == "LJ" && ref.definingClass.startsWith("LX/")
}
val observableFactoryRef = getInstruction<ReferenceInstruction>(observableFactoryIndex)
.reference as MethodReference
val observableFactoryClass = observableFactoryRef.definingClass
val observableInterfaceType = observableFactoryRef.parameterTypes.first()
val observableReturnType = observableFactoryRef.returnType
val wrapperRegister = findFreeRegister(moveResultIndex + 1, urlRegister)
// Check setting and conditionally sanitize share URL.
addInstructionsWithLabels(
moveResultIndex + 1,
"""
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->shouldSanitize()Z
move-result v$wrapperRegister
if-eqz v$wrapperRegister, :skip_sanitization
invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->sanitizeShareUrl(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$urlRegister
# Wrap sanitized URL and return early to bypass ShareExtService
new-instance v$wrapperRegister, $observableWrapperClass
invoke-direct { v$wrapperRegister, v$urlRegister }, $observableWrapperClass-><init>(Ljava/lang/String;)V
invoke-static { v$wrapperRegister }, $observableFactoryClass->LJ($observableInterfaceType)$observableReturnType
move-result-object v$urlRegister
return-object v$urlRegister
:skip_sanitization
nop
"""
)
}
}
}

View File

@@ -9,6 +9,7 @@ import app.revanced.patcher.patch.stringOption
import app.revanced.patcher.util.Document
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.layout.branding.addBrandLicensePatch
import app.revanced.patches.shared.misc.mapping.get
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.mapping.resourceMappings
@@ -24,15 +25,43 @@ import java.io.File
private val variants = arrayOf("light", "dark")
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/ChangeHeaderPatch;"
private val targetResourceDirectoryNames = mapOf(
"drawable-hdpi" to "194x72 px",
"drawable-xhdpi" to "258x96 px",
"drawable-xxhdpi" to "387x144 px",
"drawable-xxxhdpi" to "512x192 px"
)
/**
* Header logos built into this patch.
*/
private val logoResourceNames = arrayOf(
"revanced_header_minimal",
"revanced_header_rounded",
)
/**
* Custom header resource/file name.
*/
private const val CUSTOM_HEADER_RESOURCE_NAME = "revanced_header_custom"
/**
* Custom header resource/file names.
*/
private val customHeaderResourceFileNames = variants.map { variant ->
"${CUSTOM_HEADER_RESOURCE_NAME}_$variant.png"
}.toTypedArray()
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/ChangeHeaderPatch;"
private val changeHeaderBytecodePatch = bytecodePatch {
dependsOn(resourceMappingPatch)
dependsOn(
resourceMappingPatch,
addBrandLicensePatch
)
execute {
// Resources are not used during patching, but extension code uses these
// images so verify they exist.
// Verify images exist. Resources are not used during patching but extension code does.
arrayOf(
"yt_ringo2_wordmark_header",
"yt_ringo2_premium_wordmark_header"
@@ -62,28 +91,6 @@ private val changeHeaderBytecodePatch = bytecodePatch {
}
}
private val targetResourceDirectoryNames = mapOf(
"xxxhdpi" to "512px x 192px",
"xxhdpi" to "387px x 144px",
"xhdpi" to "258px x 96px",
"hdpi" to "194px x 72px",
"mdpi" to "129px x 48px"
).mapKeys { (dpi, _) -> "drawable-$dpi" }
/**
* Header logos built into this patch.
*/
private val logoResourceNames = arrayOf(
"revanced_header_logo_minimal",
"revanced_header_logo",
)
/**
* Custom header resource/file name.
*/
private const val CUSTOM_HEADER_RESOURCE_NAME = "custom_header"
@Suppress("unused")
val changeHeaderPatch = resourcePatch(
name = "Change header",
@@ -110,7 +117,7 @@ val changeHeaderPatch = resourcePatch(
${targetResourceDirectoryNames.keys.joinToString("\n") { "- $it" }}
Each of the folders must contain all of the following files:
${variants.joinToString("\n") { variant -> "- ${CUSTOM_HEADER_RESOURCE_NAME}_$variant.png" }}
${customHeaderResourceFileNames.joinToString("\n")}
The image dimensions must be as follows:
${targetResourceDirectoryNames.map { (dpi, dim) -> "- $dpi: $dim" }.joinToString("\n")}
@@ -120,67 +127,41 @@ val changeHeaderPatch = resourcePatch(
execute {
addResources("youtube", "layout.branding.changeHeaderPatch")
fun getLightDarkFileNames(vararg resourceNames: String): Array<String> =
variants.flatMap { variant ->
resourceNames.map { resource -> "${resource}_$variant.png" }
}.toTypedArray()
val logoResourceFileNames = getLightDarkFileNames(*logoResourceNames)
copyResources(
"change-header",
ResourceGroup("drawable-hdpi", *logoResourceFileNames),
ResourceGroup("drawable-mdpi", *logoResourceFileNames),
ResourceGroup("drawable-xhdpi", *logoResourceFileNames),
ResourceGroup("drawable-xxhdpi", *logoResourceFileNames),
ResourceGroup("drawable-xxxhdpi", *logoResourceFileNames),
)
if (custom != null) {
val customFile = File(custom!!)
if (!customFile.exists()) {
throw PatchException("The custom icon path cannot be found: " +
customFile.absolutePath
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
if (custom == null) {
ListPreference("revanced_header_logo")
} else {
ListPreference(
key = "revanced_header_logo",
entriesKey = "revanced_header_logo_custom_entries",
entryValuesKey = "revanced_header_logo_custom_entry_values"
)
}
)
if (!customFile.isDirectory) {
throw PatchException("The custom icon path must be a folder: "
+ customFile.absolutePath)
logoResourceNames.forEach { logo ->
variants.forEach { variant ->
copyResources(
"change-header",
ResourceGroup(
"drawable",
logo + "_" + variant + ".xml"
)
)
}
}
val sourceFolders = customFile.listFiles { file -> file.isDirectory }
?: throw PatchException("The custom icon path contains no subfolders: " +
customFile.absolutePath)
val customResourceFileNames = getLightDarkFileNames(CUSTOM_HEADER_RESOURCE_NAME)
var copiedFiles = false
// For each source folder, copy the files to the target resource directories.
sourceFolders.forEach { dpiSourceFolder ->
val targetDpiFolder = get("res").resolve(dpiSourceFolder.name)
if (!targetDpiFolder.exists()) return@forEach
val customFiles = dpiSourceFolder.listFiles { file ->
file.isFile && file.name in customResourceFileNames
}!!
if (customFiles.size > 0 && customFiles.size != variants.size) {
throw PatchException("Both light/dark mode images " +
"must be specified but only found: " + customFiles.map { it.name })
}
customFiles.forEach { imgSourceFile ->
val imgTargetFile = targetDpiFolder.resolve(imgSourceFile.name)
imgSourceFile.copyTo(imgTargetFile)
copiedFiles = true
}
}
if (!copiedFiles) {
throw PatchException("No custom header images found in " +
"the provided path: " + customFile.absolutePath)
// Copy custom template. Images are only used if settings
// are imported and a custom header is enabled.
targetResourceDirectoryNames.keys.forEach { dpi ->
variants.forEach { variant ->
copyResources(
"change-header",
ResourceGroup(
dpi,
*customHeaderResourceFileNames
)
)
}
}
@@ -199,9 +180,7 @@ val changeHeaderPatch = resourcePatch(
addAttributeReference(logoName)
}
if (custom != null) {
addAttributeReference(CUSTOM_HEADER_RESOURCE_NAME)
}
addAttributeReference(CUSTOM_HEADER_RESOURCE_NAME)
}
// Add custom drawables to all styles that use the regular and premium logo.
@@ -227,22 +206,58 @@ val changeHeaderPatch = resourcePatch(
addDrawableElement(document, logoName, mode)
}
if (custom != null) {
addDrawableElement(document, CUSTOM_HEADER_RESOURCE_NAME, mode)
}
addDrawableElement(document, CUSTOM_HEADER_RESOURCE_NAME, mode)
}
}
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
if (custom == null) {
ListPreference("revanced_header_logo")
} else {
ListPreference(
key = "revanced_header_logo",
entriesKey = "revanced_header_logo_custom_entries",
entryValuesKey = "revanced_header_logo_custom_entry_values"
// Copy user provided images last, so if an exception is thrown due to bad input.
if (custom != null) {
val customFile = File(custom!!.trim())
if (!customFile.exists()) {
throw PatchException("The custom header path cannot be found: " +
customFile.absolutePath
)
}
)
if (!customFile.isDirectory) {
throw PatchException("The custom header path must be a folder: "
+ customFile.absolutePath)
}
var copiedFiles = false
// For each source folder, copy the files to the target resource directories.
customFile.listFiles {
file -> file.isDirectory && file.name in targetResourceDirectoryNames
}!!.forEach { dpiSourceFolder ->
val targetDpiFolder = get("res").resolve(dpiSourceFolder.name)
if (!targetDpiFolder.exists()) {
// Should never happen.
throw IllegalStateException("Resource not found: $dpiSourceFolder")
}
val customFiles = dpiSourceFolder.listFiles { file ->
file.isFile && file.name in customHeaderResourceFileNames
}!!
if (customFiles.isNotEmpty() && customFiles.size != variants.size) {
throw PatchException("Both light/dark mode images " +
"must be specified but only found: " + customFiles.map { it.name })
}
customFiles.forEach { imgSourceFile ->
val imgTargetFile = targetDpiFolder.resolve(imgSourceFile.name)
imgSourceFile.copyTo(target = imgTargetFile, overwrite = true)
copiedFiles = true
}
}
if (!copiedFiles) {
throw PatchException("Expected to find directories and files: "
+ customHeaderResourceFileNames.contentToString()
+ "\nBut none were found in the provided option file path: " + customFile.absolutePath)
}
}
}
}

View File

@@ -63,13 +63,6 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
),
SwitchPreference("revanced_spoof_video_streams_av1"),
ListPreference(
key = "revanced_spoof_video_streams_language",
// Language strings are declared in Setting patch.
entriesKey = "revanced_language_entries",
entryValuesKey = "revanced_language_entry_values",
tag = "app.revanced.extension.youtube.settings.preference.SpoofAudioSelectorListPreference"
),
SwitchPreference("revanced_spoof_streaming_data_stats_for_nerds"),
)
)

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1639,10 +1639,6 @@ Second \"item\" text"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">عرض في إحصاءات تقنية</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">يتم عرض نوع العميل في إحصاءات تقنية</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">تم إخفاء نوع العميل في إحصاءات تقنية</string>
<string name="revanced_spoof_video_streams_language_title">لغة بث الصوت</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">لتحديد لغة صوتية معينة، قم بإيقاف تشغيل \'فرض لغة الصوت الأصلية\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">اختيار لغة البث غير متاح مع Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -259,7 +259,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1638,10 +1638,6 @@ Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">İstək üçün Statistikada göstər</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Qəbuledici növü İstək üçün statistikada göstərilir</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Qəbuledici nerd üçün Statistikada gizlidir</string>
<string name="revanced_spoof_video_streams_language_title">Səs yayım dili</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Xüsusi səs dilini seçmək üçün \"Orijinal səs dilini zorlanı\" qapat</string>
<string name="revanced_spoof_video_streams_language_android_studio">Yayım dili seçimi Android Studio ilə əlçatmazdır</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1640,10 +1640,6 @@ Second \"item\" text"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Паказаць у статыстыцы для спецыялістаў</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Тып кліента адлюстроўваецца ў статыстыцы для спецыялістаў</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Кліент схаваны ў статыстыцы для спецыялістаў</string>
<string name="revanced_spoof_video_streams_language_title">Мова аўдыяпатоку</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Каб выбраць пэўную мову аўдыё, адключыце \'Прымусовая арыгінальная мова аўдыё\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">Выбар мовы трансляцыі недаступны ў Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1639,10 +1639,6 @@ Second \"item\" text"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Poka6i v Statistiki za nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Tipът na klienta se poka6va v Statistiki za nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klientът e skriт v Statistiki za nerds</string>
<string name="revanced_spoof_video_streams_language_title">Език на аудио потока</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">За да изберете конкретен аудио език, изключете \'Принудително оригинален аудио език\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">Изборът на език на потока не е наличен с Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1635,10 +1635,6 @@ AV1 সহ ভিডিও প্লেব্যাক আটকে যেতে
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">স্ট্যাটস ফর নার্ডসে দেখান</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">স্ট্যাটস ফর নার্ডসে ক্লায়েন্ট প্রকার দেখানো হবে</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">স্ট্যাটস ফর নার্ডসে ক্লায়েন্ট লুকানো হবে</string>
<string name="revanced_spoof_video_streams_language_title">অডিও স্ট্রিম ভাষা</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">একটি নির্দিষ্ট অডিও ভাষা নির্বাচন করতে, \'মূল অডিও ভাষা জোর করে চালু রাখুন\' বন্ধ করুন</string>
<string name="revanced_spoof_video_streams_language_android_studio">অ্যান্ড্রয়েড স্টুডিও সহ স্ট্রিম ভাষার নির্বাচন উপলব্ধ নেই</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1639,10 +1639,6 @@ Přehrávání videa s AV1 se může sekat nebo vypadávat snímky."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Zobrazit ve statistikách pro nadšence</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Typ klienta se zobrazuje ve statistikách pro nadšence</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klient je skrytý ve statistikách pro nadšence</string>
<string name="revanced_spoof_video_streams_language_title">Jazyk zvukového streamu</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Chcete-li vybrat konkrétní zvukový jazyk, vypněte „Vynutit původní zvukový jazyk“</string>
<string name="revanced_spoof_video_streams_language_android_studio">Volba jazyka streamu není k dispozici s Android Studiem</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1641,10 +1641,6 @@ Videoafspilning med AV1 kan hakke eller tabe billeder."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Vis i Statistik for nørder</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Klienttypen vises i Statistik for nørder</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klienten er skjult i Statistik for nørder</string>
<string name="revanced_spoof_video_streams_language_title">Lydstreamsprog</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">For at vælge et specifikt lydsprog, slå \'Gennemtving originalt lydsprog\' fra</string>
<string name="revanced_spoof_video_streams_language_android_studio">Valg af streaming-sprog er ikke tilgængeligt med Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1636,10 +1636,6 @@ Die Videowiedergabe mit AV1 kann stottern oder Bilder überspringen."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">In Statistiken für Nerds anzeigen</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Der Client-Typ wird in den Statistiken für Nerds angezeigt</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Der Client wird in den Statistiken für Nerds ausgeblendet</string>
<string name="revanced_spoof_video_streams_language_title">Audiodatenstromsprache</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Um eine bestimmte Audiosprache auszuwählen, deaktivieren Sie „Original-Audiosprache erzwingen“</string>
<string name="revanced_spoof_video_streams_language_android_studio">Die Auswahl der Stream-Sprache ist mit Android Studio nicht verfügbar.</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1638,10 +1638,6 @@ Second \"item\" text"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Εμφάνιση στο μενού «Στατιστικά για σπασίκλες»</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Το πρόγραμμα πελάτη εμφανίζεται στο μενού «Στατιστικά για σπασίκλες»</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Το πρόγραμμα πελάτη δεν εμφανίζεται στο μενού «Στατιστικά για σπασίκλες»</string>
<string name="revanced_spoof_video_streams_language_title">Γλώσσα ροής ήχου</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Για να επιλέξετε μια συγκεκριμένη γλώσσα ήχου, απενεργοποιήστε το «Εξαναγκασμός αρχικής γλώσσας ήχου»</string>
<string name="revanced_spoof_video_streams_language_android_studio">Η επιλογή γλώσσας ροής δεν είναι διαθέσιμη με το Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1628,10 +1628,6 @@ La reproducción puede tartamudear o perder fotogramas"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostrar en Estadísticas para nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">El tipo de cliente se muestra en Estadísticas para nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">El cliente está oculto en Estadísticas para nerds</string>
<string name="revanced_spoof_video_streams_language_title">Idioma de la transmisión de audio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Para seleccionar un idioma de audio específico, desactiva \"Forzar idioma de audio original\"</string>
<string name="revanced_spoof_video_streams_language_android_studio">La selección de idioma de transmisión no está disponible con Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1639,10 +1639,6 @@ AV1-ga videotaasesitus võib hakitud olla või kaadreid vahele jätta."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Kuva statistikas \"Nerdide jaoks\"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Klienditüüp on statistikas \"Nerdide jaoks\" nähtav</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klient on statistikas \"Nerdide jaoks\" peidetud</string>
<string name="revanced_spoof_video_streams_language_title">Helivoo keel</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Konkreetse helikeele valimiseks lülita välja \"Sunni algne helikeel\"</string>
<string name="revanced_spoof_video_streams_language_android_studio">Voogedastuse keelevalik ei ole Android Studioga saadaval</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -307,7 +307,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1639,10 +1639,6 @@ AV1-videon toisto saattaa pätkiä."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Näytä teknisissä tiedoissa</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Asiakastyyppi näytetään teknisissä tiedoissa</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Asiakastyyppi piilotetaan teknisissä tiedoissa</string>
<string name="revanced_spoof_video_streams_language_title">Äänivirran kieli</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Valitaksesi tietyn äänen kielen, poista \"Pakota alkuperäinen äänen kieli\" käytöstä</string>
<string name="revanced_spoof_video_streams_language_android_studio">Striimin kielivalinta ei ole käytettävissä Android Studion kanssa</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1637,10 +1637,6 @@ Maaaring mag-stutter o mag-drop ng frames ang pag-playback ng video na may AV1."
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Ipakita sa Mga Istatistika para sa mga nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Ipinapakita ang uri ng kliyente sa Mga Istatistika para sa mga nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Nakatago ang kliyente sa Mga Istatistika para sa mga nerds</string>
<string name="revanced_spoof_video_streams_language_title">Wika ng audio stream</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Upang pumili ng isang partikular na wika ng audio, i-off ang \'Puwersahin ang orihinal na wika ng audio\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">Hindi available ang pagpili ng wika ng stream sa Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1640,10 +1640,6 @@ La lecture vidéo avec AV1 peut être saccadée et des images peuvent être perd
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Afficher dans les Statistiques avancées</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Le type de client est affiché dans les Statistiques avancées</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Le client est caché dans les Statistiques avancées</string>
<string name="revanced_spoof_video_streams_language_title">Langue du flux audio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Pour sélectionner une langue audio spécifique, désactivez \"Forcer la langue audio d\'origine\"</string>
<string name="revanced_spoof_video_streams_language_android_studio">La sélection de la langue du flux n\'est pas disponible avec Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1637,10 +1637,6 @@ Dfhéadfadh sé go mbeadh stad nó go gcaillfí frámaí ag athsheinm físe l
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Taispeáin i Staitisticí do nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Taispeántar cineál an chliaint i Staitisticí do nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Tá an cliant curtha i bhfolach i Staitisticí do nerds</string>
<string name="revanced_spoof_video_streams_language_title">Teanga an tsrutha fuaime</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Chun teanga fuaime ar leith a roghnú, múch \'Fórsaigh teanga fuaime bhunaidh\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">Níl roghnú theanga an tsrutha ar fáil le Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -259,7 +259,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -258,7 +258,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1636,10 +1636,6 @@ Az AV1-es videólejátszás akadozhat vagy képkockákat ejthet."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Megjelenítés a Statisztikákban</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">A kliens típusa a Statisztikákban látható</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">A kliens el van rejtve a Statisztikákban</string>
<string name="revanced_spoof_video_streams_language_title">Hangfolyam nyelve</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Egy adott hangsáv nyelv kiválasztásához kapcsold ki az \"Eredeti hangsáv nyelv kikényszerítése\" opciót</string>
<string name="revanced_spoof_video_streams_language_android_studio">Az Android Studio-val nem érhető el a stream nyelvének kiválasztása</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1640,10 +1640,6 @@ AV1-ով տեսանյութի նվագարկումը կարող է ընդհատ
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Ցուցադրել վիճակագրության ակնոցներում</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Հաճախորդի տեսակը ցուցադրվում է վիճակագրության ակնոցներում</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Հաճախորդը թաքնված է վիճակագրության ակնոցներում</string>
<string name="revanced_spoof_video_streams_language_title">Ձայնային հոսքի լեզուն</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Որոշակի ձայնային լեզու ընտրելու համար անջատեք \'Պարտադրել բնօրինակ ձայնային լեզուն\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">Հոսքի լեզվի ընտրությունը հասանելի չէ Android Studio-ի հետ</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1638,10 +1638,6 @@ Pemutaran video dengan AV1 mungkin tersendat atau kehilangan bingkai."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Tampilkan di Statistik untuk nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Jenis klien ditampilkan di Statistik untuk nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klien disembunyikan di Statistik untuk nerds</string>
<string name="revanced_spoof_video_streams_language_title">Bahasa aliran audio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Untuk memilih bahasa audio tertentu, matikan \'Paksa bahasa audio asli\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">Pilihan bahasa streaming tidak tersedia dengan Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1638,10 +1638,6 @@ La riproduzione video con AV1 potrebbe rallentare o perdere fotogrammi."</string
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostra nelle statistiche per nerd</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Il tipo di client è mostrato nelle statistiche per nerd</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Il client è nascosto nelle statistiche per nerd</string>
<string name="revanced_spoof_video_streams_language_title">Lingua del flusso audio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Per selezionare una lingua audio specifica, disattiva \'Forza lingua audio originale\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">La selezione della lingua dello stream non è disponibile con Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1641,10 +1641,6 @@ Second \"item\" text"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">הצג בנתונים לגיקים</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">סוג הלקוח מוצג בנתונים לגיקים</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">הלקוח מוסתר בנתונים לגיקים</string>
<string name="revanced_spoof_video_streams_language_title">שפת זרם השמע</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">כדי לבחור שפת שמע ספציפית, כבה את \'אכוף שפת שמע מקורית\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">בחירת שפת הזרם אינה זמינה עם אנדרואיד סטודיו</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -282,7 +282,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_hide_doodles_summary_off">ロゴの YouTube Doodle アニメーションは表示されます</string>
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodle は、年に数日、祝日や記念日などの特別な日に表示されます。
あなたの地域で Doodle が表示されているとき、この設定をオンにすると検索結果にカテゴリー バーが表示されなくなります。"</string>
あなたの地域で Doodle が表示されているとき、この設定をオンにすると検索結果にフィルタバーが表示されなくなります。"</string>
<string name="revanced_hide_channel_bar_title">チャンネルバーを非表示</string>
<string name="revanced_hide_channel_bar_summary_on">チャンネルバーは表示されません</string>
<string name="revanced_hide_channel_bar_summary_off">チャンネルバーは表示されます</string>
@@ -350,11 +350,11 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">フィードに表示されません</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">フィードに表示されます</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">関連動画で非表示</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">関連動画に表示されません</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">関連動画に表示されます</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">関連動画に表示されません</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">関連動画に表示されます</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">検索結果で非表示</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">検索結果に表示されません</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">検索結果に表示されます</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">検索結果に表示されません</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">検索結果に表示されます</string>
<string name="revanced_hide_filter_bar_feed_in_history_title">再生履歴で非表示</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">再生履歴に表示されません</string>
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">再生履歴に表示されます</string>
@@ -492,9 +492,9 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_hide_paid_promotion_label_title">「プロモーションを含みます」ラベルを非表示</string>
<string name="revanced_hide_paid_promotion_label_summary_on">「プロモーションを含みます」ラベルは表示されません</string>
<string name="revanced_hide_paid_promotion_label_summary_off">「プロモーションを含みます」ラベルは表示されます</string>
<string name="revanced_hide_self_sponsor_ads_title">自己スポンサー カードを非表示</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">自己スポンサー カードは表示されません</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">自己スポンサー カードは表示されます</string>
<string name="revanced_hide_self_sponsor_ads_title">自己宣伝カードを非表示</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">自己宣伝カードは表示されません</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">自己宣伝カードは表示されます</string>
<string name="revanced_hide_shopping_links_title">商品へのリンクを非表示</string>
<string name="revanced_hide_shopping_links_summary_on">動画の概要欄の商品へのリンクは表示されません</string>
<string name="revanced_hide_shopping_links_summary_off">動画の概要欄の商品へのリンクは表示されます</string>
@@ -1142,7 +1142,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_sb_settings_ie">設定のインポート / エクスポート</string>
<string name="revanced_sb_settings_copy">コピー</string>
<string name="revanced_sb_settings_ie_sum">SponsorBlock の設定を JSON 形式のテキストでインポート / エクスポートします。この JSON テキストは他のプラットフォームでも利用可能です</string>
<string name="revanced_sb_settings_ie_sum_warning">SponsorBlock の設定を他のプラットフォームでも利用可能な JSON 形式のテキストでインポート / エクスポートします。この JSON テキストには非公開ユーザー ID が含まれています。共有する際は十分注意してください</string>
<string name="revanced_sb_settings_ie_sum_warning">SponsorBlock の設定を他のプラットフォームでも利用可能な JSON 形式のテキストでインポート / エクスポートします。この JSON テキストには非公開ユーザー ID が含まれています。このテキストを共有する際は十分注意してください</string>
<string name="revanced_sb_settings_import_successful">設定のインポートに成功しました</string>
<string name="revanced_sb_settings_import_failed">インポートに失敗しました: %s</string>
<string name="revanced_sb_settings_export_failed">エクスポートに失敗しました: %s</string>
@@ -1151,18 +1151,18 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
このユーザー ID は、パスワードのようなものであり、決して共有すべきではありません。"</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">今後表示しない</string>
<string name="revanced_sb_diff_segments">セグメントに対する動作を変更</string>
<string name="revanced_sb_segments_sponsor">スポンサー</string>
<string name="revanced_sb_segments_sponsor">広告</string>
<string name="revanced_sb_segments_sponsor_sum">有料の宣伝 、有料の紹介、直接的な広告。自己宣伝や好意をもって行う、慈善活動、クリエーター、ウェブサイト、製品などの無償の紹介は含まれません</string>
<string name="revanced_sb_segments_selfpromo">無報酬の宣伝 / 自己宣伝</string>
<string name="revanced_sb_segments_selfpromo_sum">無報酬または自己宣伝である、という点以外は「スポンサー」と同様です。商品、寄付、コラボ相手に関する宣伝などを含みます</string>
<string name="revanced_sb_segments_selfpromo_sum">無報酬または自己宣伝である、という点以外は「広告」と同様です。商品、寄付、コラボ相手に関する宣伝などを含みます</string>
<string name="revanced_sb_segments_interaction">視聴者への催促 (登録など)</string>
<string name="revanced_sb_segments_interaction_sum">動画内に挿入される視聴者への高評価、チャンネル登録、フォローなどの時間的に短い催促。時間的に長い催促またはイベントなどの個別具体的なものに関する催促は、「視聴者への催促」ではなく「自己宣伝」に分類すべきです</string>
<string name="revanced_sb_segments_highlight">ハイライト</string>
<string name="revanced_sb_segments_highlight_sum">動画の中で最も重要な場面</string>
<string name="revanced_sb_segments_intro">幕間 / オープニング (OP)</string>
<string name="revanced_sb_segments_intro_sum">実際のコンテンツを含まない区間。一時停止、静止画、繰り返しアニメーションなど。情報を含むトランジッション (場面転換) は、このカテゴリではありません</string>
<string name="revanced_sb_segments_intro_sum">実際のコンテンツを含まない区間。一時停止、静止画、繰り返しアニメーションなど。情報を含むトランジッション (場面転換) は、このカテゴリではありません</string>
<string name="revanced_sb_segments_outro">終了画面 / クレジット (ED)</string>
<string name="revanced_sb_segments_outro_sum">クレジット、または YouTube の終了画面が表示される場面。情報を含む結論、まとめ部分は、このカテゴリには含まれません</string>
<string name="revanced_sb_segments_outro_sum">クレジット、または YouTube の終了画面が表示される場面。情報を含む結論、まとめ部分は、このカテゴリには含まれません</string>
<string name="revanced_sb_segments_hook">フック / あいさつ</string>
<string name="revanced_sb_segments_hook_sum">今後の動画のナレーション付きの予告編、および開幕と別れのあいさつ。重複しない内容や情報を追加する場面は含まれません</string>
<string name="revanced_sb_segments_preview">予告編 / 総集編</string>
@@ -1173,7 +1173,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_sb_segments_nomusic_sum">ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間であり、公式や他のメディアの音源に存在しない区間</string>
<string name="revanced_sb_skip_button_compact">スキップ</string>
<string name="revanced_sb_skip_button_compact_highlight">ハイライト</string>
<string name="revanced_sb_skip_button_sponsor"> スポンサーをスキップ</string>
<string name="revanced_sb_skip_button_sponsor"> 広告をスキップ</string>
<string name="revanced_sb_skip_button_selfpromo">自己宣伝をスキップ</string>
<string name="revanced_sb_skip_button_interaction">催促をスキップ</string>
<string name="revanced_sb_skip_button_highlight">ハイライトまでスキップ</string>
@@ -1188,7 +1188,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_sb_skip_button_filler">余談をスキップ</string>
<string name="revanced_sb_skip_button_nomusic">楽曲以外をスキップ</string>
<string name="revanced_sb_skip_button_unsubmitted">セグメントをスキップ</string>
<string name="revanced_sb_skipped_sponsor">スポンサーをスキップしました</string>
<string name="revanced_sb_skipped_sponsor">広告をスキップしました</string>
<string name="revanced_sb_skipped_selfpromo">自己宣伝をスキップしました</string>
<string name="revanced_sb_skipped_interaction">催促をスキップしました</string>
<string name="revanced_sb_skipped_highlight">ハイライトまでスキップしました</string>
@@ -1226,13 +1226,13 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_sb_vote_failed_forbidden">セグメントへの投票に失敗しました: %s</string>
<string name="revanced_sb_vote_upvote">高評価</string>
<string name="revanced_sb_vote_downvote">低評価</string>
<string name="revanced_sb_vote_category">カテゴリの変更</string>
<string name="revanced_sb_vote_no_segments">投票先のセグメントが指定されていません</string>
<string name="revanced_sb_vote_category">カテゴリの変更</string>
<string name="revanced_sb_vote_no_segments">投票可能なセグメントがありません</string>
<!-- A segment start and end time, such as "02:10 to 03:40". -->
<string name="revanced_sb_vote_segment_time_to_from">%1$s %2$s</string>
<string name="revanced_sb_new_segment_choose_category">セグメントのカテゴリを選択してください</string>
<string name="revanced_sb_new_segment_disabled_category">カテゴリーが設定で無効になっています。送信するには、このカテゴリーを有効にしてください。</string>
<string name="revanced_sb_new_segment_title">新しいセグメント</string>
<string name="revanced_sb_new_segment_choose_category">セグメントのカテゴリを選択してください</string>
<string name="revanced_sb_new_segment_disabled_category">カテゴリが「無効」に設定されています。送信するには、設定を変更してください。</string>
<string name="revanced_sb_new_segment_title">新しいセグメント </string>
<string name="revanced_sb_new_segment_mark_time_as_question">%s を新しいセグメント (SponsorBlock) の開始位置 / 終了位置に設定しますか?</string>
<string name="revanced_sb_new_segment_mark_start">開始位置</string>
<string name="revanced_sb_new_segment_mark_end">終了位置</string>
@@ -1641,10 +1641,6 @@ AV1 での動画再生は、カクつくまたはコマ落ちが発生する場
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">統計情報にクライアントを表示</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">統計情報には現在のクライアントが表示されます</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">統計情報には現在のクライアントは表示されません</string>
<string name="revanced_spoof_video_streams_language_title">音声ストリームの言語</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">特定の音声言語を選択するには、「オリジナルの音声を強制的に使用」を無効にしてください</string>
<string name="revanced_spoof_video_streams_language_android_studio">Android Studio では、ストリームの言語を選択できません</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -272,7 +272,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1441,11 +1441,11 @@ YouTube Premium 사용자라면 이 설정은 필요하지 않을 수 있습니
<string name="revanced_header_logo_entry_6">사용자 정의</string>
</patch>
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
<string name="revanced_bypass_image_region_restrictions_title">이미지 표시 제한 국가 우회하기</string>
<string name="revanced_bypass_image_region_restrictions_title">이미지 표시 제한 지역 우회하기</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">이미지 호스트로 yt4.ggpht.com를 사용합니다</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">"기본 이미지 호스트를 사용합니다
이 기능을 활성화하면 일부 국가에서 차단된 이미지를 수신할 수 있습니다"</string>
이 기능을 활성화하면 일부 지역에서 차단된 이미지를 수신할 수 있습니다"</string>
</patch>
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
@@ -1646,10 +1646,6 @@ AV1이 사용된 동영상 재생이 끊기거나 프레임이 손실될 수 있
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">전문 통계에서 표시하기</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">동영상 스트림을 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시됩니다</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">동영상 스트림을 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시되지 않습니다</string>
<string name="revanced_spoof_video_streams_language_title">오디오 스트림 언어</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">특정 오디오 언어를 선택하려면, \'원본 오디오 언어 강제로 활성화하기\'를 끄세요</string>
<string name="revanced_spoof_video_streams_language_android_studio">Android Studio에서는 스트림 언어를 선택할 수 없습니다</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1640,10 +1640,6 @@ Vaizdo įrašo atkūrimas su AV1 gali strigti arba praleisti kadrus."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Rodyti statistinėje informacijoje \"tik profesionalams\"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Kliento tipas rodomas statistinėje informacijoje \"tik profesionalams\"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klientas paslėptas statistinėje informacijoje \"tik profesionalams\"</string>
<string name="revanced_spoof_video_streams_language_title">Garso srauto kalba</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Norėdami pasirinkti konkrečią garso kalbą, išjunkite „Priverstinė originali garso kalba“.</string>
<string name="revanced_spoof_video_streams_language_android_studio">Transliacijos kalbos pasirinkimas nepasiekiamas naudojant „Android Studio“</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1640,10 +1640,6 @@ AV1 video atskaņošana var raustīties vai izlaist kadrus."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Rādīt statistiskos datos entuziastiem</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Klienta tips tiek rādīts statistiskos datos entuziastiem</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klients ir paslēpts statistiskos datos entuziastiem</string>
<string name="revanced_spoof_video_streams_language_title">Audio straumes valoda</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Lai atlasītu konkrētu audio valodu, izslēdziet “Piespiest oriģinālo audio valodu”</string>
<string name="revanced_spoof_video_streams_language_android_studio">Straumju valodas izvēle nav pieejama ar Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -258,7 +258,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -259,7 +259,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1637,10 +1637,6 @@ Het afspelen van video met AV1 kan haperen of frames overslaan."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Weergeven in Stats for nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Het clienttype wordt getoond in Stats for nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Client is verborgen in Stats for nerds</string>
<string name="revanced_spoof_video_streams_language_title">Audiostreamtaal</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Om een specifieke audiotaal te selecteren, schakel \"Oorspronkelijke audiotaal forceren\" uit</string>
<string name="revanced_spoof_video_streams_language_android_studio">Streamtaalselectie is niet beschikbaar met Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1635,10 +1635,6 @@ Odtwarzanie wideo z AV1 może powodować zacinanie się lub gubienie klatek."</s
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Pokaż w statystykach dla nerdów</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Typ klienta jest wyświetlany w Statystykach dla nerdów</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klient jest ukryty w statystykach dla nerdów</string>
<string name="revanced_spoof_video_streams_language_title">Język strumienia audio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Aby wybrać konkretny język audio, wyłącz \"Wymuś oryginalny język audio\"</string>
<string name="revanced_spoof_video_streams_language_android_studio">Wybór języka strumienia nie jest dostępny w przypadku Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1636,10 +1636,6 @@ A reprodução de vídeo com AV1 pode gaguejar ou perder quadros."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostrar em Estatísticas para nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">O tipo de cliente é mostrado em Estatísticas para nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">O cliente está oculto em Estatísticas para nerds</string>
<string name="revanced_spoof_video_streams_language_title">Idioma do fluxo de áudio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Para selecionar um idioma de áudio específico, desative \"Forçar idioma de áudio original\"</string>
<string name="revanced_spoof_video_streams_language_android_studio">A seleção de idioma do stream não está disponível com o Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1639,10 +1639,6 @@ A reprodução de vídeo com AV1 pode apresentar soluços ou perder quadros."</s
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostrar em Estatísticas para nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">O tipo de cliente é mostrado em Estatísticas para nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">O cliente está oculto em Estatísticas para nerds</string>
<string name="revanced_spoof_video_streams_language_title">Idioma do fluxo de áudio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Para selecionar um idioma de áudio específico, desative \'Forçar idioma de áudio original\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">A seleção do idioma do stream não está disponível com o Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1636,10 +1636,6 @@ Redarea video cu AV1 poate sacada sau pierde cadre."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Afișează în Statistici pentru pasionați</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Tipul clientului este afișat în Statistici pentru pasionați</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Clientul este ascuns în Statistici pentru pasionați</string>
<string name="revanced_spoof_video_streams_language_title">Limba fluxului audio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Pentru a selecta o limbă audio specifică, dezactivați „Forțează limba audio originală”</string>
<string name="revanced_spoof_video_streams_language_android_studio">Selecția limbii fluxului nu este disponibilă cu Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -265,8 +265,8 @@ Second \"item\" text"</string>
<string name="revanced_hide_show_more_button_summary_on">Кнопка \"Показать еще\" в результатах поиска скрыта</string>
<string name="revanced_hide_show_more_button_summary_off">Кнопка \"Показать еще\" в результатах поиска показана</string>
<string name="revanced_hide_surveys_title">Скрыть опросы</string>
<string name="revanced_hide_surveys_summary_on">Опросы скрыты</string>
<string name="revanced_hide_surveys_summary_off">Опросы показаны</string>
<string name="revanced_hide_surveys_summary_on">Опросы в ленте скрыты</string>
<string name="revanced_hide_surveys_summary_off">Опросы в ленте показаны</string>
<string name="revanced_hide_ticket_shelf_title">Скрыть секцию билетов</string>
<string name="revanced_hide_ticket_shelf_summary_on">Секция билетов под плеером скрыта</string>
<string name="revanced_hide_ticket_shelf_summary_off">Секция билетов под плеером показана</string>
@@ -295,7 +295,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_info_panels_summary_off">Информационные панели в ленте, результатах поиска и видео показаны</string>
<!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. -->
<string name="revanced_hide_join_membership_button_title">Скрыть кнопку \"Стать спонсором\"</string>
<string name="revanced_hide_join_membership_button_title">Скрыть кнопку \"Подписаться\"</string>
<string name="revanced_hide_join_membership_button_summary_on">Кнопка \"Подписаться\" скрыта</string>
<string name="revanced_hide_join_membership_button_summary_off">Кнопка \"Подписаться\" показана</string>
<string name="revanced_hide_medical_panels_title">Скрыть медицинские панели</string>
@@ -360,22 +360,22 @@ Second \"item\" text"</string>
<string name="revanced_channel_screen_summary">Скрыть или показать компоненты страницы канала</string>
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_for_you_shelf_title">Скрыть секцию \"Для вас\"</string>
<string name="revanced_hide_for_you_shelf_summary_on">Секция \"Для вас\" скрыта</string>
<string name="revanced_hide_for_you_shelf_summary_off">Секция \"Для вас\" показана</string>
<string name="revanced_hide_for_you_shelf_summary_on">Секция \"Для вас\" на странице канала скрыта</string>
<string name="revanced_hide_for_you_shelf_summary_off">Секция \"Для вас\" на странице канала показана</string>
<string name="revanced_hide_links_preview_title">Скрыть предпросмотр ссылок</string>
<string name="revanced_hide_links_preview_summary_on">Предпросмотр ссылок скрыт</string>
<string name="revanced_hide_links_preview_summary_off">Предпросмотр ссылок показан</string>
<string name="revanced_hide_links_preview_summary_on">Предпросмотр ссылок на странице канала скрыт</string>
<string name="revanced_hide_links_preview_summary_off">Предпросмотр ссылок на странице канала показан</string>
<string name="revanced_hide_members_shelf_title">Скрыть секцию участников</string>
<string name="revanced_hide_members_shelf_summary_on">Секция участников скрыта</string>
<string name="revanced_hide_members_shelf_summary_off">Секция участников показана</string>
<string name="revanced_hide_members_shelf_summary_on">Секция участников на странице канала скрыта</string>
<string name="revanced_hide_members_shelf_summary_off">Секция участников на странице канала показана</string>
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_community_button_title">Скрыть кнопку \"Посетить сообщество\"</string>
<string name="revanced_hide_visit_community_button_summary_on">Кнопка \"Посетить сообщество\" скрыта</string>
<string name="revanced_hide_visit_community_button_summary_off">Кнопка \"Перейти в сообщество\" показана</string>
<string name="revanced_hide_visit_community_button_summary_on">Кнопка \"Посетить сообщество\" на странице канала скрыта</string>
<string name="revanced_hide_visit_community_button_summary_off">Кнопка \"Посетить сообщество\" на странице канала показана</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">Скрыть кнопку \"Посетить магазин\"</string>
<string name="revanced_hide_visit_store_button_summary_on">Кнопка \"Перейти в магазин\" скрыта</string>
<string name="revanced_hide_visit_store_button_summary_off">Кнопка \"Перейти в магазин\" показана</string>
<string name="revanced_hide_visit_store_button_title">Скрыть кнопку \"Перейти в магазин\"</string>
<string name="revanced_hide_visit_store_button_summary_on">Кнопка \"Перейти в магазин\" на странице канала скрыта</string>
<string name="revanced_hide_visit_store_button_summary_off">Кнопка \"Перейти в магазин\" на странице канала показана</string>
<string name="revanced_comments_screen_title">Комментарии</string>
<string name="revanced_comments_screen_summary">Скрыть или показать компоненты раздела комментариев</string>
<string name="revanced_hide_comments_ai_chat_summary_title">Скрыть секцию ИИ сводки чата</string>
@@ -469,11 +469,11 @@ Second \"item\" text"</string>
</patch>
<patch id="ad.general.hideAdsResourcePatch">
<string name="revanced_hide_creator_store_shelf_title">Скрыть секцию магазина автора</string>
<string name="revanced_hide_creator_store_shelf_summary_on">Секция магазина автора под видеоплеером скрыта</string>
<string name="revanced_hide_creator_store_shelf_summary_off">Секция магазина автора под видеоплеером показана</string>
<string name="revanced_hide_creator_store_shelf_summary_on">Секция магазина автора под плеером скрыта</string>
<string name="revanced_hide_creator_store_shelf_summary_off">Секция магазина автора под плеером показана</string>
<string name="revanced_hide_end_screen_store_banner_title">Скрыть баннер магазина</string>
<string name="revanced_hide_end_screen_store_banner_summary_on">Баннер магазина на конечном экране скрыт</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">Баннер магазина на конечном экране показан</string>
<string name="revanced_hide_end_screen_store_banner_summary_on">Баннер магазина в конце просмотра скрыт</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">Баннер магазина в конце просмотра показан</string>
<string name="revanced_hide_fullscreen_ads_title">Скрыть полноэкранную рекламу</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"Полноэкранная реклама при запуске приложения скрыта
@@ -793,8 +793,8 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Пункт \"Смотреть в VR-режиме\" в выдвижном меню плеера скрыт</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Пункт \"Смотреть в VR-режиме\" в выдвижном меню плеера показан</string>
<string name="revanced_hide_player_flyout_video_quality_title">Скрыть меню качества видео</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Меню качества видео скрыто</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Меню качества видео показано</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Меню качества видео в выдвижном меню плеера скрыто</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Меню качества видео в выдвижном меню плеера показано</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Скрыть колонтитул меню качества видео</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Нижний колонтитул старого меню качества видео в выдвижном меню плеера скрыт</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Нижний колонтитул старого меню качества видео в выдвижном меню плеера показан</string>
@@ -838,7 +838,7 @@ Second \"item\" text"</string>
<string name="revanced_disable_rolling_number_animations_summary_off">Анимированные счетчики просмотров, лайков и дизлайков включены</string>
</patch>
<patch id="layout.hide.seekbar.hideSeekbarPatch">
<string name="revanced_hide_seekbar_title">Скрыть полосу прогресса видеоплеера</string>
<string name="revanced_hide_seekbar_title">Скрыть полосу прогресса плеера</string>
<string name="revanced_hide_seekbar_summary_on">Полоса прогресса в плеере скрыта</string>
<string name="revanced_hide_seekbar_summary_off">Полоса прогресса в плеере показана</string>
<!-- Seekbar shown inside video thumbnails found the home/feed/search/history. The seekbar shows the prior watch progress when the video was last open. -->
@@ -1086,13 +1086,13 @@ Second \"item\" text"</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Автоскрытие кнопки пропуска</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Кнопка пропуска автоматически скрывается через несколько секунд</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Кнопка пропуска показывается для всего сегмента</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Длительность кнопки пропуска</string>
<string name="revanced_sb_auto_hide_skip_button_duration">Длительность показа кнопки пропуска</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Длительность показа кнопок пропуска и перехода к основному моменту до автоматического скрытия</string>
<string name="revanced_sb_general_skiptoast">Показывать уведомление отмены пропуска</string>
<string name="revanced_sb_general_skiptoast_sum_on">Всплывающее уведомление показано при автоматическом пропуске сегмента. Нажмите на всплывающее уведомление для отмены пропуска</string>
<string name="revanced_sb_general_skiptoast_sum_off">Всплывающее уведомление скрыто</string>
<string name="revanced_sb_toast_on_skip_duration">Длительность всплывающего уведомления при пропуске</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Как долго показывать всплывающее сообщение об отмене пропуска</string>
<string name="revanced_sb_toast_on_skip_duration_sum">Длительность показа всплывающего сообщения об отмене пропуска</string>
<string name="revanced_sb_duration_1s">1 секунда</string>
<string name="revanced_sb_duration_2s">2 секунды</string>
<string name="revanced_sb_duration_3s">3 секунды</string>
@@ -1538,7 +1538,7 @@ Second \"item\" text"</string>
<string name="revanced_bypass_url_redirects_summary_off">Перенаправления URL-адресов (youtube.com/redirect) не обходятся и исходные URL-адреса не открываются напрямую</string>
</patch>
<patch id="misc.links.openLinksExternallyPatch">
<string name="revanced_external_browser_title">Открыть ссылки в браузере</string>
<string name="revanced_external_browser_title">Открывать ссылки в браузере</string>
<string name="revanced_external_browser_summary_on">Ссылки открываются во внешнем браузере</string>
<string name="revanced_external_browser_summary_off">Ссылки открываются во встроенном браузере</string>
</patch>
@@ -1646,10 +1646,6 @@ Second \"item\" text"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Показать в \"Статистике для сисадминов\"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Тип клиента в \"Статистике для сисадминов\" показан</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Тип клиента в \"Статистике для сисадминов\" скрыт</string>
<string name="revanced_spoof_video_streams_language_title">Язык аудиопотока</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Для выбора определенного языка аудио отключите \"Принудительный язык оригинального аудио\"</string>
<string name="revanced_spoof_video_streams_language_android_studio">Выбор языка трансляции недоступен с Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1632,10 +1632,6 @@ Prehrávanie videa s AV1 môže sekať alebo vynechávať snímky."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Zobraziť v štatistike pre expertov</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Typ klienta sa zobrazuje v štatistikách pre expertov</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klient je skrytý v štatistikách pre expertov</string>
<string name="revanced_spoof_video_streams_language_title">Jazyk zvukového streamu</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Ak chcete vybrať konkrétny jazyk zvuku, vypnite „Vynútiť pôvodný jazyk zvuku“</string>
<string name="revanced_spoof_video_streams_language_android_studio">Výber jazyka streamu nie je k dispozícii v aplikácii Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1639,10 +1639,6 @@ Predvajanje videa z AV1 se lahko zatika ali izpušča sličice."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Pokaži v statistiki za piflarje</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Vrsta odjemalca je prikazana v statistiki za piflarje</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Odjemalec je skrit v statistiki za piflarje</string>
<string name="revanced_spoof_video_streams_language_title">Jezik zvočnega toka</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Za izbiro določenega zvočnega jezika izklopite \'Vsili izvirni zvočni jezik\'</string>
<string name="revanced_spoof_video_streams_language_android_studio">Izbira jezika pretakanja ni na voljo z Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1637,10 +1637,6 @@ Luajtja e videos me AV1 mund të ngecë ose të humbasë korniza."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Shfaqni në Statistikat për nerdës</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Lloji i klientit shfaqet në Statistikat për nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klienti është fshehur në statistikat për nerds</string>
<string name="revanced_spoof_video_streams_language_title">Gjuha e transmetimit audio</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Për të zgjedhur një gjuhë specifike audio, çaktivizoni \"Detyro gjuhën origjinale audio\"</string>
<string name="revanced_spoof_video_streams_language_android_studio">Zgjedhja e gjuhës së transmetimit nuk është e disponueshme me Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1638,10 +1638,6 @@ Reprodukcija videa s AV1 može zastajkivati ili preskakati kadrove."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Prikaži u „Statistici za znalce”</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Tip klijenta je prikazan u „Statistici za znalce”</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Tip klijenta je skriven u „Statistici za znalce”</string>
<string name="revanced_spoof_video_streams_language_title">Jezik audio strima</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Da biste izabrali određeni jezik zvuka, isključite opciju „Prisili originalni jezik zvuka”</string>
<string name="revanced_spoof_video_streams_language_android_studio">Izbor jezika strima nije dostupan sa Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -1641,10 +1641,6 @@ Second \"item\" text"</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Прикажи у „Статистици за зналце”</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Тип клијента је приказан у „Статистици за зналце”</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Тип клијента је скривен у „Статистици за зналце”</string>
<string name="revanced_spoof_video_streams_language_title">Језик аудио стрима</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Да бисте изабрали одређени језик звука, искључите опцију „Присили оригинални језик звука”</string>
<string name="revanced_spoof_video_streams_language_android_studio">Избор језика стрима није доступан са Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -313,9 +313,9 @@ Om en doodle visas för närvarande i din region och den här döljningsinställ
<string name="revanced_hide_timed_reactions_title">Dölj tidsbaserade reaktioner</string>
<string name="revanced_hide_timed_reactions_summary_on">Tidsbaserade reaktioner är dolda</string>
<string name="revanced_hide_timed_reactions_summary_off">Tidsbaserade reaktioner visas</string>
<string name="revanced_hide_ai_generated_video_summary_section_title">Dölj AI-genererad videosammanfattning</string>
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Avsnittet för AI-genererad videosammanfattning är dolt</string>
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Avsnittet för AI-genererad videosammanfattning visas</string>
<string name="revanced_hide_ai_generated_video_summary_section_title">Dölj AI-genererad videoöversikt</string>
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Avsnittet AI-genererad videoöversikt är dolt</string>
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Avsnittet AI-genererad videoöversikt visas</string>
<string name="revanced_hide_ask_section_title">Dölj Fråga</string>
<string name="revanced_hide_ask_section_summary_on">Avsnittet Fråga är dolt</string>
<string name="revanced_hide_ask_section_summary_off">Avsnittet Fråga visas</string>
@@ -1638,10 +1638,6 @@ Videouppspelning med AV1 kan hacka eller tappa bildrutor."</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Visa i Statistik för nördar</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Klienttypen visas i Statistik för nördar</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klienten är dold i Statistik för nördar</string>
<string name="revanced_spoof_video_streams_language_title">Ljudströmmens språk</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">Om du vill välja ett specifikt ljudspråk inaktiverar du \"Tvinga ursprungligt ljudspråk\"</string>
<string name="revanced_spoof_video_streams_language_android_studio">Val av strömspråk är inte tillgängligt med Android Studio</string>
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
<!--
All strings must have a unique path, even if the same string is declared in two different apps.
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
</patch>
</app>
<app id="music">

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