diff --git a/CHANGELOG.md b/CHANGELOG.md index 069d20a74..059a74369 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/extensions/music/src/main/java/app/revanced/extension/music/patches/HideCastButtonPatch.java b/extensions/music/src/main/java/app/revanced/extension/music/patches/HideCastButtonPatch.java index d694891ab..ab03ba8e4 100644 --- a/extensions/music/src/main/java/app/revanced/extension/music/patches/HideCastButtonPatch.java +++ b/extensions/music/src/main/java/app/revanced/extension/music/patches/HideCastButtonPatch.java @@ -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); } } diff --git a/extensions/music/src/main/java/app/revanced/extension/music/patches/HideCategoryBarPatch.java b/extensions/music/src/main/java/app/revanced/extension/music/patches/HideCategoryBarPatch.java index f0433ccb1..79d772096 100644 --- a/extensions/music/src/main/java/app/revanced/extension/music/patches/HideCategoryBarPatch.java +++ b/extensions/music/src/main/java/app/revanced/extension/music/patches/HideCategoryBarPatch.java @@ -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); } } diff --git a/extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java b/extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java index 15e90f565..ade26a30f 100644 --- a/extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java +++ b/extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java @@ -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 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( diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index c6cf761ca..ca4a8ff61 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -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) { diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/privacy/LinkSanitizer.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/privacy/LinkSanitizer.java index 9cfa05c1b..853ced003 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/privacy/LinkSanitizer.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/privacy/LinkSanitizer.java @@ -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); + } } } } diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index 3bc16e313..c1bc849c1 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -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 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); diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java index cfd79b972..39076b562 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java @@ -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". * Google Pixel 9 Pro Fold diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java index 53664881b..77ef1a663 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java @@ -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; diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/PlayerRoutes.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/PlayerRoutes.java index cfc811d75..31e3f0303 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/PlayerRoutes.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/PlayerRoutes.java @@ -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(); diff --git a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/ExtensionPreferenceCategory.java b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/ExtensionPreferenceCategory.java index 60d7983ea..7383a5582 100644 --- a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/ExtensionPreferenceCategory.java +++ b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/ExtensionPreferenceCategory.java @@ -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.", diff --git a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/share/ShareUrlSanitizer.java b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/share/ShareUrlSanitizer.java new file mode 100644 index 000000000..5d09c10c0 --- /dev/null +++ b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/share/ShareUrlSanitizer.java @@ -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); + } +} diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ChangeHeaderPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ChangeHeaderPatch.java index ed5bcec07..8d7462119 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ChangeHeaderPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ChangeHeaderPatch.java @@ -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; } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch.java index ef8069e85..75374c09e 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch.java @@ -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 availableClients = List.of( + VISIONOS, ANDROID_CREATOR, ANDROID_VR_1_43_32, - VISIONOS, + ANDROID_NO_SDK, IPADOS); app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse( diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java index 747a4f048..0dd82d240 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java @@ -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); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofAudioSelectorListPreference.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofAudioSelectorListPreference.java deleted file mode 100644 index 00c3f2007..000000000 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofAudioSelectorListPreference.java +++ /dev/null @@ -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); - } -} - diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java index bf66edbd4..86802ee20 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java @@ -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"); } diff --git a/gradle.properties b/gradle.properties index 0ec315418..009b6c055 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 diff --git a/patches/api/patches.api b/patches/api/patches.api index 1341b5ff8..9c3b806d3 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -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; } diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/Fingerprints.kt index efbdaf597..cc762c123 100644 --- a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/Fingerprints.kt @@ -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;") } diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/misc/devmenu/EnableDeveloperMenuPatch.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/devmenu/EnableDeveloperMenuPatch.kt index 4f594478d..e9577477a 100644 --- a/patches/src/main/kotlin/app/revanced/patches/instagram/misc/devmenu/EnableDeveloperMenuPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/devmenu/EnableDeveloperMenuPatch.kt @@ -24,7 +24,7 @@ val enableDeveloperMenuPatch = bytecodePatch( with(clearNotificationReceiverFingerprint.method) { indexOfFirstInstructionReversedOrThrow(clearNotificationReceiverFingerprint.stringMatches!!.first().index) { val reference = getReference() - 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" diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/Fingerprints.kt index 234078c2a..76e03d2c9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/Fingerprints.kt @@ -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 } } diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt index 7668c9dc7..5a6270551 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt @@ -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(insertIndex - 1).registerA - val freeRegister = findFreeRegister(insertIndex, register) + chipCloudFingerprint.method.apply { + val targetIndex = chipCloudFingerprint.patternMatch!!.endIndex + val targetRegister = getInstruction(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" ) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/AddBrandLicensePatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/AddBrandLicensePatch.kt new file mode 100644 index 000000000..629a53e2e --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/AddBrandLicensePatch.kt @@ -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) + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 5381131f2..a2b88d7f1 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -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) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/SettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/SettingsPatch.kt index 9d13d1e55..c721044cc 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/SettingsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/SettingsPatch.kt @@ -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>? = null, preferences: Set, ) = resourcePatch { - dependsOn(addResourcesPatch, settingsColorPatch) + dependsOn( + addResourcesPatch, + settingsColorPatch, + addBrandLicensePatch + ) execute { copyResources( diff --git a/patches/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt index b80ceaed0..e6894b521 100644 --- a/patches/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt @@ -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()?.name == "" - } - val secondIndex = indexOfFirstInstructionOrThrow { - getReference()?.returnType?.contains("Uri") == true - } + findInstructionIndicesReversedOrThrow { + getReference().let { + it?.definingClass == "Landroid/os/Environment;" && it.name.startsWith("DIRECTORY_") + } + }.forEach { fieldIndex -> + val pathRegister = getInstruction(fieldIndex).registerA + val builderRegister = getInstruction(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( diff --git a/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt index 3b4840a83..bc6cc2bff 100644 --- a/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt @@ -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"), diff --git a/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/share/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/share/Fingerprints.kt new file mode 100644 index 000000000..836be8900 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/share/Fingerprints.kt @@ -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" + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/share/SanitizeShareUrlsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/share/SanitizeShareUrlsPatch.kt new file mode 100644 index 000000000..fd616141c --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/share/SanitizeShareUrlsPatch.kt @@ -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() + ref?.name == "LIZ" && ref.definingClass.startsWith("LX/") + } + + val moveResultIndex = indexOfFirstInstructionOrThrow(invokeIndex, Opcode.MOVE_RESULT_OBJECT) + val urlRegister = getInstruction(moveResultIndex).registerA + + // Resolve Observable wrapper classes at runtime + val observableWrapperIndex = indexOfFirstInstructionOrThrow(Opcode.NEW_INSTANCE) + val observableWrapperClass = getInstruction(observableWrapperIndex) + .reference.toString() + + val observableFactoryIndex = indexOfFirstInstructionOrThrow { + val ref = getReference() + ref?.name == "LJ" && ref.definingClass.startsWith("LX/") + } + val observableFactoryRef = getInstruction(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->(Ljava/lang/String;)V + invoke-static { v$wrapperRegister }, $observableFactoryClass->LJ($observableInterfaceType)$observableReturnType + move-result-object v$urlRegister + return-object v$urlRegister + + :skip_sanitization + nop + """ + ) + } + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt index 26a10aacf..a7b33cd48 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt @@ -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 = - 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) + } + } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/spoof/SpoofVideoStreamsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/spoof/SpoofVideoStreamsPatch.kt index 2192f8016..28cf55bd4 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/spoof/SpoofVideoStreamsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/spoof/SpoofVideoStreamsPatch.kt @@ -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"), ) ) diff --git a/patches/src/main/resources/addresources/values-af-rZA/strings.xml b/patches/src/main/resources/addresources/values-af-rZA/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-af-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-af-rZA/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-am-rET/strings.xml b/patches/src/main/resources/addresources/values-am-rET/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-am-rET/strings.xml +++ b/patches/src/main/resources/addresources/values-am-rET/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-ar-rSA/strings.xml b/patches/src/main/resources/addresources/values-ar-rSA/strings.xml index 0c50680e1..a56d4fcfa 100644 --- a/patches/src/main/resources/addresources/values-ar-rSA/strings.xml +++ b/patches/src/main/resources/addresources/values-ar-rSA/strings.xml @@ -1,5 +1,5 @@ - + - لتحديد لغة صوتية معينة، قم بإيقاف تشغيل \'فرض لغة الصوت الأصلية\' - اختيار لغة البث غير متاح مع Android Studio diff --git a/patches/src/main/resources/addresources/values-as-rIN/strings.xml b/patches/src/main/resources/addresources/values-as-rIN/strings.xml index 4f1e6a7a1..efed7ec2d 100644 --- a/patches/src/main/resources/addresources/values-as-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-as-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml index adf2063f5..5b8058b40 100644 --- a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml +++ b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml @@ -1,5 +1,5 @@ - + - Xüsusi səs dilini seçmək üçün \"Orijinal səs dilini zorlanı\" qapat - Yayım dili seçimi Android Studio ilə əlçatmazdır diff --git a/patches/src/main/resources/addresources/values-be-rBY/strings.xml b/patches/src/main/resources/addresources/values-be-rBY/strings.xml index 39e9966c7..ccbe93cb6 100644 --- a/patches/src/main/resources/addresources/values-be-rBY/strings.xml +++ b/patches/src/main/resources/addresources/values-be-rBY/strings.xml @@ -1,5 +1,5 @@ - + - Каб выбраць пэўную мову аўдыё, адключыце \'Прымусовая арыгінальная мова аўдыё\' - Выбар мовы трансляцыі недаступны ў Android Studio diff --git a/patches/src/main/resources/addresources/values-bg-rBG/strings.xml b/patches/src/main/resources/addresources/values-bg-rBG/strings.xml index 49826e283..6b5f61c3b 100644 --- a/patches/src/main/resources/addresources/values-bg-rBG/strings.xml +++ b/patches/src/main/resources/addresources/values-bg-rBG/strings.xml @@ -1,5 +1,5 @@ - + - За да изберете конкретен аудио език, изключете \'Принудително оригинален аудио език\' - Изборът на език на потока не е наличен с Android Studio diff --git a/patches/src/main/resources/addresources/values-bn-rBD/strings.xml b/patches/src/main/resources/addresources/values-bn-rBD/strings.xml index 6a4d757a6..0f017c3ce 100644 --- a/patches/src/main/resources/addresources/values-bn-rBD/strings.xml +++ b/patches/src/main/resources/addresources/values-bn-rBD/strings.xml @@ -1,5 +1,5 @@ - + - একটি নির্দিষ্ট অডিও ভাষা নির্বাচন করতে, \'মূল অডিও ভাষা জোর করে চালু রাখুন\' বন্ধ করুন - অ্যান্ড্রয়েড স্টুডিও সহ স্ট্রিম ভাষার নির্বাচন উপলব্ধ নেই diff --git a/patches/src/main/resources/addresources/values-bs-rBA/strings.xml b/patches/src/main/resources/addresources/values-bs-rBA/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-bs-rBA/strings.xml +++ b/patches/src/main/resources/addresources/values-bs-rBA/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-ca-rES/strings.xml b/patches/src/main/resources/addresources/values-ca-rES/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-ca-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-ca-rES/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml index dfd9497ea..c4fc334a8 100644 --- a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml +++ b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml @@ -1,5 +1,5 @@ - + - Chcete-li vybrat konkrétní zvukový jazyk, vypněte „Vynutit původní zvukový jazyk“ - Volba jazyka streamu není k dispozici s Android Studiem diff --git a/patches/src/main/resources/addresources/values-da-rDK/strings.xml b/patches/src/main/resources/addresources/values-da-rDK/strings.xml index 2b2d63169..a6fa45cb8 100644 --- a/patches/src/main/resources/addresources/values-da-rDK/strings.xml +++ b/patches/src/main/resources/addresources/values-da-rDK/strings.xml @@ -1,5 +1,5 @@ - + - For at vælge et specifikt lydsprog, slå \'Gennemtving originalt lydsprog\' fra - Valg af streaming-sprog er ikke tilgængeligt med Android Studio diff --git a/patches/src/main/resources/addresources/values-de-rDE/strings.xml b/patches/src/main/resources/addresources/values-de-rDE/strings.xml index 280ea35c3..9c0fe3cc3 100644 --- a/patches/src/main/resources/addresources/values-de-rDE/strings.xml +++ b/patches/src/main/resources/addresources/values-de-rDE/strings.xml @@ -1,5 +1,5 @@ - + - Um eine bestimmte Audiosprache auszuwählen, deaktivieren Sie „Original-Audiosprache erzwingen“ - Die Auswahl der Stream-Sprache ist mit Android Studio nicht verfügbar. diff --git a/patches/src/main/resources/addresources/values-el-rGR/strings.xml b/patches/src/main/resources/addresources/values-el-rGR/strings.xml index 952f94146..37ddafdf3 100644 --- a/patches/src/main/resources/addresources/values-el-rGR/strings.xml +++ b/patches/src/main/resources/addresources/values-el-rGR/strings.xml @@ -1,5 +1,5 @@ - + - Για να επιλέξετε μια συγκεκριμένη γλώσσα ήχου, απενεργοποιήστε το «Εξαναγκασμός αρχικής γλώσσας ήχου» - Η επιλογή γλώσσας ροής δεν είναι διαθέσιμη με το Android Studio diff --git a/patches/src/main/resources/addresources/values-es-rES/strings.xml b/patches/src/main/resources/addresources/values-es-rES/strings.xml index 535ae0622..4d47100b4 100644 --- a/patches/src/main/resources/addresources/values-es-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-es-rES/strings.xml @@ -1,5 +1,5 @@ - + - Para seleccionar un idioma de audio específico, desactiva \"Forzar idioma de audio original\" - La selección de idioma de transmisión no está disponible con Android Studio diff --git a/patches/src/main/resources/addresources/values-et-rEE/strings.xml b/patches/src/main/resources/addresources/values-et-rEE/strings.xml index 22185a399..e386c7fb7 100644 --- a/patches/src/main/resources/addresources/values-et-rEE/strings.xml +++ b/patches/src/main/resources/addresources/values-et-rEE/strings.xml @@ -1,5 +1,5 @@ - + - Konkreetse helikeele valimiseks lülita välja \"Sunni algne helikeel\" - Voogedastuse keelevalik ei ole Android Studioga saadaval diff --git a/patches/src/main/resources/addresources/values-eu-rES/strings.xml b/patches/src/main/resources/addresources/values-eu-rES/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-eu-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-eu-rES/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-fa-rIR/strings.xml b/patches/src/main/resources/addresources/values-fa-rIR/strings.xml index 0801f705b..8a9c424a7 100644 --- a/patches/src/main/resources/addresources/values-fa-rIR/strings.xml +++ b/patches/src/main/resources/addresources/values-fa-rIR/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml index 4662ae628..b0ac3fdbb 100644 --- a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml +++ b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml @@ -1,5 +1,5 @@ - + - Valitaksesi tietyn äänen kielen, poista \"Pakota alkuperäinen äänen kieli\" käytöstä - Striimin kielivalinta ei ole käytettävissä Android Studion kanssa diff --git a/patches/src/main/resources/addresources/values-fil-rPH/strings.xml b/patches/src/main/resources/addresources/values-fil-rPH/strings.xml index 4c4bef93e..9f8b3dd81 100644 --- a/patches/src/main/resources/addresources/values-fil-rPH/strings.xml +++ b/patches/src/main/resources/addresources/values-fil-rPH/strings.xml @@ -1,5 +1,5 @@ - + - Upang pumili ng isang partikular na wika ng audio, i-off ang \'Puwersahin ang orihinal na wika ng audio\' - Hindi available ang pagpili ng wika ng stream sa Android Studio diff --git a/patches/src/main/resources/addresources/values-fr-rFR/strings.xml b/patches/src/main/resources/addresources/values-fr-rFR/strings.xml index 5469dd10c..2cb49e62f 100644 --- a/patches/src/main/resources/addresources/values-fr-rFR/strings.xml +++ b/patches/src/main/resources/addresources/values-fr-rFR/strings.xml @@ -1,5 +1,5 @@ - + - Pour sélectionner une langue audio spécifique, désactivez \"Forcer la langue audio d\'origine\" - La sélection de la langue du flux n\'est pas disponible avec Android Studio diff --git a/patches/src/main/resources/addresources/values-ga-rIE/strings.xml b/patches/src/main/resources/addresources/values-ga-rIE/strings.xml index ff9a063ad..1ce439b48 100644 --- a/patches/src/main/resources/addresources/values-ga-rIE/strings.xml +++ b/patches/src/main/resources/addresources/values-ga-rIE/strings.xml @@ -1,5 +1,5 @@ - + - Chun teanga fuaime ar leith a roghnú, múch \'Fórsaigh teanga fuaime bhunaidh\' - Níl roghnú theanga an tsrutha ar fáil le Android Studio diff --git a/patches/src/main/resources/addresources/values-gl-rES/strings.xml b/patches/src/main/resources/addresources/values-gl-rES/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-gl-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-gl-rES/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-gu-rIN/strings.xml b/patches/src/main/resources/addresources/values-gu-rIN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-gu-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-gu-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-hi-rIN/strings.xml b/patches/src/main/resources/addresources/values-hi-rIN/strings.xml index 7e56c695e..3b5672382 100644 --- a/patches/src/main/resources/addresources/values-hi-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-hi-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-hr-rHR/strings.xml b/patches/src/main/resources/addresources/values-hr-rHR/strings.xml index 5b8e7e12a..09bfdb4ae 100644 --- a/patches/src/main/resources/addresources/values-hr-rHR/strings.xml +++ b/patches/src/main/resources/addresources/values-hr-rHR/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml index 8be320b4c..0c7c86f34 100644 --- a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml +++ b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml @@ -1,5 +1,5 @@ - + - Egy adott hangsáv nyelv kiválasztásához kapcsold ki az \"Eredeti hangsáv nyelv kikényszerítése\" opciót - Az Android Studio-val nem érhető el a stream nyelvének kiválasztása diff --git a/patches/src/main/resources/addresources/values-hy-rAM/strings.xml b/patches/src/main/resources/addresources/values-hy-rAM/strings.xml index 5848a7adc..48e7e22e7 100644 --- a/patches/src/main/resources/addresources/values-hy-rAM/strings.xml +++ b/patches/src/main/resources/addresources/values-hy-rAM/strings.xml @@ -1,5 +1,5 @@ - + - Որոշակի ձայնային լեզու ընտրելու համար անջատեք \'Պարտադրել բնօրինակ ձայնային լեզուն\' - Հոսքի լեզվի ընտրությունը հասանելի չէ Android Studio-ի հետ diff --git a/patches/src/main/resources/addresources/values-in-rID/strings.xml b/patches/src/main/resources/addresources/values-in-rID/strings.xml index 4e0ee5ec0..1bc00ca0b 100644 --- a/patches/src/main/resources/addresources/values-in-rID/strings.xml +++ b/patches/src/main/resources/addresources/values-in-rID/strings.xml @@ -1,5 +1,5 @@ - + - Untuk memilih bahasa audio tertentu, matikan \'Paksa bahasa audio asli\' - Pilihan bahasa streaming tidak tersedia dengan Android Studio diff --git a/patches/src/main/resources/addresources/values-is-rIS/strings.xml b/patches/src/main/resources/addresources/values-is-rIS/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-is-rIS/strings.xml +++ b/patches/src/main/resources/addresources/values-is-rIS/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-it-rIT/strings.xml b/patches/src/main/resources/addresources/values-it-rIT/strings.xml index d94d160be..ee8bf8d7d 100644 --- a/patches/src/main/resources/addresources/values-it-rIT/strings.xml +++ b/patches/src/main/resources/addresources/values-it-rIT/strings.xml @@ -1,5 +1,5 @@ - + - Per selezionare una lingua audio specifica, disattiva \'Forza lingua audio originale\' - La selezione della lingua dello stream non è disponibile con Android Studio diff --git a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml index c438e9573..3e91971a8 100644 --- a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml +++ b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml @@ -1,5 +1,5 @@ - + - כדי לבחור שפת שמע ספציפית, כבה את \'אכוף שפת שמע מקורית\' - בחירת שפת הזרם אינה זמינה עם אנדרואיד סטודיו diff --git a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml index a354c8430..e4181b89e 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -1,5 +1,5 @@ - + %1$s ~ %2$s - セグメントのカテゴリーを選択してください - カテゴリーが設定で無効になっています。送信するには、このカテゴリーを有効にしてください。 - 新しいセグメント + セグメントのカテゴリを選択してください + カテゴリが「無効」に設定されています。送信するには、設定を変更してください。 + 新しいセグメント %s を新しいセグメント (SponsorBlock) の開始位置 / 終了位置に設定しますか? 開始位置 終了位置 @@ -1641,10 +1641,6 @@ AV1 での動画再生は、カクつくまたはコマ落ちが発生する場 統計情報にクライアントを表示 統計情報には現在のクライアントが表示されます 統計情報には現在のクライアントは表示されません - 音声ストリームの言語 - - 特定の音声言語を選択するには、「オリジナルの音声を強制的に使用」を無効にしてください - Android Studio では、ストリームの言語を選択できません diff --git a/patches/src/main/resources/addresources/values-ka-rGE/strings.xml b/patches/src/main/resources/addresources/values-ka-rGE/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-ka-rGE/strings.xml +++ b/patches/src/main/resources/addresources/values-ka-rGE/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml b/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml +++ b/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-km-rKH/strings.xml b/patches/src/main/resources/addresources/values-km-rKH/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-km-rKH/strings.xml +++ b/patches/src/main/resources/addresources/values-km-rKH/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-kn-rIN/strings.xml b/patches/src/main/resources/addresources/values-kn-rIN/strings.xml index a521cc779..5ab077fb1 100644 --- a/patches/src/main/resources/addresources/values-kn-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-kn-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml index 5817517b5..dbff33c9b 100644 --- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml +++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml @@ -1,5 +1,5 @@ - + @@ -1646,10 +1646,6 @@ AV1이 사용된 동영상 재생이 끊기거나 프레임이 손실될 수 있 전문 통계에서 표시하기 동영상 스트림을 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시됩니다 동영상 스트림을 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시되지 않습니다 - 오디오 스트림 언어 - - 특정 오디오 언어를 선택하려면, \'원본 오디오 언어 강제로 활성화하기\'를 끄세요 - Android Studio에서는 스트림 언어를 선택할 수 없습니다 diff --git a/patches/src/main/resources/addresources/values-ky-rKG/strings.xml b/patches/src/main/resources/addresources/values-ky-rKG/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-ky-rKG/strings.xml +++ b/patches/src/main/resources/addresources/values-ky-rKG/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-lo-rLA/strings.xml b/patches/src/main/resources/addresources/values-lo-rLA/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-lo-rLA/strings.xml +++ b/patches/src/main/resources/addresources/values-lo-rLA/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml index 28c776da1..5ffd71a7e 100644 --- a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml +++ b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml @@ -1,5 +1,5 @@ - + - Norėdami pasirinkti konkrečią garso kalbą, išjunkite „Priverstinė originali garso kalba“. - Transliacijos kalbos pasirinkimas nepasiekiamas naudojant „Android Studio“ diff --git a/patches/src/main/resources/addresources/values-lv-rLV/strings.xml b/patches/src/main/resources/addresources/values-lv-rLV/strings.xml index 7ad9984aa..4a7659730 100644 --- a/patches/src/main/resources/addresources/values-lv-rLV/strings.xml +++ b/patches/src/main/resources/addresources/values-lv-rLV/strings.xml @@ -1,5 +1,5 @@ - + - Lai atlasītu konkrētu audio valodu, izslēdziet “Piespiest oriģinālo audio valodu” - Straumju valodas izvēle nav pieejama ar Android Studio diff --git a/patches/src/main/resources/addresources/values-mk-rMK/strings.xml b/patches/src/main/resources/addresources/values-mk-rMK/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-mk-rMK/strings.xml +++ b/patches/src/main/resources/addresources/values-mk-rMK/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-ml-rIN/strings.xml b/patches/src/main/resources/addresources/values-ml-rIN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-ml-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ml-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-mn-rMN/strings.xml b/patches/src/main/resources/addresources/values-mn-rMN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-mn-rMN/strings.xml +++ b/patches/src/main/resources/addresources/values-mn-rMN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-mr-rIN/strings.xml b/patches/src/main/resources/addresources/values-mr-rIN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-mr-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-mr-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-ms-rMY/strings.xml b/patches/src/main/resources/addresources/values-ms-rMY/strings.xml index 622dd054e..33f272c20 100644 --- a/patches/src/main/resources/addresources/values-ms-rMY/strings.xml +++ b/patches/src/main/resources/addresources/values-ms-rMY/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-my-rMM/strings.xml b/patches/src/main/resources/addresources/values-my-rMM/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-my-rMM/strings.xml +++ b/patches/src/main/resources/addresources/values-my-rMM/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-nb-rNO/strings.xml b/patches/src/main/resources/addresources/values-nb-rNO/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-nb-rNO/strings.xml +++ b/patches/src/main/resources/addresources/values-nb-rNO/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-ne-rIN/strings.xml b/patches/src/main/resources/addresources/values-ne-rIN/strings.xml index d1b6ab9cd..88ee8597b 100644 --- a/patches/src/main/resources/addresources/values-ne-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ne-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml index b4d451dc2..2a670f151 100644 --- a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml +++ b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml @@ -1,5 +1,5 @@ - + - Om een specifieke audiotaal te selecteren, schakel \"Oorspronkelijke audiotaal forceren\" uit - Streamtaalselectie is niet beschikbaar met Android Studio diff --git a/patches/src/main/resources/addresources/values-or-rIN/strings.xml b/patches/src/main/resources/addresources/values-or-rIN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-or-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-or-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-pa-rIN/strings.xml b/patches/src/main/resources/addresources/values-pa-rIN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-pa-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-pa-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml index 345a5f981..e40203383 100644 --- a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml +++ b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml @@ -1,5 +1,5 @@ - + - Aby wybrać konkretny język audio, wyłącz \"Wymuś oryginalny język audio\" - Wybór języka strumienia nie jest dostępny w przypadku Android Studio diff --git a/patches/src/main/resources/addresources/values-pt-rBR/strings.xml b/patches/src/main/resources/addresources/values-pt-rBR/strings.xml index 8c8ed0479..9863849e8 100644 --- a/patches/src/main/resources/addresources/values-pt-rBR/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rBR/strings.xml @@ -1,5 +1,5 @@ - + - Para selecionar um idioma de áudio específico, desative \"Forçar idioma de áudio original\" - A seleção de idioma do stream não está disponível com o Android Studio diff --git a/patches/src/main/resources/addresources/values-pt-rPT/strings.xml b/patches/src/main/resources/addresources/values-pt-rPT/strings.xml index faa9de5b0..fcec5b2d9 100644 --- a/patches/src/main/resources/addresources/values-pt-rPT/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rPT/strings.xml @@ -1,5 +1,5 @@ - + - Para selecionar um idioma de áudio específico, desative \'Forçar idioma de áudio original\' - A seleção do idioma do stream não está disponível com o Android Studio diff --git a/patches/src/main/resources/addresources/values-ro-rRO/strings.xml b/patches/src/main/resources/addresources/values-ro-rRO/strings.xml index 60c5f3436..e82a90a0f 100644 --- a/patches/src/main/resources/addresources/values-ro-rRO/strings.xml +++ b/patches/src/main/resources/addresources/values-ro-rRO/strings.xml @@ -1,5 +1,5 @@ - + - Pentru a selecta o limbă audio specifică, dezactivați „Forțează limba audio originală” - Selecția limbii fluxului nu este disponibilă cu Android Studio diff --git a/patches/src/main/resources/addresources/values-ru-rRU/strings.xml b/patches/src/main/resources/addresources/values-ru-rRU/strings.xml index 95bf138cc..7d3e8c966 100644 --- a/patches/src/main/resources/addresources/values-ru-rRU/strings.xml +++ b/patches/src/main/resources/addresources/values-ru-rRU/strings.xml @@ -1,5 +1,5 @@ - + - Скрыть кнопку \"Стать спонсором\" + Скрыть кнопку \"Подписаться\" Кнопка \"Подписаться\" скрыта Кнопка \"Подписаться\" показана Скрыть медицинские панели @@ -360,22 +360,22 @@ Second \"item\" text" Скрыть или показать компоненты страницы канала Скрыть секцию \"Для вас\" - Секция \"Для вас\" скрыта - Секция \"Для вас\" показана + Секция \"Для вас\" на странице канала скрыта + Секция \"Для вас\" на странице канала показана Скрыть предпросмотр ссылок - Предпросмотр ссылок скрыт - Предпросмотр ссылок показан + Предпросмотр ссылок на странице канала скрыт + Предпросмотр ссылок на странице канала показан Скрыть секцию участников - Секция участников скрыта - Секция участников показана + Секция участников на странице канала скрыта + Секция участников на странице канала показана Скрыть кнопку \"Посетить сообщество\" - Кнопка \"Посетить сообщество\" скрыта - Кнопка \"Перейти в сообщество\" показана + Кнопка \"Посетить сообщество\" на странице канала скрыта + Кнопка \"Посетить сообщество\" на странице канала показана - Скрыть кнопку \"Посетить магазин\" - Кнопка \"Перейти в магазин\" скрыта - Кнопка \"Перейти в магазин\" показана + Скрыть кнопку \"Перейти в магазин\" + Кнопка \"Перейти в магазин\" на странице канала скрыта + Кнопка \"Перейти в магазин\" на странице канала показана Комментарии Скрыть или показать компоненты раздела комментариев Скрыть секцию ИИ сводки чата @@ -469,11 +469,11 @@ Second \"item\" text" Скрыть секцию магазина автора - Секция магазина автора под видеоплеером скрыта - Секция магазина автора под видеоплеером показана + Секция магазина автора под плеером скрыта + Секция магазина автора под плеером показана Скрыть баннер магазина - Баннер магазина на конечном экране скрыт - Баннер магазина на конечном экране показан + Баннер магазина в конце просмотра скрыт + Баннер магазина в конце просмотра показан Скрыть полноэкранную рекламу "Полноэкранная реклама при запуске приложения скрыта @@ -793,8 +793,8 @@ Second \"item\" text" Пункт \"Смотреть в VR-режиме\" в выдвижном меню плеера скрыт Пункт \"Смотреть в VR-режиме\" в выдвижном меню плеера показан Скрыть меню качества видео - Меню качества видео скрыто - Меню качества видео показано + Меню качества видео в выдвижном меню плеера скрыто + Меню качества видео в выдвижном меню плеера показано Скрыть колонтитул меню качества видео Нижний колонтитул старого меню качества видео в выдвижном меню плеера скрыт Нижний колонтитул старого меню качества видео в выдвижном меню плеера показан @@ -838,7 +838,7 @@ Second \"item\" text" Анимированные счетчики просмотров, лайков и дизлайков включены - Скрыть полосу прогресса видеоплеера + Скрыть полосу прогресса плеера Полоса прогресса в плеере скрыта Полоса прогресса в плеере показана @@ -1086,13 +1086,13 @@ Second \"item\" text" Автоскрытие кнопки пропуска Кнопка пропуска автоматически скрывается через несколько секунд Кнопка пропуска показывается для всего сегмента - Длительность кнопки пропуска + Длительность показа кнопки пропуска Длительность показа кнопок пропуска и перехода к основному моменту до автоматического скрытия Показывать уведомление отмены пропуска Всплывающее уведомление показано при автоматическом пропуске сегмента. Нажмите на всплывающее уведомление для отмены пропуска Всплывающее уведомление скрыто Длительность всплывающего уведомления при пропуске - Как долго показывать всплывающее сообщение об отмене пропуска + Длительность показа всплывающего сообщения об отмене пропуска 1 секунда 2 секунды 3 секунды @@ -1538,7 +1538,7 @@ Second \"item\" text" Перенаправления URL-адресов (youtube.com/redirect) не обходятся и исходные URL-адреса не открываются напрямую - Открыть ссылки в браузере + Открывать ссылки в браузере Ссылки открываются во внешнем браузере Ссылки открываются во встроенном браузере @@ -1646,10 +1646,6 @@ Second \"item\" text" Показать в \"Статистике для сисадминов\" Тип клиента в \"Статистике для сисадминов\" показан Тип клиента в \"Статистике для сисадминов\" скрыт - Язык аудиопотока - - Для выбора определенного языка аудио отключите \"Принудительный язык оригинального аудио\" - Выбор языка трансляции недоступен с Android Studio diff --git a/patches/src/main/resources/addresources/values-si-rLK/strings.xml b/patches/src/main/resources/addresources/values-si-rLK/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-si-rLK/strings.xml +++ b/patches/src/main/resources/addresources/values-si-rLK/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml index e70a0a320..75fac144d 100644 --- a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml +++ b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml @@ -1,5 +1,5 @@ - + - Ak chcete vybrať konkrétny jazyk zvuku, vypnite „Vynútiť pôvodný jazyk zvuku“ - Výber jazyka streamu nie je k dispozícii v aplikácii Android Studio diff --git a/patches/src/main/resources/addresources/values-sl-rSI/strings.xml b/patches/src/main/resources/addresources/values-sl-rSI/strings.xml index b25d91f0a..15ab10f19 100644 --- a/patches/src/main/resources/addresources/values-sl-rSI/strings.xml +++ b/patches/src/main/resources/addresources/values-sl-rSI/strings.xml @@ -1,5 +1,5 @@ - + - Za izbiro določenega zvočnega jezika izklopite \'Vsili izvirni zvočni jezik\' - Izbira jezika pretakanja ni na voljo z Android Studio diff --git a/patches/src/main/resources/addresources/values-sq-rAL/strings.xml b/patches/src/main/resources/addresources/values-sq-rAL/strings.xml index c4cd34604..8405fa310 100644 --- a/patches/src/main/resources/addresources/values-sq-rAL/strings.xml +++ b/patches/src/main/resources/addresources/values-sq-rAL/strings.xml @@ -1,5 +1,5 @@ - + - Për të zgjedhur një gjuhë specifike audio, çaktivizoni \"Detyro gjuhën origjinale audio\" - Zgjedhja e gjuhës së transmetimit nuk është e disponueshme me Android Studio diff --git a/patches/src/main/resources/addresources/values-sr-rCS/strings.xml b/patches/src/main/resources/addresources/values-sr-rCS/strings.xml index 8cd9b4256..0e11eda6d 100644 --- a/patches/src/main/resources/addresources/values-sr-rCS/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rCS/strings.xml @@ -1,5 +1,5 @@ - + - Da biste izabrali određeni jezik zvuka, isključite opciju „Prisili originalni jezik zvuka” - Izbor jezika strima nije dostupan sa Android Studio diff --git a/patches/src/main/resources/addresources/values-sr-rSP/strings.xml b/patches/src/main/resources/addresources/values-sr-rSP/strings.xml index 8a9e2315f..270ac39d4 100644 --- a/patches/src/main/resources/addresources/values-sr-rSP/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rSP/strings.xml @@ -1,5 +1,5 @@ - + - Да бисте изабрали одређени језик звука, искључите опцију „Присили оригинални језик звука” - Избор језика стрима није доступан са Android Studio diff --git a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml index a5b569f03..bfc9a6a73 100644 --- a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml +++ b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml @@ -1,5 +1,5 @@ - + - Om du vill välja ett specifikt ljudspråk inaktiverar du \"Tvinga ursprungligt ljudspråk\" - Val av strömspråk är inte tillgängligt med Android Studio diff --git a/patches/src/main/resources/addresources/values-sw-rKE/strings.xml b/patches/src/main/resources/addresources/values-sw-rKE/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-sw-rKE/strings.xml +++ b/patches/src/main/resources/addresources/values-sw-rKE/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-ta-rIN/strings.xml b/patches/src/main/resources/addresources/values-ta-rIN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-ta-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ta-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-te-rIN/strings.xml b/patches/src/main/resources/addresources/values-te-rIN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-te-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-te-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-th-rTH/strings.xml b/patches/src/main/resources/addresources/values-th-rTH/strings.xml index f3e4ffa53..ae5398aeb 100644 --- a/patches/src/main/resources/addresources/values-th-rTH/strings.xml +++ b/patches/src/main/resources/addresources/values-th-rTH/strings.xml @@ -1,5 +1,5 @@ - + - หากต้องการเลือกภาษาเสียงที่ต้องการ ให้ปิด \'บังคับใช้ภาษาเสียงต้นฉบับ\' - การเลือกภาษาของสตรีมไม่พร้อมใช้งานกับ Android Studio diff --git a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml index 43a2fc154..c1f0959cf 100644 --- a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml +++ b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml @@ -1,5 +1,5 @@ - + - Belirli bir ses dilini seçmek için \'Orijinal ses dilini zorla\' seçeneğini kapatın - Akış dili seçimi Android Studio ile kullanılamıyor diff --git a/patches/src/main/resources/addresources/values-uk-rUA/strings.xml b/patches/src/main/resources/addresources/values-uk-rUA/strings.xml index ee1b3c400..e6467b9dd 100644 --- a/patches/src/main/resources/addresources/values-uk-rUA/strings.xml +++ b/patches/src/main/resources/addresources/values-uk-rUA/strings.xml @@ -1,5 +1,5 @@ - + - Щоб вибрати певну звукову доріжку, вимкніть \"Примусово оригінальна мова звукової доріжки\" - Вибір мови звукової доріжки недоступний з клієнтом Android Studio diff --git a/patches/src/main/resources/addresources/values-ur-rIN/strings.xml b/patches/src/main/resources/addresources/values-ur-rIN/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-ur-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ur-rIN/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml b/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml +++ b/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml index 35f29f3a5..7664e581b 100644 --- a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml +++ b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml @@ -1,5 +1,5 @@ - + - Để chọn ngôn ngữ âm thanh cụ thể, hãy tắt \'Buộc ngôn ngữ âm thanh gốc\' - Chọn ngôn ngữ luồng không khả dụng với Android Studio diff --git a/patches/src/main/resources/addresources/values-zh-rCN/strings.xml b/patches/src/main/resources/addresources/values-zh-rCN/strings.xml index 6d09a78da..a261aa031 100644 --- a/patches/src/main/resources/addresources/values-zh-rCN/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rCN/strings.xml @@ -1,5 +1,5 @@ - + - 要选择特定的音频语言,请关闭“强制原始音频语言” - Android Studio 不支持选择流语言 diff --git a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml index 0f5329d36..956129a17 100644 --- a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml @@ -1,5 +1,5 @@ - + - 若要選擇特定的音訊語言,請關閉「強制使用原始音訊語言」 - 無法使用 Android Studio 選擇串流語言 diff --git a/patches/src/main/resources/addresources/values-zu-rZA/strings.xml b/patches/src/main/resources/addresources/values-zu-rZA/strings.xml index 6b81af5f3..5ba0a5e1f 100644 --- a/patches/src/main/resources/addresources/values-zu-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-zu-rZA/strings.xml @@ -1,5 +1,5 @@ - + - diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index 980f0c20c..9b6ce74e7 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -185,10 +185,12 @@ Android VR visionOS + Android No SDK ANDROID_VR_1_43_32 VISIONOS + ANDROID_NO_SDK @@ -227,12 +229,14 @@ Android VR Android Studio + Android No SDK visionOS iPadOS ANDROID_VR_1_43_32 ANDROID_CREATOR + ANDROID_NO_SDK VISIONOS IPADOS @@ -397,8 +401,8 @@ DEFAULT REGULAR PREMIUM - REVANCED - REVANCED_MINIMAL + ROUNDED + MINIMAL @string/revanced_header_logo_entry_1 @@ -412,8 +416,8 @@ DEFAULT REGULAR PREMIUM - REVANCED - REVANCED_MINIMAL + ROUNDED + MINIMAL CUSTOM diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 4b7a00125..d644d34a2 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -1,4 +1,4 @@ - + - To select a specific audio language, turn off \'Force original audio language\' - Stream language selection is not available with Android Studio diff --git a/patches/src/main/resources/branding-license/LICENSE_REVANCED.TXT b/patches/src/main/resources/branding-license/LICENSE_REVANCED.TXT new file mode 100644 index 000000000..c32047dba --- /dev/null +++ b/patches/src/main/resources/branding-license/LICENSE_REVANCED.TXT @@ -0,0 +1,5 @@ +The ReVanced branding found in this software is copyrighted and not covered under the GPL. + +To use or distribute ReVanced branding, you must obtain permission by contacting branding@revanced.app + +For more information see https://github.com/ReVanced/revanced-branding diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_custom_dark.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_custom_dark.png new file mode 100644 index 000000000..8a9dc3177 Binary files /dev/null and b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_custom_dark.png differ diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_custom_light.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_custom_light.png new file mode 100644 index 000000000..64ca9cf9a Binary files /dev/null and b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_custom_light.png differ diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_dark.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_dark.png deleted file mode 100644 index 558fd728d..000000000 Binary files a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_light.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_light.png deleted file mode 100644 index 50c5583d1..000000000 Binary files a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_dark.png deleted file mode 100644 index 2428aee24..000000000 Binary files a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_light.png deleted file mode 100644 index c444e6e0d..000000000 Binary files a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_dark.png b/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_dark.png deleted file mode 100644 index 92c1bd7c6..000000000 Binary files a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_light.png b/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_light.png deleted file mode 100644 index 4c5a74044..000000000 Binary files a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_minimal_dark.png deleted file mode 100644 index 1bf077fb8..000000000 Binary files a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_minimal_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_minimal_light.png deleted file mode 100644 index a94f9918f..000000000 Binary files a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_minimal_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_custom_dark.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_custom_dark.png new file mode 100644 index 000000000..c2ab1e455 Binary files /dev/null and b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_custom_dark.png differ diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_custom_light.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_custom_light.png new file mode 100644 index 000000000..f2eef9a25 Binary files /dev/null and b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_custom_light.png differ diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_dark.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_dark.png deleted file mode 100644 index 09380c6e5..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_light.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_light.png deleted file mode 100644 index 96aa0bffd..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_dark.png deleted file mode 100644 index 438db3316..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_light.png deleted file mode 100644 index 9d4968d0b..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_custom_dark.png b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_custom_dark.png new file mode 100644 index 000000000..1fd39d2fe Binary files /dev/null and b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_custom_dark.png differ diff --git a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_custom_light.png b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_custom_light.png new file mode 100644 index 000000000..9399534b7 Binary files /dev/null and b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_custom_light.png differ diff --git a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_dark.png b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_dark.png deleted file mode 100644 index 20e764314..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_light.png b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_light.png deleted file mode 100644 index f49bc8aa9..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_minimal_dark.png deleted file mode 100644 index 331911070..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_minimal_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_minimal_light.png deleted file mode 100644 index def9f2861..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_minimal_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_custom_dark.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_custom_dark.png new file mode 100644 index 000000000..b9eb10e28 Binary files /dev/null and b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_custom_dark.png differ diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_custom_light.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_custom_light.png new file mode 100644 index 000000000..6c30db7ff Binary files /dev/null and b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_custom_light.png differ diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_dark.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_dark.png deleted file mode 100644 index e8f2deb43..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_light.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_light.png deleted file mode 100644 index 6157ca5ce..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_dark.png deleted file mode 100644 index 81509cfa0..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_dark.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_light.png deleted file mode 100644 index d0c59666d..000000000 Binary files a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_light.png and /dev/null differ diff --git a/patches/src/main/resources/change-header/drawable/revanced_header_minimal_dark.xml b/patches/src/main/resources/change-header/drawable/revanced_header_minimal_dark.xml new file mode 100644 index 000000000..5af74bac1 --- /dev/null +++ b/patches/src/main/resources/change-header/drawable/revanced_header_minimal_dark.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + diff --git a/patches/src/main/resources/change-header/drawable/revanced_header_minimal_light.xml b/patches/src/main/resources/change-header/drawable/revanced_header_minimal_light.xml new file mode 100644 index 000000000..d36de64b2 --- /dev/null +++ b/patches/src/main/resources/change-header/drawable/revanced_header_minimal_light.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + diff --git a/patches/src/main/resources/change-header/drawable/revanced_header_rounded_dark.xml b/patches/src/main/resources/change-header/drawable/revanced_header_rounded_dark.xml new file mode 100644 index 000000000..90c589e63 --- /dev/null +++ b/patches/src/main/resources/change-header/drawable/revanced_header_rounded_dark.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/patches/src/main/resources/change-header/drawable/revanced_header_rounded_light.xml b/patches/src/main/resources/change-header/drawable/revanced_header_rounded_light.xml new file mode 100644 index 000000000..2523e2f6a --- /dev/null +++ b/patches/src/main/resources/change-header/drawable/revanced_header_rounded_light.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +