diff --git a/CHANGELOG.md b/CHANGELOG.md index 069d20a744..059a743699 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 d694891ab0..ab03ba8e4f 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 f0433ccb1a..79d7720965 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 15e90f565e..ade26a30fb 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 c6cf761ca3..ca4a8ff61f 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 9cfa05c1b9..853ced003f 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 3bc16e313c..c1bc849c11 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 cfd79b9725..39076b562d 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 53664881b7..77ef1a663d 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 cfc811d754..31e3f03034 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 60d7983ea0..7383a5582c 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 0000000000..5d09c10c0b --- /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 ed5bcec07b..8d74621192 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 ef8069e855..75374c09e3 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 747a4f048f..0dd82d240a 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 00c3f20071..0000000000 --- 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 bf66edbd4c..86802ee200 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 0ec3154187..009b6c0552 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 1341b5ff85..9c3b806d38 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 efbdaf5979..cc762c1237 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 4f594478dd..e9577477ad 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 234078c2a6..76e03d2c99 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 7668c9dc7d..5a62705515 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 0000000000..629a53e2e8 --- /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 5381131f25..a2b88d7f1c 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 9d13d1e551..c721044cc3 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 b80ceaed06..e6894b521e 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 3b4840a83b..bc6cc2bffe 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 0000000000..836be89006 --- /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 0000000000..fd616141c7 --- /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 26a10aacf2..a7b33cd482 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 2192f80162..28cf55bd4b 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 0c50680e11..a56d4fcfa9 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 4f1e6a7a1c..efed7ec2d3 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 adf2063f51..5b8058b406 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 39e9966c73..ccbe93cb65 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 49826e283f..6b5f61c3b3 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 6a4d757a6b..0f017c3ce7 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 dfd9497ea7..c4fc334a83 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 2b2d631695..a6fa45cb87 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 280ea35c3e..9c0fe3cc38 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 952f94146f..37ddafdf34 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 535ae06227..4d47100b42 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 22185a399c..e386c7fb72 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 6b81af5f39..5ba0a5e1f5 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 0801f705b1..8a9c424a72 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 4662ae6283..b0ac3fdbb9 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 4c4bef93e4..9f8b3dd813 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 5469dd10cf..2cb49e62f6 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 ff9a063ada..1ce439b489 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 7e56c695e9..3b56723827 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 5b8e7e12a4..09bfdb4ae8 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 8be320b4ca..0c7c86f34d 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 5848a7adcc..48e7e22e7c 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 4e0ee5ec00..1bc00ca0ba 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 6b81af5f39..5ba0a5e1f5 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 d94d160be4..ee8bf8d7d0 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 c438e95737..3e91971a80 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 a354c8430e..e4181b89ef 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 a521cc7799..5ab077fb1a 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 5817517b53..dbff33c9b6 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 28c776da16..5ffd71a7e5 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 7ad9984aa5..4a76597304 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 622dd054e3..33f272c200 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 d1b6ab9cd8..88ee8597b2 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 b4d451dc22..2a670f151c 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 345a5f9814..e402033839 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 8c8ed04793..9863849e83 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 faa9de5b08..fcec5b2d96 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 60c5f34365..e82a90a0fe 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 95bf138ccc..7d3e8c9662 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 6b81af5f39..5ba0a5e1f5 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 e70a0a3202..75fac144d4 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 b25d91f0ac..15ab10f195 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 c4cd346049..8405fa3101 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 8cd9b42563..0e11eda6d7 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 8a9e2315f7..270ac39d4c 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 a5b569f036..bfc9a6a735 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 f3e4ffa53b..ae5398aeb4 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 43a2fc1543..c1f0959cf4 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 ee1b3c4000..e6467b9dd4 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 6b81af5f39..5ba0a5e1f5 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 6b81af5f39..5ba0a5e1f5 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 35f29f3a59..7664e581b5 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 6d09a78da2..a261aa031c 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 0f5329d360..956129a17b 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 6b81af5f39..5ba0a5e1f5 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 980f0c20c5..9b6ce74e79 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 4b7a00125e..d644d34a2b 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 0000000000..c32047dbac --- /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 0000000000..8a9dc3177f 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 0000000000..64ca9cf9a2 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 558fd728de..0000000000 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 50c5583d13..0000000000 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 2428aee24f..0000000000 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 c444e6e0da..0000000000 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 92c1bd7c61..0000000000 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 4c5a740440..0000000000 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 1bf077fb89..0000000000 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 a94f9918f6..0000000000 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 0000000000..c2ab1e4554 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 0000000000..f2eef9a25c 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 09380c6e59..0000000000 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 96aa0bffdb..0000000000 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 438db33167..0000000000 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 9d4968d0b6..0000000000 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 0000000000..1fd39d2fe5 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 0000000000..9399534b74 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 20e764314b..0000000000 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 f49bc8aa9a..0000000000 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 331911070a..0000000000 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 def9f28615..0000000000 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 0000000000..b9eb10e28d 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 0000000000..6c30db7ff5 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 e8f2deb436..0000000000 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 6157ca5cee..0000000000 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 81509cfa02..0000000000 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 d0c59666d1..0000000000 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 0000000000..5af74bac1f --- /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 0000000000..d36de64b29 --- /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 0000000000..90c589e635 --- /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 0000000000..2523e2f6ac --- /dev/null +++ b/patches/src/main/resources/change-header/drawable/revanced_header_rounded_light.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +