diff --git a/CHANGELOG.md b/CHANGELOG.md index 3798d9033..c388663f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,38 @@ +# [5.9.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.9.0-dev.3...v5.9.0-dev.4) (2025-01-20) + + +### Bug Fixes + +* **YouTube - Spoof video streams:** Update client user-agent ([#4304](https://github.com/ReVanced/revanced-patches/issues/4304)) ([7917871](https://github.com/ReVanced/revanced-patches/commit/7917871f510b6b805370ef98a0cf8a4e2df0e900)) + +# [5.9.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.9.0-dev.2...v5.9.0-dev.3) (2025-01-19) + + +### Features + +* **YouTube - Settings:** Add option to use new Cairo settings menus ([#4305](https://github.com/ReVanced/revanced-patches/issues/4305)) ([7b8a2a2](https://github.com/ReVanced/revanced-patches/commit/7b8a2a2721ab5351f8c0251401aceddf0c5327df)) + +# [5.9.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.9.0-dev.1...v5.9.0-dev.2) (2025-01-18) + + +### Features + +* **YouTube - Playback speed:** Add option to change 2x tap and hold speed ([#4307](https://github.com/ReVanced/revanced-patches/issues/4307)) ([02fb26e](https://github.com/ReVanced/revanced-patches/commit/02fb26e9458fb8635d497e6e78f964055244d738)) + +# [5.9.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.8.2-dev.1...v5.9.0-dev.1) (2025-01-17) + + +### Features + +* **YouTube - Hide feed components:** Handle new type of surveys ([#4295](https://github.com/ReVanced/revanced-patches/issues/4295)) ([c770e03](https://github.com/ReVanced/revanced-patches/commit/c770e03f3801367cb531af860fbdfa43dca89af0)) + +## [5.8.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.8.1...v5.8.2-dev.1) (2025-01-09) + + +### Bug Fixes + +* **YouTube - Spoof video streams:** Resolve playback issues after changing from cellular to wifi ([#4277](https://github.com/ReVanced/revanced-patches/issues/4277)) ([e93e1c8](https://github.com/ReVanced/revanced-patches/commit/e93e1c8ec3367e941034e9c4e3725ec1db429a60)) + ## [5.8.1](https://github.com/ReVanced/revanced-patches/compare/v5.8.0...v5.8.1) (2025-01-07) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java index 037744c7e..bc18772de 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java @@ -722,8 +722,8 @@ public class Utils { Preference preference = group.getPreference(i); final Sort preferenceSort; - if (preference instanceof PreferenceGroup) { - sortPreferenceGroups((PreferenceGroup) preference); + if (preference instanceof PreferenceGroup subGroup) { + sortPreferenceGroups(subGroup); preferenceSort = groupSort; // Sort value for groups is for it's content, not itself. } else { // Allow individual preferences to set a key sorting. 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 2a1e4868e..daf555068 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 @@ -4,6 +4,10 @@ import android.os.Build; import androidx.annotation.Nullable; +import java.util.Locale; +import java.util.Objects; + +import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.settings.BaseSettings; public enum ClientType { @@ -11,13 +15,17 @@ public enum ClientType { ANDROID_VR_NO_AUTH( 28, "ANDROID_VR", + "com.google.android.apps.youtube.vr.oculus", "Oculus", "Quest 3", "Android", "12", - "com.google.android.apps.youtube.vr.oculus/1.56.21 (Linux; U; Android 12; GB) gzip", - "32", // Android 12.1 - "1.56.21", + // Android 12.1 + "32", + "SQ3A.220605.009.A1", + "132.0.6808.3", + "1.61.48", + false, false, "Android VR No auth" ), @@ -26,69 +34,84 @@ public enum ClientType { ANDROID_UNPLUGGED( 29, "ANDROID_UNPLUGGED", + "com.google.android.apps.youtube.unplugged", "Google", "Google TV Streamer", "Android", "14", - "com.google.android.apps.youtube.unplugged/8.49.0 (Linux; U; Android 14; GB) gzip", "34", + "UTT3.240625.001.K5", + "132.0.6808.3", "8.49.0", true, + true, "Android TV" ), + // Cannot play livestreams and lacks HDR, but can play videos with music and labeled "for children". + // Google Pixel 9 Pro Fold + // https://dumps.tadiphone.dev/dumps/google/barbet + ANDROID_CREATOR( + 14, + "ANDROID_CREATOR", + "com.google.android.apps.youtube.creator", + "Google", + "Pixel 9 Pro Fold", + "Android", + "15", + "35", + "AP3A.241005.015.A2", + "132.0.6779.0", + "23.47.101", + true, + true, + "Android Creator" + ), ANDROID_VR( ANDROID_VR_NO_AUTH.id, ANDROID_VR_NO_AUTH.clientName, + ANDROID_VR_NO_AUTH.packageName, ANDROID_VR_NO_AUTH.deviceMake, ANDROID_VR_NO_AUTH.deviceModel, ANDROID_VR_NO_AUTH.osName, ANDROID_VR_NO_AUTH.osVersion, - ANDROID_VR_NO_AUTH.userAgent, ANDROID_VR_NO_AUTH.androidSdkVersion, + ANDROID_VR_NO_AUTH.buildId, + ANDROID_VR_NO_AUTH.cronetVersion, ANDROID_VR_NO_AUTH.clientVersion, + ANDROID_VR_NO_AUTH.requiresAuth, true, "Android VR" ), IOS_UNPLUGGED( 33, "IOS_UNPLUGGED", + "com.google.ios.youtubeunplugged", "Apple", forceAVC() - ? "iPhone12,5" // 11 Pro Max (last device with iOS 13) - : "iPhone16,2", // 15 Pro Max + // 11 Pro Max (last device with iOS 13) + ? "iPhone12,5" + // 15 Pro Max + : "iPhone16,2", "iOS", - // iOS 13 and earlier uses only AVC. 14+ adds VP9 and AV1. forceAVC() - ? "13.7.17H35" // Last release of iOS 13. + // iOS 13 and earlier uses only AVC. 14+ adds VP9 and AV1. + ? "13.7.17H35" : "18.2.22C152", - forceAVC() - ? "com.google.ios.youtubeunplugged/6.45 (iPhone12,5; U; CPU iOS 13_7 like Mac OS X)" - : "com.google.ios.youtubeunplugged/8.49 (iPhone16,2; U; CPU iOS 18_2_22 like Mac OS X)", + null, + null, null, // Version number should be a valid iOS release. // https://www.ipa4fun.com/history/152043/ - // Some newer versions can also force AVC, - // but 6.45 is the last version that supports iOS 13. forceAVC() + // Some newer versions can also force AVC, + // but 6.45 is the last version that supports iOS 13. ? "6.45" : "8.49", true, + true, forceAVC() ? "iOS TV Force AVC" : "iOS TV" - ), - ANDROID_CREATOR( - 14, - "ANDROID_CREATOR", - Build.MANUFACTURER, - Build.MODEL, - "Android", - "11", - "com.google.android.apps.youtube.creator/24.45.100 (Linux; U; Android 11) gzip", - "30", - "24.45.100", - true, - "Android Creator" ); private static boolean forceAVC() { @@ -103,6 +126,16 @@ public enum ClientType { public final String clientName; + /** + * App package name. + */ + private final String packageName; + + /** + * Player user-agent. + */ + public final String userAgent; + /** * Device model, equivalent to {@link Build#MANUFACTURER} (System property: ro.product.vendor.manufacturer) */ @@ -123,11 +156,6 @@ public enum ClientType { */ public final String osVersion; - /** - * Player user-agent. - */ - public final String userAgent; - /** * Android SDK version, equivalent to {@link Build.VERSION#SDK} (System property: ro.build.version.sdk) * Field is null if not applicable. @@ -135,43 +163,97 @@ public enum ClientType { @Nullable public final String androidSdkVersion; + /** + * Android build id, equivalent to {@link Build#ID}. + * Field is null if not applicable. + */ + @Nullable + private final String buildId; + + /** + * Cronet release version, as found in decompiled client apk. + * Field is null if not applicable. + */ + @Nullable + private final String cronetVersion; + /** * App version. */ public final String clientVersion; /** - * If the client can access the API logged in. + * If this client requires authentication and does not work + * if logged out or in incognito mode. */ - public final boolean canLogin; + public final boolean requiresAuth; + + /** + * If the client should use authentication if available. + */ + public final boolean useAuth; /** * Friendly name displayed in stats for nerds. */ public final String friendlyName; + @SuppressWarnings("ConstantLocale") ClientType(int id, String clientName, + String packageName, String deviceMake, String deviceModel, String osName, String osVersion, - String userAgent, @Nullable String androidSdkVersion, + @Nullable String buildId, + @Nullable String cronetVersion, String clientVersion, - boolean canLogin, + boolean requiresAuth, + boolean useAuth, String friendlyName) { this.id = id; this.clientName = clientName; + this.packageName = packageName; this.deviceMake = deviceMake; this.deviceModel = deviceModel; this.osName = osName; this.osVersion = osVersion; - this.userAgent = userAgent; this.androidSdkVersion = androidSdkVersion; + this.buildId = buildId; + this.cronetVersion = cronetVersion; this.clientVersion = clientVersion; - this.canLogin = canLogin; + this.requiresAuth = requiresAuth; + this.useAuth = useAuth; this.friendlyName = friendlyName; + + Locale defaultLocale = Locale.getDefault(); + if (androidSdkVersion == null) { + // Convert version from '18.2.22C152' into '18_2_22' + String userAgentOsVersion = osVersion + .replaceAll("(\\d+\\.\\d+\\.\\d+).*", "$1") + .replace(".", "_"); + // https://github.com/mitmproxy/mitmproxy/issues/4836 + this.userAgent = String.format("%s/%s (%s; U; CPU iOS %s like Mac OS X; %s)", + packageName, + clientVersion, + deviceModel, + userAgentOsVersion, + defaultLocale + ); + } else { + this.userAgent = String.format("%s/%s (Linux; U; Android %s; %s; %s; Build/%s; Cronet/%s)", + packageName, + clientVersion, + osVersion, + defaultLocale, + deviceModel, + Objects.requireNonNull(buildId), + Objects.requireNonNull(cronetVersion) + ); + } + Logger.printDebug(() -> "userAgent: " + this.userAgent); } } 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 9554bdfaa..225f5c6b9 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 @@ -77,9 +77,9 @@ public class SpoofVideoStreamsPatch { String path = originalUri.getPath(); if (path != null && path.contains("initplayback")) { - Logger.printDebug(() -> "Blocking 'initplayback' by returning unreachable url"); + Logger.printDebug(() -> "Blocking 'initplayback' by clearing query"); - return UNREACHABLE_HOST_URI_STRING; + return originalUri.buildUpon().clearQuery().build().toString(); } } catch (Exception ex) { Logger.printException(() -> "blockInitPlaybackRequest failure", ex); 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 bae0c07a3..f45e890d5 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 @@ -5,12 +5,12 @@ import org.json.JSONObject; import java.io.IOException; import java.net.HttpURLConnection; +import java.util.Locale; 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.BaseSettings; -import app.revanced.extension.shared.settings.AppLanguage; import app.revanced.extension.shared.spoof.ClientType; final class PlayerRoutes { @@ -31,7 +31,7 @@ final class PlayerRoutes { private PlayerRoutes() { } - static String createInnertubeBody(ClientType clientType) { + static String createInnertubeBody(ClientType clientType, String videoId) { JSONObject innerTubeBody = new JSONObject(); try { @@ -42,27 +42,28 @@ final class PlayerRoutes { // but if this is a fall over client it will set the language even though // the audio language is not selectable in the UI. ClientType userSelectedClient = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get(); - AppLanguage language = userSelectedClient == ClientType.ANDROID_VR_NO_AUTH - ? BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get() - : AppLanguage.DEFAULT; + Locale streamLocale = userSelectedClient == ClientType.ANDROID_VR_NO_AUTH + ? BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get().getLocale() + : Locale.getDefault(); JSONObject client = new JSONObject(); - client.put("hl", language.getLanguage()); - client.put("clientName", clientType.clientName); - client.put("clientVersion", clientType.clientVersion); client.put("deviceMake", clientType.deviceMake); client.put("deviceModel", clientType.deviceModel); + client.put("clientName", clientType.clientName); + client.put("clientVersion", clientType.clientVersion); client.put("osName", clientType.osName); client.put("osVersion", clientType.osVersion); if (clientType.androidSdkVersion != null) { client.put("androidSdkVersion", clientType.androidSdkVersion); } + client.put("hl", streamLocale.getLanguage()); + client.put("gl", streamLocale.getCountry()); context.put("client", client); innerTubeBody.put("context", context); innerTubeBody.put("contentCheckOk", true); innerTubeBody.put("racyCheckOk", true); - innerTubeBody.put("videoId", "%s"); + innerTubeBody.put("videoId", videoId); } catch (JSONException e) { Logger.printException(() -> "Failed to create innerTubeBody", e); } @@ -78,7 +79,9 @@ final class PlayerRoutes { connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("User-Agent", clientType.userAgent); - connection.setRequestProperty("X-YouTube-Client-Version", String.valueOf(clientType.id)); + // Not a typo. "Client-Name" uses the client type id. + connection.setRequestProperty("X-YouTube-Client-Name", String.valueOf(clientType.id)); + connection.setRequestProperty("X-YouTube-Client-Version", clientType.clientVersion); connection.setUseCaches(false); connection.setDoOutput(true); diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/StreamingDataRequest.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/StreamingDataRequest.java index 5daa4b6e8..339ed2185 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/StreamingDataRequest.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/StreamingDataRequest.java @@ -120,7 +120,8 @@ public class StreamingDataRequest { } @Nullable - private static HttpURLConnection send(ClientType clientType, String videoId, + private static HttpURLConnection send(ClientType clientType, + String videoId, Map playerHeaders, boolean showErrorToasts) { Objects.requireNonNull(clientType); @@ -128,21 +129,24 @@ public class StreamingDataRequest { Objects.requireNonNull(playerHeaders); final long startTime = System.currentTimeMillis(); - Logger.printDebug(() -> "Fetching video streams for: " + videoId + " using client: " + clientType); try { HttpURLConnection connection = PlayerRoutes.getPlayerResponseConnectionFromRoute(GET_STREAMING_DATA, clientType); connection.setConnectTimeout(HTTP_TIMEOUT_MILLISECONDS); connection.setReadTimeout(HTTP_TIMEOUT_MILLISECONDS); + boolean authHeadersIncludes = false; + for (String key : REQUEST_HEADER_KEYS) { String value = playerHeaders.get(key); + if (value != null) { if (key.equals(AUTHORIZATION_HEADER)) { - if (!clientType.canLogin) { + if (!clientType.useAuth) { Logger.printDebug(() -> "Not including request header: " + key); continue; } + authHeadersIncludes = true; } Logger.printDebug(() -> "Including request header: " + key); @@ -150,7 +154,15 @@ public class StreamingDataRequest { } } - String innerTubeBody = String.format(PlayerRoutes.createInnertubeBody(clientType), videoId); + if (!authHeadersIncludes && clientType.requiresAuth) { + Logger.printDebug(() -> "Skipping client since user is not logged in: " + clientType + + " videoId: " + videoId); + return null; + } + + Logger.printDebug(() -> "Fetching video streams for: " + videoId + " using client: " + clientType); + + String innerTubeBody = PlayerRoutes.createInnertubeBody(clientType, videoId); byte[] requestBody = innerTubeBody.getBytes(StandardCharsets.UTF_8); connection.setFixedLengthStreamingMode(requestBody.length); connection.getOutputStream().write(requestBody); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java index 9606587dd..c4887b8e3 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java @@ -90,4 +90,12 @@ public class ThemeHelper { public static int getForegroundColor() { return isDarkTheme() ? getLightThemeColor() : getDarkThemeColor(); } + + public static int getToolbarBackgroundColor() { + final String colorName = isDarkTheme() + ? "yt_black3" + : "yt_white1"; + + return getColorInt(colorName); + } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java index cd1039128..9c4683bcc 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java @@ -106,7 +106,8 @@ public final class LayoutComponentsFilter extends Filter { inFeedSurvey = new StringFilterGroup( Settings.HIDE_FEED_SURVEY, "in_feed_survey", - "slimline_survey" + "slimline_survey", + "feed_nudge" ); final var medicalPanel = new StringFilterGroup( diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java index 22d8df37e..ae2a09f92 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java @@ -32,6 +32,11 @@ public class CustomPlaybackSpeedPatch { */ public static final float PLAYBACK_SPEED_MAXIMUM = 8; + /** + * Tap and hold speed. + */ + private static final float TAP_AND_HOLD_SPEED; + /** * Custom playback speeds. */ @@ -48,12 +53,27 @@ public class CustomPlaybackSpeedPatch { private static String[] preferenceListEntries, preferenceListEntryValues; static { + final float holdSpeed = Settings.SPEED_TAP_AND_HOLD.get(); + if (holdSpeed > 0 && holdSpeed <= PLAYBACK_SPEED_MAXIMUM) { + TAP_AND_HOLD_SPEED = holdSpeed; + } else { + showInvalidCustomSpeedToast(); + Settings.SPEED_TAP_AND_HOLD.resetToDefault(); + TAP_AND_HOLD_SPEED = Settings.SPEED_TAP_AND_HOLD.get(); + } + loadCustomSpeeds(); } - private static void resetCustomSpeeds(@NonNull String toastMessage) { - Utils.showToastLong(toastMessage); - Settings.CUSTOM_PLAYBACK_SPEEDS.resetToDefault(); + /** + * Injection point. + */ + public static float tapAndHoldSpeed() { + return TAP_AND_HOLD_SPEED; + } + + private static void showInvalidCustomSpeedToast() { + Utils.showToastLong(str("revanced_custom_playback_speeds_invalid", PLAYBACK_SPEED_MAXIMUM)); } private static void loadCustomSpeeds() { @@ -74,17 +94,18 @@ public class CustomPlaybackSpeedPatch { } if (speedFloat >= PLAYBACK_SPEED_MAXIMUM) { - resetCustomSpeeds(str("revanced_custom_playback_speeds_invalid", PLAYBACK_SPEED_MAXIMUM)); + showInvalidCustomSpeedToast(); + Settings.CUSTOM_PLAYBACK_SPEEDS.resetToDefault(); loadCustomSpeeds(); return; } - customPlaybackSpeeds[i] = speedFloat; - i++; + customPlaybackSpeeds[i++] = speedFloat; } } catch (Exception ex) { Logger.printInfo(() -> "parse error", ex); - resetCustomSpeeds(str("revanced_custom_playback_speeds_parse_exception")); + Utils.showToastLong(str("revanced_custom_playback_speeds_parse_exception")); + Settings.CUSTOM_PLAYBACK_SPEEDS.resetToDefault(); loadCustomSpeeds(); } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java index 1812ca5c5..8ce9172b8 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java @@ -1,26 +1,31 @@ package app.revanced.extension.youtube.settings; +import static app.revanced.extension.shared.Utils.getResourceIdentifier; + import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; +import android.os.Build; import android.preference.PreferenceFragment; +import android.util.TypedValue; import android.view.ViewGroup; -import android.widget.ImageButton; import android.widget.TextView; +import android.widget.Toolbar; + +import androidx.annotation.RequiresApi; + +import java.util.Objects; + 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.youtube.ThemeHelper; +import app.revanced.extension.youtube.patches.VersionCheckPatch; import app.revanced.extension.youtube.settings.preference.ReVancedPreferenceFragment; import app.revanced.extension.youtube.settings.preference.ReturnYouTubeDislikePreferenceFragment; import app.revanced.extension.youtube.settings.preference.SponsorBlockPreferenceFragment; -import java.util.Objects; - -import static app.revanced.extension.shared.Utils.getChildView; -import static app.revanced.extension.shared.Utils.getResourceIdentifier; - /** * Hooks LicenseActivity. *

@@ -29,6 +34,14 @@ import static app.revanced.extension.shared.Utils.getResourceIdentifier; @SuppressWarnings("unused") public class LicenseActivityHook { + private static ViewGroup.LayoutParams toolbarLayoutParams; + + public static void setToolbarLayoutParams(Toolbar toolbar) { + if (toolbarLayoutParams != null) { + toolbar.setLayoutParams(toolbarLayoutParams); + } + } + /** * Injection point. * Overrides the ReVanced settings language. @@ -42,17 +55,36 @@ public class LicenseActivityHook { return Utils.getContext(); } + /** + * Injection point. + */ + public static boolean useCairoSettingsFragment(boolean original) { + // Early targets have layout issues and it's better to always force off. + if (!VersionCheckPatch.IS_19_34_OR_GREATER) { + return false; + } + if (Settings.RESTORE_OLD_SETTINGS_MENUS.get()) { + return false; + } + + // On the first launch of a clean install, forcing the cairo menu can give a + // half broken appearance because all the preference icons may not be available yet. + // 19.34+ cairo settings are always on, so it doesn't need to be forced anyway. + // Cairo setting will show on the next launch of the app. + return original; + } + /** * Injection point. *

* Hooks LicenseActivity#onCreate in order to inject our own fragment. */ + @RequiresApi(api = Build.VERSION_CODES.N) public static void initialize(Activity licenseActivity) { try { ThemeHelper.setActivityTheme(licenseActivity); - licenseActivity.setContentView( - getResourceIdentifier("revanced_settings_with_toolbar", "layout")); - setBackButton(licenseActivity); + licenseActivity.setContentView(getResourceIdentifier( + "revanced_settings_with_toolbar", "layout")); PreferenceFragment fragment; String toolbarTitleResourceName; @@ -75,7 +107,7 @@ public class LicenseActivityHook { return; } - setToolbarTitle(licenseActivity, toolbarTitleResourceName); + createToolbar(licenseActivity, toolbarTitleResourceName); //noinspection deprecation licenseActivity.getFragmentManager() @@ -87,28 +119,36 @@ public class LicenseActivityHook { } } - private static void setToolbarTitle(Activity activity, String toolbarTitleResourceName) { - ViewGroup toolbar = activity.findViewById(getToolbarResourceId()); - TextView toolbarTextView = Objects.requireNonNull(getChildView(toolbar, false, - view -> view instanceof TextView)); - toolbarTextView.setText(getResourceIdentifier(toolbarTitleResourceName, "string")); - } - + @RequiresApi(api = Build.VERSION_CODES.N) @SuppressLint("UseCompatLoadingForDrawables") - private static void setBackButton(Activity activity) { - ViewGroup toolbar = activity.findViewById(getToolbarResourceId()); - ImageButton imageButton = Objects.requireNonNull(getChildView(toolbar, false, - view -> view instanceof ImageButton)); - imageButton.setImageDrawable(ReVancedPreferenceFragment.getBackButtonDrawable()); - imageButton.setOnClickListener(view -> activity.onBackPressed()); - } + private static void createToolbar(Activity activity, String toolbarTitleResourceName) { + // Replace dummy placeholder toolbar. + // This is required to fix submenu title alignment issue with Android ASOP 15+ + ViewGroup toolBarParent = activity.findViewById( + getResourceIdentifier("revanced_toolbar_parent", "id")); + ViewGroup dummyToolbar = toolBarParent.findViewById(getResourceIdentifier( + "revanced_toolbar", "id")); + toolbarLayoutParams = dummyToolbar.getLayoutParams(); + toolBarParent.removeView(dummyToolbar); - private static int getToolbarResourceId() { - final int toolbarResourceId = getResourceIdentifier("revanced_toolbar", "id"); - if (toolbarResourceId == 0) { - throw new IllegalStateException("Could not find back button resource"); + Toolbar toolbar = new Toolbar(toolBarParent.getContext()); + toolbar.setBackgroundColor(ThemeHelper.getToolbarBackgroundColor()); + toolbar.setNavigationIcon(ReVancedPreferenceFragment.getBackButtonDrawable()); + toolbar.setNavigationOnClickListener(view -> activity.onBackPressed()); + toolbar.setTitle(getResourceIdentifier(toolbarTitleResourceName, "string")); + + final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, + Utils.getContext().getResources().getDisplayMetrics()); + toolbar.setTitleMarginStart(margin); + toolbar.setTitleMarginEnd(margin); + TextView toolbarTextView = Utils.getChildView(toolbar, false, + view -> view instanceof TextView); + if (toolbarTextView != null) { + toolbarTextView.setTextColor(ThemeHelper.getForegroundColor()); } - return toolbarResourceId; + setToolbarLayoutParams(toolbar); + + toolBarParent.addView(toolbar, 0); } } 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 93515648a..5817e5aca 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 @@ -50,6 +50,7 @@ public class Settings extends BaseSettings { public static final IntegerSetting VIDEO_QUALITY_DEFAULT_WIFI = new IntegerSetting("revanced_video_quality_default_wifi", -2); public static final IntegerSetting VIDEO_QUALITY_DEFAULT_MOBILE = new IntegerSetting("revanced_video_quality_default_mobile", -2); // Speed + public static final FloatSetting SPEED_TAP_AND_HOLD = new FloatSetting("revanced_speed_tap_and_hold", 2.0f, true); public static final BooleanSetting REMEMBER_PLAYBACK_SPEED_LAST_SELECTED = new BooleanSetting("revanced_remember_playback_speed_last_selected", FALSE); public static final BooleanSetting CUSTOM_SPEED_MENU = new BooleanSetting("revanced_custom_speed_menu", TRUE); public static final FloatSetting PLAYBACK_SPEED_DEFAULT = new FloatSetting("revanced_playback_speed_default", -2.0f); @@ -203,6 +204,7 @@ public class Settings extends BaseSettings { public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE); // General layout + public static final BooleanSetting RESTORE_OLD_SETTINGS_MENUS = new BooleanSetting("revanced_restore_old_settings_menus", FALSE, true); public static final EnumSetting CHANGE_FORM_FACTOR = new EnumSetting<>("revanced_change_form_factor", FormFactor.DEFAULT, true, "revanced_change_form_factor_user_dialog_message"); public static final BooleanSetting BYPASS_IMAGE_REGION_RESTRICTIONS = new BooleanSetting("revanced_bypass_image_region_restrictions", FALSE, true); public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java index 02804c8c9..00cf12a35 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java @@ -30,6 +30,7 @@ import app.revanced.extension.shared.settings.EnumSetting; import app.revanced.extension.shared.settings.preference.AbstractPreferenceFragment; import app.revanced.extension.youtube.ThemeHelper; import app.revanced.extension.youtube.patches.playback.speed.CustomPlaybackSpeedPatch; +import app.revanced.extension.youtube.settings.LicenseActivityHook; import app.revanced.extension.youtube.settings.Settings; /** @@ -140,9 +141,6 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment { .getParent(); // Fix required for Android 15 and YT 19.45+ - // FIXME: - // On Android 15 the text layout is not aligned the same as the parent - // screen and it looks a little off. Otherwise this works. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { rootView.setOnApplyWindowInsetsListener((v, insets) -> { Insets statusInsets = insets.getInsets(WindowInsets.Type.statusBars()); @@ -169,6 +167,8 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment { toolbarTextView.setTextColor(ThemeHelper.getForegroundColor()); } + LicenseActivityHook.setToolbarLayoutParams(toolbar); + rootView.addView(toolbar, 0); return false; } 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 0fc4283e2..5d43cb81f 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 @@ -87,11 +87,6 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference { // Android VR supports AV1 but all other clients do not. if (clientType != ClientType.ANDROID_VR && clientType != ClientType.ANDROID_VR_NO_AUTH) { summary += '\n' + str("revanced_spoof_video_streams_about_no_av1"); - - // Android Creator does not support HDR. - if (clientType == ClientType.ANDROID_CREATOR) { - summary += '\n' + str("revanced_spoof_video_streams_about_no_hdr"); - } } setTitle(title); diff --git a/gradle.properties b/gradle.properties index 8ef87aa3a..3fd9489ea 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.8.1 +version = 5.9.0-dev.4 diff --git a/patches/api/patches.api b/patches/api/patches.api index 92ca7f946..a4075b866 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -603,16 +603,19 @@ public final class app/revanced/patches/shared/misc/mapping/ResourceMappingPatch } public final class app/revanced/patches/shared/misc/settings/SettingsPatchKt { + public static final fun settingsPatch (Ljava/util/List;Ljava/util/Set;)Lapp/revanced/patcher/patch/ResourcePatch; public static final fun settingsPatch (Lkotlin/Pair;Ljava/util/Set;)Lapp/revanced/patcher/patch/ResourcePatch; - public static synthetic fun settingsPatch$default (Lkotlin/Pair;Ljava/util/Set;ILjava/lang/Object;)Lapp/revanced/patcher/patch/ResourcePatch; + public static synthetic fun settingsPatch$default (Ljava/util/List;Ljava/util/Set;ILjava/lang/Object;)Lapp/revanced/patcher/patch/ResourcePatch; } public abstract class app/revanced/patches/shared/misc/settings/preference/BasePreference { public static final field Companion Lapp/revanced/patches/shared/misc/settings/preference/BasePreference$Companion; - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public fun equals (Ljava/lang/Object;)Z + public final fun getIcon ()Ljava/lang/String; public final fun getKey ()Ljava/lang/String; + public final fun getLayout ()Ljava/lang/String; public final fun getSummaryKey ()Ljava/lang/String; public final fun getTag ()Ljava/lang/String; public final fun getTitleKey ()Ljava/lang/String; @@ -635,17 +638,19 @@ public abstract class app/revanced/patches/shared/misc/settings/preference/BaseP public abstract class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection { public fun ()V - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getIcon ()Ljava/lang/String; public final fun getKey ()Ljava/lang/String; + public final fun getLayout ()Ljava/lang/String; public final fun getPreferences ()Ljava/util/Set; public final fun getTitleKey ()Ljava/lang/String; public abstract fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreference; } public class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen : app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection { - public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;)V - public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;)V + public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun addPreferences ([Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;)V public final fun getCategories ()Ljava/util/Set; public synthetic fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreference; @@ -653,8 +658,8 @@ public class app/revanced/patches/shared/misc/settings/preference/BasePreference } public class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen$Category : app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection { - public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun addPreferences ([Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;)V public synthetic fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreference; public fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/PreferenceCategory; @@ -662,6 +667,7 @@ public class app/revanced/patches/shared/misc/settings/preference/BasePreference public final class app/revanced/patches/shared/misc/settings/preference/InputType : java/lang/Enum { public static final field NUMBER Lapp/revanced/patches/shared/misc/settings/preference/InputType; + public static final field NUMBER_DECIMAL Lapp/revanced/patches/shared/misc/settings/preference/InputType; public static final field TEXT Lapp/revanced/patches/shared/misc/settings/preference/InputType; public static final field TEXT_CAP_CHARACTERS Lapp/revanced/patches/shared/misc/settings/preference/InputType; public static final field TEXT_MULTI_LINE Lapp/revanced/patches/shared/misc/settings/preference/InputType; @@ -672,8 +678,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/InputTyp } public final class app/revanced/patches/shared/misc/settings/preference/IntentPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public fun equals (Ljava/lang/Object;)Z public final fun getIntent ()Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent; public fun hashCode ()I @@ -693,8 +699,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/ListPref public fun ()V public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/util/resource/ArrayResource;Lapp/revanced/util/resource/ArrayResource;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/util/resource/ArrayResource;Lapp/revanced/util/resource/ArrayResource;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getEntries ()Lapp/revanced/util/resource/ArrayResource; public final fun getEntriesKey ()Ljava/lang/String; public final fun getEntryValues ()Lapp/revanced/util/resource/ArrayResource; @@ -703,22 +709,22 @@ public final class app/revanced/patches/shared/misc/settings/preference/ListPref } public final class app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getSelectable ()Z public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } public class app/revanced/patches/shared/misc/settings/preference/PreferenceCategory : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getPreferences ()Ljava/util/Set; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } public class app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getPreferences ()Ljava/util/Set; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } @@ -727,6 +733,7 @@ public final class app/revanced/patches/shared/misc/settings/preference/Preferen public static final field BY_KEY Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting; public static final field BY_TITLE Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting; public static final field UNSORTED Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting; + public final fun appendSortType (Ljava/lang/String;)Ljava/lang/String; public static fun getEntries ()Lkotlin/enums/EnumEntries; public final fun getKeySuffix ()Ljava/lang/String; public static fun valueOf (Ljava/lang/String;)Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting; @@ -745,8 +752,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/SummaryT public final class app/revanced/patches/shared/misc/settings/preference/SwitchPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { public fun ()V - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getSummaryOffKey ()Ljava/lang/String; public final fun getSummaryOnKey ()Ljava/lang/String; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; @@ -754,8 +761,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/SwitchPr public final class app/revanced/patches/shared/misc/settings/preference/TextPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { public fun ()V - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getInputType ()Lapp/revanced/patches/shared/misc/settings/preference/InputType; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } @@ -1447,10 +1454,6 @@ public final class app/revanced/patches/youtube/video/speed/button/PlaybackSpeed public static final fun getPlaybackSpeedButtonPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } -public final class app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatchKt { - public static final fun getSpeedUnavailableId ()J -} - public final class app/revanced/patches/youtube/video/videoid/VideoIdPatchKt { public static final fun getVideoIdPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun hookBackgroundPlayVideoId (Ljava/lang/String;)V 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 7c343961c..d6d9df94c 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 @@ -1,5 +1,6 @@ package app.revanced.patches.shared.misc.settings +import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.resourcePatch import app.revanced.patches.all.misc.resources.addResource import app.revanced.patches.all.misc.resources.addResources @@ -12,15 +13,22 @@ import app.revanced.util.getNode import app.revanced.util.insertFirst import org.w3c.dom.Node +// TODO: Delete this on next major version bump. +@Deprecated("Use non deprecated settings patch function") +fun settingsPatch ( + rootPreference: Pair, + preferences: Set, +) = settingsPatch(listOf(rootPreference), preferences) + /** * A resource patch that adds settings to a settings fragment. * - * @param rootPreference A pair of an intent preference and the name of the fragment file to add it to. - * If null, no preference will be added. + * @param rootPreferences List of intent preferences and the name of the fragment file to add it to. + * File names that do not exist are ignored and not processed. * @param preferences A set of preferences to add to the ReVanced fragment. */ -fun settingsPatch( - rootPreference: Pair? = null, +fun settingsPatch ( + rootPreferences: List>? = null, preferences: Set, ) = resourcePatch { dependsOn(addResourcesPatch) @@ -46,10 +54,20 @@ fun settingsPatch( } // Add the root preference to an existing fragment if needed. - rootPreference?.let { (intentPreference, fragment) -> - document("res/xml/$fragment.xml").use { document -> - document.getNode("PreferenceScreen").addPreference(intentPreference, true) + rootPreferences?.let { + var modified = false + + it.forEach { (intent, fileName) -> + val preferenceFileName = "res/xml/$fileName.xml" + if (get(preferenceFileName).exists()) { + document(preferenceFileName).use { document -> + document.getNode("PreferenceScreen").addPreference(intent, true) + } + modified = true + } } + + if (!modified) throw PatchException("No declared preference files exists: $rootPreferences") } // Add all preferences to the ReVanced fragment. diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt index 509d0eea3..7c5cbf2cd 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt @@ -9,6 +9,8 @@ import org.w3c.dom.Element * * @param key The key of the preference. If null, other parameters must be specified. * @param titleKey The key of the preference title. + * @param icon The preference icon resource name. + * @param layout Layout declaration. * @param summaryKey The key of the preference summary. * @param tag The tag or full class name of the preference. */ @@ -17,6 +19,8 @@ abstract class BasePreference( val key: String? = null, val titleKey: String = "${key}_title", val summaryKey: String? = "${key}_summary", + val icon: String? = null, + val layout: String? = null, val tag: String ) { /** @@ -33,6 +37,11 @@ abstract class BasePreference( key?.let { setAttribute("android:key", it) } setAttribute("android:title", "@string/${titleKey}") summaryKey?.let { addSummary(it) } + icon?.let { + setAttribute("android:icon", it) + setAttribute("app:iconSpaceReserved", "true") + } + layout?.let { setAttribute("android:layout", layout) } } override fun hashCode(): Int { diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt index 648f5eefd..8590e9965 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt @@ -24,16 +24,20 @@ abstract class BasePreferenceScreen( key: String? = null, titleKey: String = "${key}_title", private val summaryKey: String? = "${key}_summary", + icon: String? = null, + layout: String? = null, preferences: MutableSet = mutableSetOf(), val categories: MutableSet = mutableSetOf(), private val sorting: Sorting = Sorting.BY_TITLE, - ) : BasePreferenceCollection(key, titleKey, preferences) { + ) : BasePreferenceCollection(key, titleKey, icon, layout, preferences) { override fun transform(): PreferenceScreenPreference { return PreferenceScreenPreference( key, titleKey, summaryKey, + icon, + layout, sorting, // Screens and preferences are sorted at runtime by extension code, // so title sorting uses the localized language in use. @@ -56,12 +60,17 @@ abstract class BasePreferenceScreen( open inner class Category( key: String? = null, titleKey: String = "${key}_title", + icon: String? = null, + layout: String? = null, preferences: MutableSet = mutableSetOf(), - ) : BasePreferenceCollection(key, titleKey, preferences) { + ) : BasePreferenceCollection(key, titleKey, icon, layout, preferences) { override fun transform(): PreferenceCategory { return PreferenceCategory( key, titleKey, + icon, + layout, + sorting, preferences = preferences, ) } @@ -82,6 +91,8 @@ abstract class BasePreferenceScreen( abstract class BasePreferenceCollection( val key: String? = null, val titleKey: String = "${key}_title", + val icon: String? = null, + val layout: String? = null, val preferences: MutableSet = mutableSetOf(), ) { abstract fun transform(): BasePreference diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/InputType.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/InputType.kt index e5142d92e..88857cd7f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/InputType.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/InputType.kt @@ -5,4 +5,5 @@ enum class InputType(val type: String) { TEXT_CAP_CHARACTERS("textCapCharacters"), TEXT_MULTI_LINE("textMultiLine"), NUMBER("number"), + NUMBER_DECIMAL("numberDecimal"), } \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt index dbc109ae8..2aef02dc8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt @@ -9,6 +9,8 @@ import org.w3c.dom.Document * @param key Optional preference key. * @param titleKey The preference title key. * @param summaryKey The preference summary key. + * @param icon The preference icon resource name. + * @param layout Layout declaration. * @param tag The preference tag. * @param intent The intent to open. */ @@ -16,9 +18,11 @@ class IntentPreference( key: String? = null, titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", + icon: String? = null, + layout: String? = null, tag: String = "Preference", val intent: Intent, -) : BasePreference(key, titleKey, summaryKey, tag) { +) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/ListPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/ListPreference.kt index e0338d29c..e6d9b440b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/ListPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/ListPreference.kt @@ -10,6 +10,8 @@ import org.w3c.dom.Document * @param key The preference key. If null, other parameters must be specified. * @param titleKey The preference title key. * @param summaryKey The preference summary key. + * @param icon The preference icon resource name. + * @param layout Layout declaration. * @param tag The preference tag. * @param entriesKey The entries array key. * @param entryValuesKey The entry values array key. @@ -19,10 +21,12 @@ class ListPreference( key: String? = null, titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", + icon: String? = null, + layout: String? = null, tag: String = "ListPreference", val entriesKey: String? = "${key}_entries", val entryValuesKey: String? = "${key}_entry_values" -) : BasePreference(key, titleKey, summaryKey, tag) { +) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) { var entries: ArrayResource? = null private set var entryValues: ArrayResource? = null diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt index d4ecaae7e..b5ce55489 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt @@ -10,6 +10,8 @@ import org.w3c.dom.Document * * @param key The preference key. * @param summaryKey The preference summary key. + * @param icon The preference icon resource name. + * @param layout Layout declaration. * @param tag The tag or full class name of the preference. * @param selectable If the preference is selectable and responds to tap events. */ @@ -18,9 +20,11 @@ class NonInteractivePreference( key: String, titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", + icon: String? = null, + layout: String? = null, tag: String = "Preference", val selectable: Boolean = false, -) : BasePreference(key, titleKey, summaryKey, tag) { +) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { setAttribute("android:selectable", selectable.toString()) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceCategory.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceCategory.kt index 67e82208f..8b2deb96e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceCategory.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceCategory.kt @@ -1,5 +1,6 @@ package app.revanced.patches.shared.misc.settings.preference +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting import app.revanced.util.resource.BaseResource import org.w3c.dom.Document @@ -8,6 +9,8 @@ import org.w3c.dom.Document * * @param key The key of the preference. If null, other parameters must be specified. * @param titleKey The key of the preference title. + * @param icon The preference icon resource name. + * @param layout Layout declaration. * @param tag The tag or full class name of the preference. * @param preferences The preferences in this category. */ @@ -15,9 +18,12 @@ import org.w3c.dom.Document open class PreferenceCategory( key: String? = null, titleKey: String = "${key}_title", + icon: String? = null, + layout: String? = null, + sorting: Sorting = Sorting.BY_TITLE, tag: String = "PreferenceCategory", val preferences: Set -) : BasePreference(key, titleKey, null, tag) { +) : BasePreference(sorting.appendSortType(key), titleKey, null, icon, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference.kt index 2b21a8413..a37e92947 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference.kt @@ -9,6 +9,8 @@ import org.w3c.dom.Document * @param key The key of the preference. If null, other parameters must be specified. * @param titleKey The key of the preference title. * @param summaryKey The key of the preference summary. + * @param icon The preference icon resource name. + * @param layout Layout declaration. * @param sorting Sorting to use. If the sorting is not [Sorting.UNSORTED], * then the key parameter will be modified to include the sort type. * @param tag The tag or full class name of the preference. @@ -19,6 +21,8 @@ open class PreferenceScreenPreference( key: String? = null, titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", + icon: String? = null, + layout: String? = null, sorting: Sorting = Sorting.BY_TITLE, tag: String = "PreferenceScreen", val preferences: Set, @@ -28,7 +32,7 @@ open class PreferenceScreenPreference( // or adding new attributes to the attrs.xml file. // Since the key value is not currently used by the extensions, // for now it's much simpler to modify the key to include the sort parameter. -) : BasePreference(if (sorting == Sorting.UNSORTED) key else (key + sorting.keySuffix), titleKey, summaryKey, tag) { +) : BasePreference(sorting.appendSortType(key), titleKey, summaryKey, icon, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { preferences.forEach { @@ -53,6 +57,16 @@ open class PreferenceScreenPreference( /** * Unspecified sorting. */ - UNSORTED("_sort_by_unsorted"), + UNSORTED("_sort_by_unsorted"); + + /** + * @return The key with this sort type appended to to the end, + * or if key is null then null is returned. + */ + fun appendSortType(key: String?): String? { + if (key == null) return null + if (this == UNSORTED) return key + return key + keySuffix + } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/SwitchPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/SwitchPreference.kt index e09d813a3..df9accd4b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/SwitchPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/SwitchPreference.kt @@ -8,6 +8,8 @@ import org.w3c.dom.Document * * @param key The preference key. If null, other parameters must be specified. * @param titleKey The preference title key. + * @param icon The preference icon resource name. + * @param layout Layout declaration. * @param tag The preference tag. * @param summaryOnKey The preference summary-on key. * @param summaryOffKey The preference summary-off key. @@ -17,9 +19,11 @@ class SwitchPreference( key: String? = null, titleKey: String = "${key}_title", tag: String = "SwitchPreference", + icon: String? = null, + layout: String? = null, val summaryOnKey: String = "${key}_summary_on", val summaryOffKey: String = "${key}_summary_off" -) : BasePreference(key, titleKey, null, tag) { +) : BasePreference(key, titleKey, null, icon, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { addSummary(summaryOnKey, SummaryType.ON) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/TextPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/TextPreference.kt index 81de61569..397d4bd43 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/TextPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/TextPreference.kt @@ -9,6 +9,8 @@ import org.w3c.dom.Document * @param key The preference key. If null, other parameters must be specified. * @param titleKey The preference title key. * @param summaryKey The preference summary key. + * @param icon The preference icon resource name. + * @param layout Layout declaration. * @param tag The preference tag. * @param inputType The preference input type. */ @@ -17,9 +19,11 @@ class TextPreference( key: String? = null, titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", + icon: String? = null, + layout: String? = null, tag: String = "app.revanced.extension.shared.settings.preference.ResettableEditTextPreference", val inputType: InputType = InputType.TEXT -) : BasePreference(key, titleKey, summaryKey, tag) { +) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt index 1a0dc6665..0f7647b4c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt @@ -65,9 +65,12 @@ val navigationButtonsPatch = bytecodePatch( ) if (is_19_25_or_greater) { - preferences += SwitchPreference("revanced_disable_translucent_status_bar") preferences += SwitchPreference("revanced_disable_translucent_navigation_bar_light") preferences += SwitchPreference("revanced_disable_translucent_navigation_bar_dark") + + PreferenceScreen.GENERAL_LAYOUT.addPreferences( + SwitchPreference("revanced_disable_translucent_status_bar") + ) } PreferenceScreen.GENERAL_LAYOUT.addPreferences( diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/cairo/DisableCairoSettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/cairo/DisableCairoSettingsPatch.kt deleted file mode 100644 index cd058ca59..000000000 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/cairo/DisableCairoSettingsPatch.kt +++ /dev/null @@ -1,47 +0,0 @@ -package app.revanced.patches.youtube.misc.fix.cairo - -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction -import app.revanced.patcher.patch.bytecodePatch -import app.revanced.patches.youtube.misc.backgroundplayback.backgroundPlaybackPatch -import app.revanced.patches.youtube.misc.playservice.is_19_04_or_greater -import app.revanced.patches.youtube.misc.playservice.versionCheckPatch -import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.indexOfFirstLiteralInstructionOrThrow -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction - -internal val disableCairoSettingsPatch = bytecodePatch( - description = "Disables Cairo Fragment from being used.", -) { - dependsOn(versionCheckPatch) - - execute { - if (!is_19_04_or_greater) { - return@execute - } - - /** - *

-         * Cairo Fragment was added since YouTube v19.04.38.
-         *
-         * Disable this for the following reasons:
-         * 1. [backgroundPlaybackPatch] does not activate the Minimized playback setting of Cairo Fragment.
-         * 2. Some patches do not yet support Cairo Fragments (ie: custom Seekbar color).
-         * 3. Settings preferences added by ReVanced are missing.
-         *
-         * Screenshots of the Cairo Fragment:
-         * uYouPlus#1468.
-         */
-        cairoFragmentConfigFingerprint.method.apply {
-            val literalIndex = indexOfFirstLiteralInstructionOrThrow(CAIRO_CONFIG_LITERAL_VALUE)
-            val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
-            val register = getInstruction(resultIndex).registerA
-
-            addInstruction(
-                resultIndex + 1,
-                "const/16 v$register, 0x0",
-            )
-        }
-    }
-}
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/cairo/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/cairo/Fingerprints.kt
deleted file mode 100644
index 5272adc07..000000000
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/cairo/Fingerprints.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package app.revanced.patches.youtube.misc.fix.cairo
-
-import app.revanced.patcher.fingerprint
-import app.revanced.util.literal
-import com.android.tools.smali.dexlib2.AccessFlags
-
-/**
- * Added in YouTube v19.04.38.
- *
- * When this value is true, Cairo Fragment is used.
- * In this case, some of the patches may be broken, so set this value to FALSE.
- */
-internal const val CAIRO_CONFIG_LITERAL_VALUE = 45532100L
-
-internal val cairoFragmentConfigFingerprint = fingerprint {
-    accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
-    returns("Z")
-    literal { CAIRO_CONFIG_LITERAL_VALUE }
-}
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/Fingerprints.kt
index 42298d82f..c86620384 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/Fingerprints.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/Fingerprints.kt
@@ -21,3 +21,14 @@ internal val setThemeFingerprint = fingerprint {
     opcodes(Opcode.RETURN_OBJECT)
     literal { appearanceStringId }
 }
+
+/**
+ * Added in YouTube v19.04.38.
+ */
+internal const val CAIRO_CONFIG_LITERAL_VALUE = 45532100L
+
+internal val cairoFragmentConfigFingerprint = fingerprint {
+    accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
+    returns("Z")
+    literal { CAIRO_CONFIG_LITERAL_VALUE }
+}
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt
index 68c058b7b..8bf7cfc06 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt
@@ -18,8 +18,10 @@ import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPref
 import app.revanced.patches.shared.misc.settings.settingsPatch
 import app.revanced.patches.youtube.misc.check.checkEnvironmentPatch
 import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
-import app.revanced.patches.youtube.misc.fix.cairo.disableCairoSettingsPatch
 import app.revanced.patches.youtube.misc.fix.playbackspeed.fixPlaybackSpeedWhilePlayingPatch
+import app.revanced.patches.youtube.misc.playservice.is_19_04_or_greater
+import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater
+import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
 import app.revanced.util.*
 import com.android.tools.smali.dexlib2.AccessFlags
 import com.android.tools.smali.dexlib2.Opcode
@@ -43,13 +45,28 @@ private val settingsResourcePatch = resourcePatch {
     dependsOn(
         resourceMappingPatch,
         settingsPatch(
-            rootPreference = IntentPreference(
-                titleKey = "revanced_settings_title",
-                summaryKey = null,
-                intent = newIntent("revanced_settings_intent"),
-            ) to "settings_fragment",
-            preferences,
-        ),
+            listOf(
+                IntentPreference(
+                    titleKey = "revanced_settings_title",
+                    summaryKey = null,
+                    intent = newIntent("revanced_settings_intent"),
+                ) to "settings_fragment",
+                PreferenceCategory(
+                    titleKey = "revanced_settings_title",
+                    layout = "@layout/preference_group_title",
+                    preferences = setOf(
+                        IntentPreference(
+                            titleKey = "revanced_settings_submenu_title",
+                            summaryKey = null,
+                            icon = "@drawable/revanced_settings_icon",
+                            layout = "@layout/preference_with_icon",
+                            intent = newIntent("revanced_settings_intent"),
+                        )
+                    )
+                ) to "settings_fragment_cairo",
+            ),
+            preferences
+        )
     )
 
     execute {
@@ -57,6 +74,7 @@ private val settingsResourcePatch = resourcePatch {
         appearanceStringId = resourceMappings["string", "app_theme_appearance_dark"]
 
         arrayOf(
+            ResourceGroup("drawable", "revanced_settings_icon.xml"),
             ResourceGroup("layout", "revanced_settings_with_toolbar.xml"),
         ).forEach { resourceGroup ->
             copyResources("settings", resourceGroup)
@@ -79,7 +97,6 @@ private val settingsResourcePatch = resourcePatch {
         // Remove horizontal divider from the settings Preferences
         // To better match the appearance of the stock YouTube settings.
         document("res/values/styles.xml").use { document ->
-
             arrayOf(
                 "Theme.YouTube.Settings",
                 "Theme.YouTube.Settings.Dark",
@@ -99,7 +116,6 @@ private val settingsResourcePatch = resourcePatch {
         // Some devices freak out if undeclared data is passed to an intent,
         // and this change appears to fix the issue.
         document("AndroidManifest.xml").use { document ->
-
             val licenseElement = document.childNodes.findElementByAttributeValueOrThrow(
                 "android:name",
                 "com.google.android.libraries.social.licenses.LicenseActivity",
@@ -123,7 +139,7 @@ val settingsPatch = bytecodePatch(
         sharedExtensionPatch,
         settingsResourcePatch,
         addResourcesPatch,
-        disableCairoSettingsPatch,
+        versionCheckPatch,
         fixPlaybackSpeedWhilePlayingPatch,
         // Currently there is no easy way to make a mandatory patch,
         // so for now this is a dependent of this patch.
@@ -147,6 +163,12 @@ val settingsPatch = bytecodePatch(
             selectable = true,
         )
 
+        if (is_19_34_or_greater) {
+            PreferenceScreen.GENERAL_LAYOUT.addPreferences(
+                SwitchPreference("revanced_restore_old_settings_menus")
+            )
+        }
+
         PreferenceScreen.MISC.addPreferences(
             TextPreference(
                 key = null,
@@ -224,6 +246,14 @@ val settingsPatch = bytecodePatch(
             methods.add(attachBaseContext)
         }
 
+        // Add setting to force cairo settings fragment on/off.
+        if (is_19_04_or_greater) {
+            cairoFragmentConfigFingerprint.method.insertFeatureFlagBooleanOverride(
+                CAIRO_CONFIG_LITERAL_VALUE,
+                "$activityHookClassDescriptor->useCairoSettingsFragment(Z)Z"
+            )
+        }
+
     }
 
     finalize {
@@ -259,17 +289,15 @@ object PreferenceScreen : BasePreferenceScreen() {
         key = "revanced_settings_screen_03_feed",
         summaryKey = null,
     )
-    val PLAYER = Screen(
-        key = "revanced_settings_screen_04_player",
+    val GENERAL_LAYOUT = Screen(
+        key = "revanced_settings_screen_04_general",
         summaryKey = null,
     )
-    val GENERAL_LAYOUT = Screen(
-        key = "revanced_settings_screen_05_general",
+    val PLAYER = Screen(
+        key = "revanced_settings_screen_05_player",
         summaryKey = null,
     )
 
-    // Don't sort, as related preferences are scattered apart.
-    // Can use title sorting after PreferenceCategory support is added.
     val SHORTS = Screen(
         key = "revanced_settings_screen_06_shorts",
         summaryKey = null,
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatch.kt
index bd6668993..695642c5a 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatch.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatch.kt
@@ -17,22 +17,26 @@ import app.revanced.patches.shared.misc.mapping.resourceMappings
 import app.revanced.patches.shared.misc.settings.preference.InputType
 import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
 import app.revanced.patches.shared.misc.settings.preference.TextPreference
+import app.revanced.patches.youtube.interaction.seekbar.disableFastForwardNoticeFingerprint
 import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
 import app.revanced.patches.youtube.misc.litho.filter.addLithoFilter
 import app.revanced.patches.youtube.misc.litho.filter.lithoFilterPatch
+import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater
+import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
 import app.revanced.patches.youtube.misc.recyclerviewtree.hook.addRecyclerViewTreeHook
 import app.revanced.patches.youtube.misc.recyclerviewtree.hook.recyclerViewTreeHookPatch
 import app.revanced.patches.youtube.misc.settings.PreferenceScreen
 import app.revanced.patches.youtube.misc.settings.settingsPatch
 import app.revanced.util.*
 import com.android.tools.smali.dexlib2.AccessFlags
+import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction
 import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
 import com.android.tools.smali.dexlib2.iface.reference.FieldReference
 import com.android.tools.smali.dexlib2.iface.reference.MethodReference
 import com.android.tools.smali.dexlib2.immutable.ImmutableField
 
-var speedUnavailableId = -1L
-    internal set
+internal var speedUnavailableId = -1L
+    private set
 
 private val customPlaybackSpeedResourcePatch = resourcePatch {
     dependsOn(resourceMappingPatch)
@@ -61,6 +65,7 @@ internal val customPlaybackSpeedPatch = bytecodePatch(
         recyclerViewTreeHookPatch,
         customPlaybackSpeedResourcePatch,
         addResourcesPatch,
+        versionCheckPatch
     )
 
     execute {
@@ -71,6 +76,12 @@ internal val customPlaybackSpeedPatch = bytecodePatch(
             TextPreference("revanced_custom_playback_speeds", inputType = InputType.TEXT_MULTI_LINE),
         )
 
+        if (is_19_25_or_greater) {
+            PreferenceScreen.VIDEO.addPreferences(
+                TextPreference("revanced_speed_tap_and_hold", inputType = InputType.NUMBER_DECIMAL),
+            )
+        }
+
         // Replace the speeds float array with custom speeds.
         speedArrayGeneratorFingerprint.method.apply {
             val sizeCallIndex = indexOfFirstInstructionOrThrow { getReference()?.name == "size" }
@@ -166,5 +177,27 @@ internal val customPlaybackSpeedPatch = bytecodePatch(
         addLithoFilter(FILTER_CLASS_DESCRIPTOR)
 
         // endregion
+
+
+        // region Custom tap and hold 2x speed.
+
+        if (is_19_25_or_greater) {
+            disableFastForwardNoticeFingerprint.method.apply {
+                val index = indexOfFirstInstructionOrThrow {
+                    (this as? NarrowLiteralInstruction)?.narrowLiteral == 2.0f.toRawBits()
+                }
+                val register = getInstruction(index).registerA
+
+                addInstructions(
+                    index + 1,
+                    """
+                        invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->tapAndHoldSpeed()F
+                        move-result v$register
+                    """
+                )
+            }
+        }
+
+        // endregion
     }
 }
diff --git a/patches/src/main/kotlin/app/revanced/util/resource/StringResource.kt b/patches/src/main/kotlin/app/revanced/util/resource/StringResource.kt
index 915536b77..cb9c0b213 100644
--- a/patches/src/main/kotlin/app/revanced/util/resource/StringResource.kt
+++ b/patches/src/main/kotlin/app/revanced/util/resource/StringResource.kt
@@ -24,31 +24,31 @@ class StringResource(
                 if (value.startsWith('"') && value.endsWith('"')) {
                     // Raw strings allow unescaped single quote but not double quote.
                     if (!value.substring(1, value.length - 1).contains(Regex("(?
   الإعلانات
   مُصغَّرات فيديو بديلة
   الموجز
-  المشغل
-  التصميم العام
+  عام
+  مشغل
   شريط تقدم الفيديو
   التحكم عن طريق إيماءة التمرير
-  إعدادات متنوعة
+  متنوع
   الفيديو
+  إعادة قوائم إعدادات قديمة
   
   
   تعطيل تشغيل فيديوهات Shorts في الخلفية
@@ -1341,6 +1342,8 @@ Second \"item\" text"
   يجب أن تكون سرعات التشغيل المخصصة أقل من %s
   سرعة التشغيل المخصصة غير صالحة
   تلقائي
+  \"سرعة النقر مع الاستمرار المخصصة\"
+  سرعة التشغيل بين 0-8
   
   
   تذكر التغيرات في سرعة التشغيل
@@ -1386,7 +1389,6 @@ AVC لديه حد أقصى للدقة 1080p، لا يتوفر ترميز الص
 • مستوى الصوت الثابت غير متاح
 • فرض الصوت الأصلي غير متوفر"
   • لا يوجد ترميز الفيديو AV1
-  • لا يوجد فيديو HDR
   عرض في إحصاءات تقنية
   يتم عرض نوع العميل في إحصاءات تقنية
   تم إخفاء نوع العميل في إحصاءات تقنية
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 7f22ce3bd..d1109501c 100644
--- a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml
+++ b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml
@@ -132,11 +132,9 @@ Davam et düyməsinə toxun və optimallaşdırma dəyişikliklərin qəbul et."
   Reklamlar
   Seçmə miniatürlər
   Axın
-  Oynadıcı
-  Ümumi tərtibat
+  Ümumi
   Axtarış çubuğu
   Sürüşdürmə nəzarətçiləri
-  Müxtəlif
   Video
   
   
@@ -1341,6 +1339,8 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
   Fərdi sürətlər %s dəyərindən az olmalıdır
   Fərdi oynatma sürətləri etibarsızdır
   Avtomatik
+  Xüsusi toxunma və saxlanma sürəti
+  0-8 arası oynatma sürəti
   
   
   Oynatma sürəti dəyişikliklərin xatırla
@@ -1386,7 +1386,6 @@ AVC maksimum 1080p görüntü imkanına malikdir, Opus audio kodlama olmur və v
 • Sabit səs səviyyəsi yoxdur
 • İlkin səsi məcbur etmə mümkün deyil"
   • AV1 video kodlayıcı yoxdur
-  • HDR video yoxdur
   İstək üçün Statistikada göstər
   Qəbuledici növü Nerdlər üçün statistikada göstərilir
   Qəbuledici nerd üçün Statistikada gizlidir
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 7ef9519bc..708100331 100644
--- a/patches/src/main/resources/addresources/values-be-rBY/strings.xml
+++ b/patches/src/main/resources/addresources/values-be-rBY/strings.xml
@@ -22,8 +22,8 @@ Second \"item\" text"
 
   
   
-  \"Правядзенне праверкі асяроддзя не ўдалося\"
-  \"Адкрыць афіцыйны вэб-сайт\"
+  Праверкі не пройдзены
+  Адкрыць афіцыйны вэб-сайт
   Ігнараваць
   <h5>Гэта дадатак відавочна не з\'яўляецца патчам.</h5><br>Гэта дадатак можа працаваць няправільна, а таксама можа быць <b>небяспечным або нават небяспечным у выкарыстанні</b>.<br><br>Гэтыя праверкі азначаюць, што гэта дадатак было загаддзя перароблена або атрымана ад кагосьці іншага:<br><br><small>%1$s</small><br>Настойліва рэкамендуецца <b>выдаліць гэты дадатак і перарабіць яго самастойна</b>, каб пераканацца, што вы выкарыстоўваеце правераны і бяспечны дадатак.<p><br>Калі ігнараваць, гэта папярэджанне будзе паказана толькі два разы.
   Адкарэктавана на іншай прыладзе
@@ -33,6 +33,7 @@ Second \"item\" text"
   Дата стварэння APK пашкоджана
   
   
+  Налады
   ReVanced
   Вы хочаце працягнуць?
   Скінуць
@@ -133,13 +134,16 @@ Second \"item\" text"
   Аб\"явы
   Альтэрнатыўныя мініяцюры
   Карміць
-  Гулец
-  Генеральная планіроўка
+  Агульнае
+  Плэер
   Shorts
   Панэль пошуку
   Элементы кіравання пальцам
   Рознае
   Відэа
+  Аднавіць старое меню налад
+  Старыя меню налад паказваюцца
+  Старыя меню налад не паказваюцца
   
   
   Адключыць прайграванне Shorts у фонавым
@@ -1108,6 +1112,7 @@ Second \"item\" text"
                  This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
   Падробка мэтавай версіі праграмы
   19.35.36 — Восстановить старые значки плеера Shorts
+  19.26.42 - Аднаўленне старых значкоў навігацыі
   
   18.33.40 - Аднаўленне RYD на Shorts у рэжыме інкогніта
   18.20.39 - Аднавіць хуткасць шырокага відэа & якаснае меню
@@ -1342,6 +1347,8 @@ Second \"item\" text"
   Нестандартныя хуткасці павінны быць менш за %s
   Несапраўдныя нестандартныя хуткасці прайгравання
   Аўто
+  Уласны хуткасць націску і ўтрымання
+  Хуткасць прайгравання між 0-8
   
   
   Запомніце змены хуткасці прайгравання
@@ -1387,7 +1394,6 @@ AVC мае максімальнае дазвол 1080p, аўдыёкадэк Opu
 • Стабільны гук недаступны
 • Прымусовае арыгінальнае аўдыё недаступна"
   • Няма відэакідавання AV1
-  • Няма відэа HDR
   Паказаць у статыстыцы для спецыялістаў
   Тып кліента адлюстроўваецца ў статыстыцы для спецыялістаў
   Кліент схаваны ў статыстыцы для спецыялістаў
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 d5a315240..277f3304d 100644
--- a/patches/src/main/resources/addresources/values-bg-rBG/strings.xml
+++ b/patches/src/main/resources/addresources/values-bg-rBG/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Датата на компилация на APK е повредена
   
   
+  Настройки
   ReVanced
   Искате ли да продължите?
   Възстанови
@@ -133,12 +134,15 @@ Second \"item\" text"
   Реклами
   Алтернативни миниатюри
   Поток
-  Плейър
-  Общо оформление
+  Общ
+  Плеър
   Лента за прогрес на видеото
   Контроли с плъзгане
   Разни
   Видео
+  Възстановяване на старите менюта за настройки
+  Старите менюта с настройки се показват
+  Старите менюта с настройки не се показват
   
   
   Възпроизвеждане на  Shorts в фонов режим
@@ -1077,7 +1081,7 @@ Second \"item\" text"
   Данните са предоставени от SponsorBlock API. Докоснете тук за повече информация и изтеглияния
   
   
-  Форм фактор на оформлението
+  Формат на екрана /Таблет, Телфон, .../
   По подразбиране
   Телефон
   Таблет
@@ -1341,6 +1345,8 @@ Second \"item\" text"
   Персонализираните скорости трябва да са по-малки от %s
   Невалидни персонализирани скорости на възпроизвеждане
   Авто
+  Персонализирана скорост при докосване и задържане
+  Скорост на възпроизвеждане между 0-8
   
   
   Запомни промените в скоростта на възпроизвеждане
@@ -1386,7 +1392,6 @@ AVC има максимална резолюция от 1080p, Opus аудио 
 • Ne e nali4na stabilna glasnost
 • Ne e nali4na forsirana originalna audio pista"
   • Без AV1 видео кодек
-  • Без HDR видео
   Poka6i v Statistiki za nerds
   Tipът na klienta se poka6va v Statistiki za nerds
   Klientът e skriт v Statistiki za nerds
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 6e1853b1b..f38c097fe 100644
--- a/patches/src/main/resources/addresources/values-bn-rBD/strings.xml
+++ b/patches/src/main/resources/addresources/values-bn-rBD/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK তৈরির তারিখ ত্রুটিপূর্ণ
   
   
+  সেটিংস
   ReVanced
   আপনি কি এগিয়ে যেতে ইচ্ছুক?
   আবার সেট করুন
@@ -133,13 +134,16 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
   বিজ্ঞাপন
   বিকল্প থাম্বনেইল
   ফিড
-  প্লেয়ার
-  সাধারণ লে-আউট
+  সাধারণ
+  প্লেয়ার
   Shorts
   সিকবার
   সোয়াইপ কন্ট্রোল
   বিবিধ
   ভিডিও
+  পুরানো সেটিংস মেনু পুনরুদ্ধার করুন
+  পুরাতন সেটিংস মেনু দেখানো হচ্ছে
+  পুরাতন সেটিংস মেনু দেখানো হচ্ছে না
   
   
   Shorts ব্যাকগ্রাউন্ড প্লে অক্ষম করুন
@@ -1343,6 +1347,8 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
   কাস্টম গতি %s এর চেয়ে কম হতে হবে
   অবৈধ কাস্টম প্লেব্যাক গতি
   স্বতস্ফূর্তভাবে
+  কাস্টম ট্যাপ এন্ড হোল্ড স্পিড
+  ০-৮ এর মধ্যে প্লেব্যাক স্পিড
   
   
   প্লেব্যাকের স্পিড পরিবর্তন মনে রাখুন
@@ -1388,7 +1394,6 @@ AVC-এর সর্বোচ্চ রেজোলিউশন হল 1080p, Op
 • স্থির ভলিউম পাওয়া যায় না
 • মূল অডিও জোর করে চালু করা যায় না"
   • কোনো AV1 ভিডিও কোডেক নেই
-  • কোনো HDR ভিডিও নেই
   স্ট্যাটস ফর নার্ডসে দেখান
   স্ট্যাটস ফর নার্ডসে ক্লায়েন্ট প্রকার দেখানো হবে
   স্ট্যাটস ফর নার্ডসে ক্লায়েন্ট লুকানো হবে
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 7c80df7fe..c5078475d 100644
--- a/patches/src/main/resources/addresources/values-ca-rES/strings.xml
+++ b/patches/src/main/resources/addresources/values-ca-rES/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   La data de creació de l\'APK està corrupta
   
   
+  Configuració
   ReVanced
   Vols continuar?
   Restablir
@@ -133,13 +134,16 @@ Toca el botó Continua i permet els canvis d'optimització."
   Anuncis
   Miniatures alternatives
   Canal
-  Reproductor
-  Disposició general
+  General
+  Reproductor
   Shorts
   Barra de cerca
   Controls de gestos
-  Misc
+  Altres
   Vídeo
+  Restaurar els menús de configuració antics
+  Es mostren els menús de configuració antics
+  No es mostren els menús de configuració antics
   
   
   Desactivar la reproducció en segon pla de Shorts
@@ -695,8 +699,11 @@ Nota: si actives aquesta opció, també s'amaguen els anuncis de vídeo per for
   Amagat al feed de subscripcions
   Es mostra al feed de subscripcions
   Amaga Shorts als resultats de la cerca
+  Ocult als resultats de la cerca
   Es mostra als resultats de la cerca
+  Amaga els curts a l\'historial de visualitzacions
   Amagat a l\'historial de visualitzacions
+  Es mostra a l\'historial de visualitzacions
   
   Amaga el botó d\'unió
   El botó d\'unió està ocult
@@ -1103,6 +1110,7 @@ Si després es desactiva, es recomana esborrar les dades de l'aplicació per evi
                  This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
   Objectiu de la versió falsa de l\'aplicació
   19.35.36 - Restaura els icones vells del reproductor de Shorts
+  26.19.42 - restaura les icones de navegació antigues
   
   18.33.40 - Restaura RYD al mode d\'incògnit de Shorts
   18.20.39 - Restaura la velocitat àmplia del vídeo & menú de qualitat
@@ -1338,6 +1346,8 @@ Si actives aquesta opció, es poden desbloquejar qualitats de vídeo més altes"
   Les velocitats personalitzades han de ser inferiors a %s
   Velocitats de reproducció personalitzades no vàlides
   Automàtic
+  Velocitat personalitzada de mantenir premut
+  Velocitat de reproducció entre 0 i 8
   
   
   Recorda els canvis de velocitat de reproducció
@@ -1383,7 +1393,6 @@ L'AVC té una resolució màxima de 1080p, el còdec d'àudio Opus no està disp
 • El volum estable no està disponible
 • Forçar l'àudio original no està disponible"
   • Sense còdec de vídeo AV1
-  • Sense vídeo HDR
   Mostra a l\'apartat \'Dades per a experts\'
   El tipus de client es mostra a l\'apartat \'Dades per a experts\'
   El client s\'amaga a l\'apartat \'Dades per a experts\'
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 e85efde4f..d396bd89b 100644
--- a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml
+++ b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Datum sestavení souboru APK je poškozeno
   
   
+  Nastavení
   ReVanced
   Přejete si pokračovat?
   Výchozí
@@ -133,13 +134,16 @@ Klepněte na tlačítko Pokračovat a povolte změny optimalizace."
   Reklamy
   Alternativní náhledy
   Přísun
-  Přehrávač
-  Celkové rozložení
+  Obecné
+  Přehrávač
   Shorts
   Lišta
   Ovládání gesty
-  Ostatní
+  Různé
   Video
+  Obnovit staré menu nastavení
+  Staré menu nastavení se zobrazují
+  Staré menu nastavení se nezobrazují
   
   
   Zakázat automatické přehrávání Shorts v pozadí
@@ -1341,6 +1345,8 @@ Povolením této funkce lze odemknout vyšší kvality videa"
   Vlastní rychlosti musí být menší než %s
   Neplatné vlastní rychlosti přehrávání
   Automaticky
+  Vlastní rychlost stisknutí a podržení
+  Rychlost přehrávání 0 až 8
   
   
   Pamatovat si změny rychlosti přehrávání
@@ -1386,7 +1392,6 @@ AVC má maximální rozlišení 1080p, zvukový kodek Opus není dostupný a př
 • Není k dispozici stabilní hlasitost
 • Není k dispozici možnost vynucení originálního zvuku"
   • Žádný video kodek AV1
-  • Žádné HDR video
   Zobrazit ve statistikách pro nadšence
   Typ klienta se zobrazuje ve statistikách pro nadšence
   Klient je skrytý ve statistikách pro nadšence
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 60029cf1d..f6c173211 100644
--- a/patches/src/main/resources/addresources/values-da-rDK/strings.xml
+++ b/patches/src/main/resources/addresources/values-da-rDK/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK byggedato er ødelagt
   
   
+  Indstillinger
   ReVanced
   Ønsker du at fortsætte?
   Nulstil
@@ -44,7 +45,9 @@ Second \"item\" text"
   Importerede %d indstillinger
   Import mislykkedes: %s
   ReVanced-sprog
-  "Oversættelser for nogle sprog mangler muligvis eller er ufuldstændige.\n\nFor at oversætte til nye sprog skal du besøge translate.revanced.app"
+  "Oversættelser for nogle sprog mangler muligvis eller er ufuldstændige.
+
+For at oversætte til nye sprog skal du besøge translate.revanced.app"
   App-sprog
   Arabisk
   Aserbajdsjansk
@@ -131,13 +134,16 @@ Tryk på fortsætknappen, og tillad ændringer af optimering."
   Annoncer
   Alternative miniaturer
   Fodring
-  Spiller
-  Generelt layout
+  Generelt
+  Afspiller
   Shorts
   Søgebjælke
   Stryg kontrolelementer
   Diverse
   Videoer
+  Gendan gamle indstillingsmenuer
+  Gamle indstillingsmenuer vises
+  Gamle indstillingsmenuer vises ikke
   
   
   Deaktiver afspilning af Shorts i baggrunden
@@ -1340,6 +1346,8 @@ Aktivering af dette kan låse op for højere videokvalitet"
   Brugerdefinerede hastigheder skal være mindre end %s
   Ugyldige brugerdefinerede afspilningshastigheder
   Automatisk
+  Brugerdefineret hastighed, når du holder den nede
+  Afspilningshastighed mellem 0-8
   
   
   Husk ændringer i afspilningshastighed
@@ -1383,7 +1391,6 @@ Videoafspilning virker muligvis ikke"
 • Stabil lydstyrke er ikke tilgængelig
 • Gennemtving original lyd er ikke tilgængelig"
   • Intet AV1-videokodek
-  • Intet HDR-video
   Vis i Statistik for nørder
   Klienttypen vises i Statistik for nørder
   Klienten er skjult i Statistik for nørder
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 7b27b2d9f..c6b08af54 100644
--- a/patches/src/main/resources/addresources/values-de-rDE/strings.xml
+++ b/patches/src/main/resources/addresources/values-de-rDE/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK-Erstellungsdatum ist beschädigt
   
   
+  Einstellungen
   ReVanced
   Möchtest du fortfahren?
   Zurücksetzen
@@ -129,13 +130,16 @@ Tippen Sie auf die Schaltfläche \"Fortfahren\" und erlauben Sie die Optimierung
   Werbung
   Alternative Thumbnails
   Feed
-  Player
-  Generelles Layout
+  Allgemein
+  Spieler
   Shorts
   Suchleiste
   Wischgesten
-  Sonstiges
+  Verschiedenes
   Video
+  Alte Einstellungsmenüs wiederherstellen
+  Alte Einstellungsmenüs werden angezeigt
+  Alte Einstellungsmenüs werden nicht angezeigt
   
   
   Shorts-Hintergrundwiedergabe deaktivieren
@@ -1308,7 +1312,7 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w
   Original Audio erzwingen
   Originales Audio verwenden
   Standardaudio verwenden
-  Um diese Funktion zu nutzen, ändern Sie das Stream-Spoofing auf den iOS-Clienttyp
+  Um diese Funktion zu nutzen, ändern Sie das Stream-Spoofing auf den iOS-Clienttyp.
   
   
   
@@ -1336,6 +1340,8 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w
   Benutzerdefinierte Geschwindigkeiten müssen kleiner als %s sein
   Ungültige benutzerdefinierte Wiedergabegeschwindigkeiten
   Autom
+  Benutzerdefinierte Geschwindigkeit bei Tippen und Halten
+  Abspielgeschwindigkeit zwischen 0-8x
   
   
   Änderungen der Wiedergabegeschwindigkeit merken
@@ -1381,7 +1387,6 @@ AVC hat eine maximale Auflösung von 1080p, Opus-Audiocodec ist nicht verfügbar
 • Stabile Lautstärke ist nicht verfügbar
 • Original-Audio erzwingen ist nicht verfügbar"
   • Kein AV1-Videocodec
-  • Keine HDR-Videos
   In Statistiken für Nerds anzeigen
   Der Client-Typ wird in den Statistiken für Nerds angezeigt
   Der Client wird in den Statistiken für Nerds ausgeblendet
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 b26aefdd6..9d3eb4a69 100644
--- a/patches/src/main/resources/addresources/values-el-rGR/strings.xml
+++ b/patches/src/main/resources/addresources/values-el-rGR/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Η ημερομηνία κατασκευής του APK είναι κατεστραμμένη
   
   
+  Ρυθμίσεις
   ReVanced
   Θέλετε να συνεχίσετε;
   Επαναφορά
@@ -46,7 +47,7 @@ Second \"item\" text"
   Γλώσσα ρυθμίσεων ReVanced
   "Οι μεταφράσεις για κάποιες γλώσσες ενδέχεται να λείπουν ή να είναι ελλιπείς. 
 
-Για να μεταφράσετε νέες γλώσσες, επισκεφθείτε τη διεύθυνση translate.revanced.app"
+Για να μεταφράσετε σε νέες γλώσσες, επισκεφθείτε τη διεύθυνση translate.revanced.app"
   Γλώσσα εφαρμογής
   Αραβικά
   Αζερμπαϊτζάν
@@ -63,7 +64,7 @@ Second \"item\" text"
   Περσικά
   Φινλανδικά
   Γαλλικά
-  Γκουτζαρατί
+  Γκουτζαρατικά
   Χίντι
   Κροατικά
   Ουγγρικά
@@ -85,10 +86,10 @@ Second \"item\" text"
   Πολωνικά
   Πορτογαλικά
   Ρουμανικά
-  Ρωσικά
+  Ρώσικα
   Σλοβακικά
   Σλοβενικά
-  Σερβικά
+  Σέρβικα
   Σουηδικά
   Σουαχίλι
   Ταμίλ
@@ -133,13 +134,16 @@ Second \"item\" text"
   Διαφημίσεις
   Εναλλακτικές μικρογραφίες
   Ροή
-  Οθόνη αναπαραγωγής
-  Γενική διάταξη
+  Γενικά
+  Οθόνη αναπαραγωγής
   Shorts
   Γραμμή προόδου βίντεο
   Έλεγχος με σάρωση οθόνης
   Διάφορα
   Βίντεο
+  Επαναφορά παλιών μενού ρυθμίσεων
+  Τα παλιά μενού ρυθμίσεων εμφανίζονται
+  Τα νέα μενού ρυθμίσεων εμφανίζονται
   
   
   Απενεργοποίηση αναπαραγωγής παρασκηνίου για τα Shorts
@@ -262,7 +266,7 @@ Second \"item\" text"
   Παιχνίδια YouTube
   Κρυμμένα
   Εμφανίζονται
-  Γρήγορες ενέργειες σε πλήρη οθόνη
+  Γρήγορες ενέργειες στην πλήρη οθόνη
   Εμφανίζονται
   Εμφανίζονται
   Σχετικά βίντεο στις γρήγορες ενέργειες
@@ -313,7 +317,7 @@ Second \"item\" text"
   Εμφανίζεται
   Σχόλια
   Απόκρυψη ή εμφάνιση στοιχείων στα σχόλια
-  Σύνοψη συνομιλίας
+  Σύνοψη συζήτησης
   Κρυμμένη
   Εμφανίζεται
   Ετικέτα «Σχόλια από μέλη»
@@ -1341,6 +1345,8 @@ Second \"item\" text"
   Οι ταχύτητες πρέπει να είναι μικρότερες από %sx
   Μη έγκυρες προσαρμοσμένες ταχύτητες αναπαραγωγής
   Αυτόματη
+  Προσαρμοσμένη ταχύτητα παρατεταμένου πατήματος
+  Ταχύτητα αναπαραγωγής μεταξύ 0-8
   
   
   Απομνημόνευση αλλαγών ταχύτητας αναπαραγωγής
@@ -1386,7 +1392,6 @@ Second \"item\" text"
 • Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη
 • Η λειτουργία «Εξαναγκασμός αρχικού ήχου» δεν είναι διαθέσιμη"
   • Δεν υπάρχει ο κωδικοποιητής βίντεο AV1
-  • Δεν υπάρχει ποιότητα βίντεο HDR
   Εμφάνιση στο μενού «Στατιστικά για σπασίκλες»
   Το πρόγραμμα πελάτη εμφανίζεται στο μενού «Στατιστικά για σπασίκλες»
   Το πρόγραμμα πελάτη δεν εμφανίζεται στο μενού «Στατιστικά για σπασίκλες»
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 4eb732acc..e5d3715f2 100644
--- a/patches/src/main/resources/addresources/values-es-rES/strings.xml
+++ b/patches/src/main/resources/addresources/values-es-rES/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   La fecha de compilación del APK está dañada
   
   
+  Ajustes
   ReVanced
   ¿Desea continuar?
   Restablecer
@@ -125,13 +126,16 @@ Para traducir nuevos idiomas, visita translate.revanced.app"
   Anuncios
   Miniaturas alternativas
   Fuente
-  Reproductor
-  Diseño general
+  General
+  Reproductor
   Shorts
   Barra
   Controles de deslizamiento
   Miscelánea
   Video
+  Restaurar los menús de configuración antiguos
+  Se muestran los menús de configuración antiguos
+  No se muestran los menús de configuración antiguos
   
   
   Desactivar la reproducción en segundo plano de Shorts
@@ -1323,6 +1327,8 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"
   Las velocidades personalizadas deben ser menores que %s
   Velocidades de reproducción personalizadas no válidas
   Automático
+  Velocidad personalizada al tocar y mantener
+  Velocidad de reproducción entre 0-8
   
   
   Recordar cambios de velocidad de reproducción
@@ -1368,7 +1374,6 @@ AVC tiene una resolución máxima de 1080p, el códec de audio Opus no está dis
 • El volumen estable no está disponible
 • Forzar el audio original no está disponible"
   • No AV1 códec de vídeo
-  • No HDR vídeo
   Mostrar en Estadísticas para nerds
   El tipo de cliente se muestra en Estadísticas para nerds
   El cliente está oculto en Estadísticas para nerds
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 58dcfd960..21beb8865 100644
--- a/patches/src/main/resources/addresources/values-et-rEE/strings.xml
+++ b/patches/src/main/resources/addresources/values-et-rEE/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK ehituskuupäev on rikutud
   
   
+  Seaded
   ReVanced
   Kas soovite jätkata?
   Lähtesta
@@ -133,13 +134,16 @@ Vajutage jätkamise nuppu ja lubage optimeerimismuutused."
   Reklaamid
   Alternatiivsed pisipildid
   Voog
-  Mängija
-  Üldine paigutus
+  Üldine
+  Mängija
   Shorts
   Otsinguriba
   Pühkimisjuhtimine
-  Muud
+  Mitmesugused
   Video
+  Taasta vanad seadete menüüd
+  Vanad seadete menüüd on kuvatud
+  Vanad seadete menüüd ei ole kuvatud
   
   
   Shorts taustavideo esitamine lülitada
@@ -1343,6 +1347,8 @@ Selle lubamine võib avada kõrgema video kvaliteedi"
   Kohandatud kiirused peavad olema alla %s
   Kehtetud kohandatud video taasesituse kiirused
   Auto
+  Kohandatud puuduta ja hoia kiiruse tase
+  Taasesituse kiirus vahemikus 0-8
   
   
   Määle taasesituse kiiruse muudatused meelde
@@ -1388,7 +1394,6 @@ AVC-l on maksimaalne eraldusvõime 1080p, Opus-i heli kodek pole saadaval ning v
 • Stabiilset helitugevust pole saadaval
 • Sunnitud originaalheli pole saadaval"
   • Puuduv AV1 videokoodek
-  • Puuduv HDR video
   Kuva statistikas \"Nerdide jaoks\"
   Klienditüüp on statistikas \"Nerdide jaoks\" nähtav
   Klient on statistikas \"Nerdide jaoks\" peidetud
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 297e273d9..06bf84206 100644
--- a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml
+++ b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml
@@ -133,12 +133,9 @@ Napauta jatka-painiketta ja salli optimoinnin muutokset."
   Mainokset
   Vaihtoehtoiset pikkukuvat
   Syöte
-  Soitin
-  Yleinen asettelu
   Shorts
   Liukusäädin
   Pyyhkäisyohjaus
-  Sekalaiset
   Video
   
   
@@ -1342,6 +1339,8 @@ Tämä voi avata korkealaatuisemmat videot"
   Mukautetut nopeudet on oltava alle %s
   Virheelliset mukautetut toiston nopeudet
   Automaattinen
+  Mukautettu napauta ja pidä pohjassa -nopeus
+  Toistonopeus 0–8 välillä
   
   
   Muista toistonopeuden muutokset
@@ -1386,6 +1385,7 @@ AVC:n maksimiresoluutio on 1080p, Opus-äänikoodekki ei ole käytettävissä, j
   "• Ääniraitavalikko puuttuu
 • Tasainen äänenvoimakkuus ei ole käytettävissä
 • Alkuperäisen äänen pakotus ei ole käytettävissä"
+  • Ei AV1-videokoodekkia
   Näytä teknisissä tiedoissa
   Asiakastyyppi näytetään teknisissä tiedoissa
   Asiakastyyppi on piilotettu teknisissä tiedoissa
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 0b0776578..fb9af0aeb 100644
--- a/patches/src/main/resources/addresources/values-fil-rPH/strings.xml
+++ b/patches/src/main/resources/addresources/values-fil-rPH/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Ang petsa ng pagbuo ng APK ay sira
   
   
+  Mga Setting
   ReVanced
   Gusto mo bang magpatuloy?
   I-reset
@@ -133,13 +134,16 @@ Tapikin ang pindutan ng pagpapatuloy at payagan ang mga pagbabago sa pag-optimiz
   Mga ad
   Mga alternatibong thumbnail
   Magpakain
-  Manlalaro
-  Pangkalahatang layout
+  Pangkalahatan
+  Manlalaro
   Shorts
   Seekbar
   Mga kontrol sa pag-swipe
   Iba pa
   Video
+  Ibalik ang dating mga menu ng setting
+  Ipinapakita ang mga lumang menu ng setting
+  Hindi ipinapakita ang mga lumang menu ng setting
   
   
   I-disable ang pag-playback ng Shorts sa background
@@ -1339,6 +1343,8 @@ Ang pagpapagana nito ay maaaring magbukas ng mas mataas na kalidad ng video"Ang mga custom na bilis ay dapat na mas mababa sa %s
   Hindi wastong custom na bilis ng paglalaro
   Awtomatik
+  Custom speed para sa pag-tap at pag-hold
+  Tugtugin ang bilis ng playback sa pagitan ng 0-8
   
   
   Tandaan ang mga pagbabago sa bilis ng pag-playback
@@ -1384,7 +1390,6 @@ Ang AVC ay may pinakamataas na resolusyon na 1080p, ang codec ng audio ng Opus a
 • Hindi magagamit ang stable na volume
 • Hindi magagamit ang pagpilit sa orihinal na audio"
   • Walang AV1 video codec
-  • Walang HDR video
   Ipakita sa Mga Istatistika para sa mga nerds
   Ipinapakita ang uri ng kliyente sa Mga Istatistika para sa mga nerds
   Nakatago ang kliyente sa Mga Istatistika para sa mga nerds
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 795707b5c..a4f7b831d 100644
--- a/patches/src/main/resources/addresources/values-fr-rFR/strings.xml
+++ b/patches/src/main/resources/addresources/values-fr-rFR/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   La date de construction de l\'APK est corrompue
   
   
+  Paramètres
   ReVanced
   Voulez-vous continuer ?
   Réinitialiser
@@ -133,13 +134,16 @@ Appuyez sur le bouton Continuer et autorisez les modifications d'optimisation."<
   Annonces
   Miniatures alternatives
   Flux
-  Lecteur
-  Présentation générale
+  Général
+  Lecteur
   Shorts
   Barre de recherche
   Commandes de balayage
   Divers
   Vidéo
+  Restaurer les anciens menus des paramètres
+  Les anciens menus de paramètres sont affichés
+  Les anciens menus de paramètres ne sont pas affichés
   
   
   Désactiver la lecture en arrière-plan des Shorts
@@ -1248,7 +1252,7 @@ Appuyez ici pour en savoir plus sur DeArrow"
   Captures vidéo
   Des captures d\'écran immobiles sont toujours prises au début, au milieu et à la fin de chaque vidéo. Ces images sont intégrées à YouTube et aucune API externe n\'est utilisée
   Utiliser des captures instantanées
-  Utiliser des captures fixes de qualité moyenne
+  Utilisez des captures d\'écran de qualité moyenne. Les vignettes se chargeront plus rapidement, mais les flux en direct, les vidéos inédites ou très anciennes peuvent afficher des vignettes vides
   Utiliser des captures fixes de haute qualité
   Datation de la vidéo pour prendre des captures
   Début de la vidéo
@@ -1342,6 +1346,8 @@ L'activation de cette option peut déverrouiller des qualités vidéo plus élev
   Les vitesses personnalisées doivent être inférieures à %s
   Vitesses de lecture personnalisées non valides
   Automatique
+  Vitesse de la lecture tactile
+  Vitesse de lecture entre 0-8
   
   
   Se souvenir des changements de vitesse de lecture
@@ -1387,7 +1393,6 @@ AVC a une résolution maximale de 1080p, le codec audio Opus n'est pas disponibl
  • Le volume stable n'est pas disponible
  • Forcer l'audio d'origine n'est pas disponible"
   • Aucun codec vidéo AV1
-  • Pas de vidéo HDR
   Afficher les Stats pour les nerds
   Le type de client est affiché dans les Stats pour les nerds
   Le client est caché dans les Stats pour les nerds
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 a7a5e282f..369491667 100644
--- a/patches/src/main/resources/addresources/values-ga-rIE/strings.xml
+++ b/patches/src/main/resources/addresources/values-ga-rIE/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Tá dáta tógála APK truaillithe
   
   
+  Socruithe
   ReVanced
   Ar mhaith leat dul ar aghaidh?
   Athshocraigh
@@ -133,13 +134,16 @@ Brúigh an cnaipe leanúnaí agus ligean athruithe optúimíochta."
   Fógraí
   Mionsamhlacha malartacha
   Fotha
-  Seinnteoir
-  Leagan amach ginearálta
+  Ginearálta
+  Seinnteoir
   Shorts
   Barra Cuardaigh
   Rialuithe Svaidhpeála
-  Ilchineálach
+  Éagsúla
   Físeán
+  Athshocraigh roghanna seanghléasanna
+  Féachann roghanna seanmhéid
+  Ní féachann roghanna seanmhéid
   
   
   Díchumasaigh seinnte Cúlra Shorts
@@ -283,7 +287,7 @@ Ní bheidh a fhios agat faoi aon imeachtaí neamhghnácha."
   Taispeántar \'Áiteanna faoi Thrácht\', rannóga Cluichí agus Ceoil
   Folaigh alt na gCaibidlí
   Tá an chuid Caibidil i bhfolach
-  Taispeántar cuid na Caibidlí
+  Taispeántar alt na gcaibidlí
   Folaigh an chuid \'Déan iniúchadh ar an bpodchraoladh \'
   Tá an chuid \'Iniúchadh ar an podchraoladh \'i bhfolach
   Taispeántar an chuid \'Déan iniúchadh ar an bpodchraoladh \'
@@ -295,7 +299,7 @@ Ní bheidh a fhios agat faoi aon imeachtaí neamhghnácha."
   Taispeántar alt ‘Príomhchoincheapa’
   Folaigh an chuid Trasscríbhinne
   Tá an chuid trasscríbhinne i bhfolach
-  Taispeántar alt an tras-scríbhinn
+  Taispeántar alt an trasscríbhinne
   Cur síos físeán
   Folaigh nó taispeáint comhpháirteanna tuairisc
   Barra scagaire
@@ -311,9 +315,9 @@ Ní bheidh a fhios agat faoi aon imeachtaí neamhghnácha."
   Taispeántar i bhfíseáin ghaolmhara
   Tuairimí
   Folaigh nó taispeáin comhpháirteanna na rannóige tuairimí
-  Cuir \'Achoimre tráchta\' i bhfolach
-  \'\'Folaíodh \'Achoimre cainte\'
-  \'\'Taispeántar \'Achoimre cainte\'
+  Folaigh \'achoimre comhrá\'
+  Tá ‘achoimre comhrá’ i bhfolach
+  Taispeántar ‘achoimre comhrá’
   Folaigh ceanntásc \'Tuairimí ag baill \'
   Tá ceanntásc \'Tuairimí ag comhaltaí \'i bhfolach
   Taispeántar ceanntásc \'Tuairimí ag comhaltaí\'
@@ -1343,6 +1347,8 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"
   Ní mór luas saincheaptha a bheith níos lú ná %s
   Luasanna athsheinm saincheaptha neamhbhailí
   Uathoibríoch
+  Luas tap is agus greim
+  Luas athsheinm eatarthu 0-8
   
   
   Cuimhnigh athruithe ar luas athsheinm
@@ -1388,7 +1394,6 @@ Tá réiteach uasmhéideach 1080p ag AVC, níl códú fuaime Opus ar fáil, agus
 • Níl imfhálú cobhsaí ar fáil
 • Níl an fhuaim bhunúsach ar fáil"
   • Níl aon chóidéir físe AV1
-  • Níl aon físe HDR
   Taispeáin i Staitisticí do nerds
   Taispeántar cineál an chliaint i Staitisticí do nerds
   Tá an cliant curtha i bhfolach i Staitisticí do nerds
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 bd432c06f..f46b3f12b 100644
--- a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml
+++ b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Az APK build dátuma sérült
   
   
+  Beállítások
   ReVanced
   Szeretné folytatni?
   Visszaállítás
@@ -133,12 +134,15 @@ Kattintson a folytatás gombra, és engedélyezze az optimalizálási módosít
   Hirdetések
   Alternatív indexképek
   Hírfolyam
-  Lejátszó
-  Általános elrendezés
+  Általános
+  Lejátszó
   Keresősáv
   Csúsztatási vezérlők
   Egyéb
   Videó
+  Régi beállítási menük visszaállítása
+  A régi beállítások menüpontok megjelennek
+  A régi beállítások menüpontok nem jelennek meg
   
   
   A Shorts háttérben történő lejátszásának letiltása
@@ -1340,6 +1344,8 @@ Ez a beállítás lehetővé teszi a magasabb videóminőségek feloldását"Az egyéni sebességeknek kevesebbnek kell lenniük, mint %s
   Érvénytelen egyéni lejátszási sebességek
   Automatikus
+  Egyéni koppintás és tartás sebesség
+  Lejátszási sebesség 0-8 között
   
   
   Lejátszási sebesség módosításainak megjegyzése
@@ -1385,7 +1391,6 @@ Az AVC maximális felbontása 1080p, az Opus audiokodek nem érhető el, és a v
 • Nem áll rendelkezésre stabil hangerő
 • Az eredeti hang kényszerítése nem érhető el"
   • Nincs AV1 videokodek
-  • Nincs HDR videó
   Megjelenítés a Statisztikákban
   A kliens típusa a Statisztikákban látható
   A kliens el van rejtve a Statisztikákban
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 2416c2eed..e574a2266 100644
--- a/patches/src/main/resources/addresources/values-hy-rAM/strings.xml
+++ b/patches/src/main/resources/addresources/values-hy-rAM/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK-ի ստեղծման ամսաթիվը հնացած է
   
   
+  Կարգավորումներ
   ReVanced
   Դուք ցանկանում եք շարունակել?
   Վերականգնել
@@ -133,13 +134,16 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
   Գովազդներ
   Ալտերնատիվ մանրապատկերներ
   Լրակազմ
-  Պլեյեր
-  Ընդհանուր  կառուցվածք
+  Ընդհանուր
+  Կատարող
   Shorts
   Վազքի գիծ
   Սահելի  վերահսկում
-  Միջին
+  Տարբեր
   Տեսանյութ
+  Վերականգնել հին սահմանումների մենյուները
+  Նախկին կարգավորումների մենյուները ցուցադրվում են
+  Նախկին կարգավորումների մենյուները չեն ցուցադրվում
   
   
   Անջատել  Shorts-ի  ֆոնային  վերարտադրությունը
@@ -688,6 +692,8 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
   Թաքցնել կամ ցույց տալ Shorts կրողի բաղադրիչները
   
   Թաքցնել Shorts-ը գլխավոր էջում
+  Թաքնված է տնային լրահոսում և հարակից տեսանյութերում
+  Ցուցադրված է հիմնական լրահոսում և հարակից տեսանյութերում
   
   Թաքցնել Shorts-ը բաժանորդագրության էջում
   Թաքնված է բաժանորդագրման կերակրման մեջ
@@ -1246,7 +1252,7 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի
   Կանգնած տեսանյութերի կադրեր
   Կանգնած կադրերը վերցվում են յուրաքանչյուր տեսանյութի սկզբից, կենտրոնից կամ վերջից: Այս պատկերները ներկառուցված են YouTube-ում և արտաքին API չի օգտագործվում
   Օգտագործել արագ կանգնած կադրեր
-  Միջին որակի կանգնած կադրեր օգտագործելով: Մանրապատկերները ավելի արագ կբեռնվեն, բայց  прямые эфиры,  невыпущенные  կամ շատ հին տեսանյութերը կարող են ցույց տալ դատարկ մանրապատկերներ
+  Օգտագործելով միջին որակի նկարահանումներ:  Մանրապատկերներն ավելի արագ կբեռնվեն, սակայն ուղիղ հեռարձակումները, չհրապարակված կամ շատ հին տեսանյութերը կարող են ցույց տալ դատարկ մանրապատկերներ
   Օգտագործել բարձր որակի կանգնած կադրեր
   Տեսանյութի ժամանակը, որից կանգնած կադրերը պետք է վերցվեն
   Տեսանյութի սկիզբը
@@ -1340,6 +1346,8 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի
   Պատրաստված արագությունները պետք է լինեն ավելի քիչ քան %s
   Չի աշխատում պատրաստված վերարտադրման արագությունները։
   Ավտո
+  Զգայական վերահսկում՝ անվանափոխման համար
+  Վերարտադրման արագությունը 0-8 միջակայքում
   
   
   Հիշել  տեսանյութի  վերարտադրման  արագության  փոփոխությունները
@@ -1385,7 +1393,6 @@ AVC-ի առավելագույն թույլտվությունը 1080p է, Opus ա
 • Ստաբիլ ձայն չկա
 • Իրական ձայնի ընտրությունը հասանելի չէ"
   • Հեռացված բոլոր AV1 վիդեո կոդեկները
-  • Հեռացված բոլոր HDR վիդեոները
   Ցուցադրել վիճակագրության ակնոցներում
   Հաճախորդի տեսակը ցուցադրվում է վիճակագրության ակնոցներում
   Հաճախորդը թաքնված է վիճակագրության ակնոցներում
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 b398dcf11..fad9938c1 100644
--- a/patches/src/main/resources/addresources/values-in-rID/strings.xml
+++ b/patches/src/main/resources/addresources/values-in-rID/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Tanggal pembuatan APK rusak
   
   
+  Pengaturan
   ReVanced
   Apakah Anda ingin melanjutkan?
   Setel ulang
@@ -133,12 +134,15 @@ Ketuk tombol lanjutkan dan izinkan perubahan pengoptimalan."
   Iklan
   Thumbnail alternatif
   Umpan
-  Pemutar
-  Layout umum
+  Umum
+  Pemutar
   Seekbar
   Kontrol usap
-  Lain-lain
+  Lainnya
   Video
+  Pulihkan menu pengaturan lama
+  Menu pengaturan lama ditampilkan
+  Menu pengaturan lama tidak ditampilkan
   
   
   Nonaktifkan pemutaran Shorts di latar belakang
@@ -1340,6 +1344,8 @@ Mengaktifkan ini dapat membuka kualitas video yang lebih tinggi"
   Kecepatan khusus harus kurang dari %s
   Kecepatan pemutaran khusus tidak valid
   Otomatis
+  Kecepatan ketuk dan tahan khusus
+  Kecepatan pemutaran antara 0-8
   
   
   Ingat perubahan kecepatan pemutaran
@@ -1384,8 +1390,7 @@ AVC memiliki resolusi maksimum 1080p, codec audio Opus tidak tersedia, dan pemut
   "• Menu trek audio tidak ada
 • Volume stabil tidak tersedia
 • Paksa audio asli tidak tersedia"
-  • Tidak ada video codec AV1
-  • Tidak ada video HDR
+  • Tidak ada codec video AV1
   Tampilkan di Statistik untuk nerds
   Jenis klien ditampilkan di Statistik untuk nerds
   Klien disembunyikan di Statistik untuk nerds
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 2d479dc9e..767dfe365 100644
--- a/patches/src/main/resources/addresources/values-it-rIT/strings.xml
+++ b/patches/src/main/resources/addresources/values-it-rIT/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   La data di compilazione dell\'APK è corrotta
   
   
+  Impostazioni
   ReVanced
   Sei sicuro di voler continuare?
   Reimposta
@@ -133,12 +134,15 @@ Tocca il pulsante Continua e consenti le modifiche di ottimizzazione."
   Pubblicità
   Miniature alternative
   Feed
-  Lettore
-  Interfaccia generale
+  Generale
+  Player
   Barra di avanzamento
   Controlli a gesti
   Varie
   Video
+  Ripristina vecchi menu impostazioni
+  I vecchi menu delle impostazioni vengono mostrati
+  I vecchi menu delle impostazioni non vengono mostrati
   
   
   Disattiva riproduzione Shorts in background
@@ -1226,7 +1230,7 @@ Abilitare questa opzione può risolvere le immagini mancanti che sono bloccate i
   
   Scheda Iscrizioni
   
-  Scheda Per Te
+  Scheda Tu
   Playlist e video consigliati
   Risultati della ricerca
   Miniature originali
@@ -1340,6 +1344,8 @@ Abilitare questa opzione può sbloccare qualità video più elevate"
   Le velocità personalizzate devono essere inferiori a %s
   Velocità di riproduzione personalizzata non valida
   Automatico
+  Velocità personalizzata di tocca e tieni premuto
+  Velocità di riproduzione tra 0-8
   
   
   Ricorda le modifiche della velocità di riproduzione
@@ -1385,7 +1391,6 @@ AVC ha una risoluzione massima di 1080p, il codec audio Opus non è disponibile
 • Il volume stabile non è disponibile
 • Forza l'audio originale non è disponibile"
   • Nessun codec video AV1
-  • Nessun video HDR
   Mostra nelle statistiche per nerd
   Il tipo di client è mostrato nelle statistiche per nerd
   Il client è nascosto nelle statistiche per nerd
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 154624f28..978849507 100644
--- a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml
+++ b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   תאריך בניית ה-APK שגוי
   
   
+  הגדרות
   האם תרצה להמשיך?
   איפוס
   רענן והפעל מחדש
@@ -66,8 +67,8 @@ Second \"item\" text"
   מודעות
   תמונות ממוזערות חלופיות
   פיד
-  נגן
-  פריסה כללית
+  כללי
+  שחקן
   סרגל חיפוש
   פקדי החלקה
   שונות
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 b54c2e758..88647fee4 100644
--- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml
+++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml
@@ -25,7 +25,7 @@ Second \"item\" text"
   チェックに失敗しました
   公式ウェブサイトを開く
   無視
-  <h5>このアプリは、あなたによってパッチが適用されていないようです。</h5><br>このアプリは正しく動作しない可能性があり、<b>有害または危険な可能性があります</b>。<br><br>これらのチェックは、このアプリがパッチ済みAPKであるか、または他のユーザーから取得されたことを示唆しています。<br><br><small>%1$s</small><br>このアプリを<b>アンインストールして、自分でパッチを適用する</b>ことを強くお勧めします。これにより、検証済みで安全なアプリを使用していることを確認できます。<p><br>無視した場合、この警告は2回のみ表示されます。
+  <b><h5>このアプリは、あなたによってパッチが適用されていないようです。</h5><br>このアプリは正しく動作しない可能性があり、<b>有害または危険な可能性があります</b>。<br><br>これらのチェックは、このアプリがパッチ済みAPKであるか、または他のユーザーから取得されたことを示唆しています。<br><br><small>%1$s</small><br>このアプリを<b>アンインストールして、自分でパッチを適用する</b>ことを強くお勧めします。これにより、検証済みで安全なアプリを使用していることを確認できます。<p><br>無視した場合、この警告は2回のみ表示されます。
   別のデバイス上でパッチを適用しました
   ReVanced Manager によってインストールされていません
   10分以上前にパッチを適用しました
@@ -33,6 +33,7 @@ Second \"item\" text"
   APKビルド日付が破損しています
   
   
+  セットゥンス
   続行しますか?
   リセット
   更新して再起動
@@ -43,68 +44,67 @@ Second \"item\" text"
   %d の設定をインポートしました
   インポート失敗: %s
   ReVancedの言語
-  "一部の言語に対する翻訳は欠落しているか、または不完全な可能性があります。
+  "一部の言語の翻訳が不足しているか、不完全である可能性があります。
 
-新しい言語を翻訳するには
-translate.revanced.appにアクセスしてください。"
+新しい言語を翻訳するには、translate.revanced.appにアクセスしてください。"
   アプリの言語
   アラビア語
-  アルバードルアー
+  アゼルバイジャン語
   ブルガリア語
   ベンガル語
   カタルーニャ語
-  ディキ
-  ダングル
-  ドイツル
-  ギリシア
+  チェコ語
+  デンマーク語
+  ドイツ語
+  ギリシャ語
   英語
-  スペインウォ
-  エストニア
-  パルスイ
-  フィンランド
-  フランスラ
-  グジャラートイ
-  ハンド
-  クロアツア
-  ハンガリンド
-  インドネシア
-  イタリア
+  スペイン語
+  エストニア語
+  ペルシャ語
+  フィンランド語
+  フランス語
+  グジャラート語
+  ヒンディー語
+  クロアチア語
+  ハンガリー語
+  インドネシア語
+  イタリア語
   日本語
-  カザファ
-  한국어
-  リトゥニアーア
-  ラトバイア
-  マケンガラ
-  モンゴル
-  マラート
-  マレー
-  ミルームーラート
-  ダーフレンズ
-  オリシア
-  パンブルジ
-  ポーランド
-  ポルトガル
-  ルーマニア
-  ロシアリ
-  スロバーア
-  スロベルトア
-  セルファ
-  スウェーデンタス
-  スワンラール
-  タマートル
-  テルグト
-  スペイ
-  トルコーア
-  ブクライナ
-  ウルドード
-  越南語
-  中文
+  カザフ語
+  韓国語
+  リトアニア語
+  ラトビア語
+  マケドニア語
+  モンゴル語
+  マラーティー語
+  マレー語
+  ミャンマー語
+  オランダ語
+  オディア語
+  パンジャブ語
+  ポーランド語
+  ポルトガル語
+  ルーマニア語
+  ロシア語
+  スロバキア語
+  スロベニア語
+  セルビア語
+  スウェーデン語
+  スワヒリ語
+  タミル語
+  テルグ語
+  タイ語
+  トルコ語
+  ウクライナ語
+  ウルドゥー語
+  ベトナム語
+  中国語
   インポート/エクスポート
   Revanced設定のインポート/エクスポート
   
   ReVanced Patchesのバージョン <i>%s</i> を使用しています
   メモ
-  このバージョンはプレリリースで、予期しない問題が発生する可能性があります。
+  このバージョンはプレリリース版であり、予期しない問題が発生する可能性があります。
   公式リンク
   
@@ -119,11 +119,11 @@ translate.revanced.appにアクセスしてください。"
 
 これは、アプリが機能するために必要です。"
   ウェブサイトを開く
-  "問題を回避するには、MicroG GmsCore のバッテリー最適化を無効にする必要があります。
+  "問題を防ぐためには、GmsCore の電池の最適化を無効にする必要があります。
 
-MicroG のバッテリー最適化を無効にしても、バッテリーの使用時間に悪影響はありません。
+GmsCore の電池の最適化を無効にしても、バッテリーの使用に悪影響を及ぼすことはありません。
 
-続行ボタンをタップして、最適化の変更を許可してください。"
+[続行] をタップして [電池の最適化] を無効にしてください。"
   続行
   
   
@@ -133,17 +133,20 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   広告
   代替サムネイル
   フィード
-  プレーヤー
-  全般レイアウト
+  一般
+  動画プレーヤー
   シークバー
   スワイプコントロール
   その他
   動画
+  以前の設定メニューを復元する
+  色シットサイズを表示する
+  色シットサイズを表示しない
   
   
   ショート動画のバックグラウンド再生を無効にする
   Shorts のバックグラウンド再生は無効になっています
-  Shorts のバックグラウンド再生は有効になっています
+  ショートのバックグラウンド再生を無効化します。
   
   
   デバッグ
@@ -151,12 +154,12 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   デバッグログ
   デバッグログは有効です
   デバッグログは無効です
-  ログプロトコルバッファ
-  デバッグログにはプロトバッファが含まれる
+  プロトコルバッファのログ
+  デバッグログにプロトバッファが含まれます
   デバッグログにはプロトバッファは含まれません
   スタックトレースのログ
-  デバッグログにスタックトレースを含む
-  デバッグログにスタックトレースが含まれていません
+  デバッグログにスタックトレースを含まれます
+  デバッグログにスタックトレースは含まれません
   ReVanced エラー時にトーストを表示
   エラーが発生した場合、トーストが表示されます
   エラーが発生した場合、トーストは表示されません
@@ -168,7 +171,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   高評価 / チャンネル登録ボタンのアニメーションを無効にする
   「高評価」と「チャンネル登録」ボタンのアニメーションは無効です
   「高評価」と「チャンネル登録」ボタンのアニメーションは有効です
-  アルバムカードを隠す
+  アルバムカードを非表示
   アルバムカードは非表示です
   アルバムカードは表示されます
   クラウドファンディングボックスを非表示
@@ -190,7 +193,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   欄が表示されます
   
-  「メンバーになる」ボタンを隠す
+  「メンバーになる」ボタンを非表示
   ボタンは非表示です
   ボタンは表示されます
   
@@ -199,7 +202,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   おすすめ欄は表示されます
   
-  「通知」ボタンを非表示
+  「通知を受け取る」ボタンを非表示
   ボタンは非表示です
   ボタンは表示されます
   
@@ -212,12 +215,12 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   ボタンは非表示です
   ボタンは表示されます
   Timed Reactions を非表示
-  Timed Reactions は非表示です
-  Timed Reactions は表示されます
+  Timed Reactions およびチャット欄のハートマークアイコンは表示されません
+  Timed Reactions およびチャット欄のハートマークアイコンは表示されます
   チャンネルガイドラインを非表示
   チャンネルガイドラインは非表示です
   チャンネルガイドラインは表示されます
-  チップ欄を隠す
+  チップ欄を非表示
   チップ欄は非表示です
   チップ欄が表示されています
   動画の下に表示される展開可能なチップを非表示
@@ -253,28 +256,28 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   医療情報パネルを非表示
   医療情報パネルは非表示です
   医療情報パネルは表示されます
-  チャンネルバーを隠す
+  チャンネルバーを非表示
   チャンネルバーは非表示です
   チャンネルバーは表示されます
   ゲームを非表示にする
   ゲームは非表示です
   ゲームは表示されます
-  全画面表示でクイックアクションを隠す
+  全画面表示でクイックアクションを非表示
   クイックアクションは非表示です
   クイックアクションを表示する
-  クイックアクションで関連動画を隠す
+  クイックアクションで関連動画を非表示
   関連動画は非表示です
   関連動画が表示されます
-  検索結果で画像欄を隠す
-  画像欄は非表示です
-  画像欄は表示されます
+  検索結果の画像欄を非表示
+  検索結果に画像欄は表示されません
+  検索結果に画像欄が表示されます
   最新の投稿を非表示
   最新の投稿は非表示です
   最新の投稿は表示されます
-  ミックスリストを隠す
+  ミックスリストを非表示
   ミックスリストは非表示です
   ミックスリストが表示されます
-  アーティストカードを隠す
+  アーティストカードを非表示
   アーティストカードは非表示です
   アーティストカードが表示されます
   属性セクションを非表示
@@ -286,13 +289,13 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   「ポッドキャストを探索」セクションを非表示
   「ポッドキャストを探索」セクションは非表示です
   「ポッドキャストを探索」セクションが表示されます
-  情報カードセクションを隠す
+  情報カードセクションを非表示
   情報カードセクションは非表示です
   情報カードセクションは表示されます
   「キーコンセプト」セクションを非表示
   「キーコンセプト」セクションは非表示です
   「キーコンセプト」セクションは表示されます
-  文字起こしセクションを隠す
+  文字起こしセクションを非表示
   文字起こしセクションは非表示です
   文字起こしセクションは表示されます
   概要欄
@@ -302,7 +305,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   フィードで非表示
   フィードで非表示です
   フィードでは表示されます
-  検索時に隠す
+  検索時に非表示
   検索で非表示です
   検索で表示されます
   関連動画で非表示
@@ -328,7 +331,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   Thanks ボタンを非表示
   「Thanks」ボタンは非表示です
   「Thanks」ボタンは表示されます
-  タイムスタンプと絵文字ボタンを隠す
+  タイムスタンプと絵文字ボタンを非表示
   タイムスタンプと絵文字ボタンは非表示です
   タイムスタンプと絵文字ボタンは表示されます
   
@@ -339,7 +342,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
 
 現在あなたの地域でDoodleが表示されており、この非表示設定がオンになっている場合、検索バーの下にあるフィルターバーも非表示になります。"
   カスタムフィルター
-  カスタムフィルタを使用してコンポーネントを隠す
+  カスタムフィルタを使用してコンポーネントを非表示
   カスタムフィルタを有効にする
   カスタムフィルタは有効です
   カスタムフィルタは無効です
@@ -385,52 +388,52 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   
   
   一般的な広告を非表示
-  一般的な広告は非表示です
+  一般的な広告は表示されません
   一般的な広告は表示されます
   全画面広告を非表示
-  "全画面広告が非表示になります
+  "全画面広告は表示されません
 
 この機能は、古いデバイスでのみ利用できます"
   全画面広告は表示されます
   ボタン付き広告を非表示
-  ボタン付き広告は非表示です
+  ボタン付き広告は表示されません
   ボタン付き広告は表示されます
-  プロモーションラベルを非表示
-  プロモーションラベルは非表示です
-  プロモーションラベルが表示されます
-  自己スポンサーカードを隠す
-  自己スポンサーカードは非表示です
+  「プロモーションを含みます」バナーを非表示
+  動画上に「プロモーションを含みます」バナーは表示されません
+  動画上に「プロモーションを含みます」バナーが表示されます
+  自己スポンサーカードを非表示
+  自己スポンサーカードは表示されません
   自己スポンサーカードは表示されます
-  商品を見るためのバナーを隠す
-  バナーは非表示です
-  バナーは表示されます
-  プレイヤーのショッピング棚を非表示
-  ショッピング棚は非表示です
-  ショッピング棚が表示されます
-  ビデオの説明内のショッピングリンクを非表示
-  ショッピングのリンクは非表示です
-  ショッピングのリンクは表示されます
+  「商品を表示」バナーを非表示
+  動画上に「商品を表示」バナーや商品バナーは表示されません
+  動画上に「商品を表示」バナーや商品バナーが表示されます
+  ストア広告を非表示
+  ストア広告は表示されません
+  ストア広告は表示されます
+  概要欄の商品へのリンクを非表示
+  概要欄に、タグ付けされた商品へのリンクおよび商品セクションは表示されません
+  概要欄に、タグ付けされた商品へのリンクまたは商品セクションが表示されます
   
-  チャンネルページの「ストアを見る」ボタンを非表示にする
-  ボタンは非表示です
-  ボタンは表示されます
-  ウェブ検索結果を隠す
-  ウェブ検索結果は非表示です
-  ウェブ検索結果が表示されます
+  チャンネルページの「ストアに移動」ボタンを非表示
+  チャンネルページに「ストアに移動」ボタンは表示されません
+  チャンネルページに「ストアに移動」ボタンが表示されます
+  ウェブ検索結果を非表示
+  ウェブ検索結果は表示されません
+  ウェブ検索結果は表示されます
   商品バナーを非表示
-  商品バナーは非表示です
+  商品バナーは表示されません
   商品バナーは表示されます
   
   全画面広告の非表示は、古い端末でのみ動作します
   
   
   YouTube Premium の広告を非表示
-  YouTube Premium の広告は非表示です
+  YouTube Premium の広告は表示されません
   YouTube Premium の広告は表示されます
   
   
-  動画広告を隠す
-  動画広告は非表示です
+  動画広告を非表示
+  動画広告は表示されません
   動画広告は表示されます
   
   
@@ -501,7 +504,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   オーバーレイの背景をスワイプ表示する
   スワイプの大きさのしきい値
   スワイプとして検出する量のしきい値
-  スワイプして動画を変更する
+  スワイプして動画を切り替え
   全画面モードでスワイプすると、次の/前の動画に切り替わります
   全画面モードでスワイプしても、次の/前の動画には切り替わりません
   
@@ -513,20 +516,20 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   
   アクションボタン
   ビデオ下のボタンを非表示または表示
-  高評価と低評価を隠す
+  高評価と低評価を非表示
   高評価ボタンと低評価ボタンは非表示になります
   高評価ボタンと低評価ボタンは表示されます
   
-  共有ボタンを隠す
+  共有を非表示
   共有ボタンは非表示です
   共有ボタンは表示されます
   
-  報告を隠す
+  報告を非表示
   報告ボタンは非表示です
   報告ボタンは表示されます
   
-  リミックスを隠す
+  リミックスを非表示
   リミックスボタンは非表示です
   リミックスボタンは表示されます
   
@@ -542,7 +545,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   クリップボタンは非表示です
   クリップボタンは表示されます
   
-  プレイリストに保存を隠す
+  プレイリストに保存を非表示
   プレイリストに保存ボタンは非表示です
   プレイリストに保存ボタンは表示されます
   
@@ -550,15 +553,15 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   ナビゲーションボタン
   ナビゲーションバーのボタンを非表示または変更
   
-  ホームを隠す
+  ホームを非表示
   ホームボタンは非表示です
   ホームボタンは表示されます
   
-  Shorts を隠す
+  ショートを非表示
   Shorts ボタンは非表示です
   Shorts ボタンは表示されます
   
-  作成を隠す
+  作成を非表示
   作成ボタンは非表示です
   作成ボタンは表示されます
   
@@ -571,16 +574,16 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
 
 注: これにより、動画広告も強制的に非表示になります"
   作成ボタンをと通知ボタンは入れ替わりません
-  ナビゲーションボタンのラベルを隠す
-  ラベルは非表示です
-  ラベルは表示されます
-  半透明ステータスバーを無効にする
-  ステータスバーは不透明です
-  ステータスバーは不透明または半透明です
-  明るい半透明のバーを無効にする
-  ライトモードのナビゲーションバーは不透明です
-  ライトモードのナビゲーションバーは不透明または半透明です
-  ダーク半透明バーを無効にする
+  ナビゲーションボタンをアイコンのみで表示
+  ナビゲーションボタンはアイコンのみで表示されます
+  ナビゲーションボタンはアイコンと文字で表示されます
+  半透明なステータスバーを無効化
+  ステータスバーを不透明にします。
+  ステータスバーを不透明にします。
+  明るい半透明なナビゲーションバーを無効化
+  ライトモードで半透明なナビゲーションバーを無効化します。
+  ライトモードで半透明なナビゲーションバーを無効化します。
+  暗い半透明なナビゲーションバーを無効化
   ダークモードのナビゲーションバーは不透明です
   ダークモードのナビゲーションバーは不透明または半透明です
   
@@ -596,18 +599,18 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   追加設定メニューは非表示です
   追加設定メニューは表示されます
   
-  スリープタイマーを隠す
+  スリープタイマーを非表示
   スリープタイマーメニューは非表示です
   スリープタイマーメニューが表示されます
   
-  動画ループを隠す
+  動画のループ再生を非表示
   動画ループメニューは非表示です
   動画ループメニューを表示する
   
-  アンビエントモードを隠す
+  アンビエント モードを非表示
   アンビエントモードメニューは非表示です
   アンビエントモードメニューは表示されます
-  安定した音量を隠す
+  一定音量を非表示
   安定した音量メニューが表示されます
   安定した音量メニューは非表示です
   
@@ -624,15 +627,15 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   詳細情報メニューは非表示です
   詳細情報メニューは表示されます
   
-  ロック画面を隠す
+  画面のロックを非表示
   ロック画面のメニューは非表示です
   ロック画面のメニューは表示されます
   
-  オーディオトラックを隠す
-  オーディオトラックメニューは非表示です
-  オーディオトラックメニューは表示されます
+  音声トラックを非表示
+  音声トラックは非表示です
+  音声トラックは表示されます
   
-  VRで見るを隠す
+  VR で見るを非表示
   VRで見るメニューは非表示です
   VR で見るメニューは表示されます
   画質メニューのフッターを非表示
@@ -643,14 +646,14 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   前の動画に戻る/次の動画に進むボタンを非表示
   ボタンは非表示です
   ボタンは表示されます
-  キャストボタンを隠す
+  キャストボタンを非表示
   キャスト ボタンは非表示です
   キャスト ボタンは表示されます
   
-  字幕ボタンを隠す
+  字幕ボタンを非表示
   字幕ボタンは非表示です
   字幕ボタンが表示されます
-  自動再生ボタンを隠す
+  自動再生ボタンを非表示
   自動再生ボタンは非表示です
   自動再生ボタンは表示されます
   
@@ -665,7 +668,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   アンビエントモードは有効です
   
   
-  情報カードを隠す
+  情報カードを非表示
   カードは非表示です
   カードは表示されています
   
@@ -675,34 +678,34 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   数字のアニメーションは有効です
   
   
-  ビデオプレーヤーでシークバーを隠す
-  ビデオプレーヤーのシークバーは非表示です
-  ビデオプレーヤーのシークバーが表示されます
-  動画のサムネイルにシークバーを表示しない
-  サムネイルシークバーが非表示です
-  サムネイルシークバーが表示されます
+  動画プレーヤーのシークバーを非表示
+  動画プレーヤーのシークバーは表示されません
+  動画プレーヤーのシークバーは表示されます
+  サムネイルのシークバーを非表示
+  サムネイルにシークバーは表示されません
+  サムネイルにシークバーが表示されます
   
   
-  Shortsプレイヤー
+  Shortsプレーヤー
   Shorts プレーヤーのコンポーネントを非表示または表示
   
-  ホーム画面でショート動画を非表示
-  ホーム画面にショート動画は表示されません
-  ホーム画面にショート動画が表示されます
+  ホームフィードで Shorts を非表示にする
+  ホームフィードにショート動画は表示されません
+  ホームフィードにショート動画が表示されます
   
-  登録チャンネル画面でショート動画を非表示
-  登録チャンネル画面にショート動画は表示されません
-  登録チャンネル画面にショート動画が表示されます
-  検索結果でショート動画を非表示
+  登録チャンネルフィードのショート動画を非表示
+  登録チャンネルフィードにショート動画は表示されません
+  登録チャンネルフィードにショート動画が表示されます
+  検索結果のショート動画を非表示
   検索結果にショート動画は表示されません
   検索結果にショート動画が表示されます
   視聴履歴でショート動画を非表示
-  視聴履歴にショート動画は表示されません
-  視聴履歴にショート動画が表示されます
+  視聴履歴と関連動画でショート動画は表示されません
+  視聴履歴と関連動画でショート動画が表示されます
   
-  参加ボタンを隠す
-  参加ボタンは非表示です
-  参加ボタンが表示されます
+  「メンバーになる」ボタンを非表示
+  「メンバーになる」ボタンは非表示です
+  「メンバーになる」ボタンは表示されます
   
   購読ボタンを隠す
   購読ボタンは非表示です
@@ -710,12 +713,12 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   一時停止中のオーバーレイボタンを隠す
   一時停止されたオーバーレイボタンは非表示です
   一時停止されたオーバーレイボタンが表示されます
-  ショップボタンを隠す
+  ショップボタンを非表示
   ショップボタンは非表示です
   ショップボタンが表示されます
   Super thanks ボタンを隠す
-  Super thanks ボタンは表示されません
-  Super thanks ボタンが表示されます
+  Super thanks ボタンは非表示です
+  Super thanks ボタンは表示されます
   タグ付き製品を非表示
   タグ付けされた商品は非表示です
   タグ付けされた商品が表示されます
@@ -727,7 +730,7 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   音楽を保存ボタンが表示されます
   使用するテンプレートボタンを隠す
   テンプレートボタンを非表示にする
-  Use template button is showed
+  テンプレートを使用ボタンを表示します
   今後のボタンを隠す
   今後のボタンは表示されません
   今後のボタンが表示されます
@@ -746,10 +749,10 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   噴水のように隠す
   ボタン噴水のアニメーションが非表示になります
   ボタン噴水のようなアニメーションが表示されます
-  「いいね」ボタンを隠す
+  高評価ボタンを非表示
   「いいね」ボタンは非表示です
   いいねボタンが表示されます
-  低評価ボタンを隠す
+  低評価ボタンを非表示
   低評価ボタンは非表示です
   低評価ボタンは表示されます
   コメントボタンを隠す
@@ -786,9 +789,9 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   ナビゲーションバーを表示
   
   
-  提案されたビデオ終了画面を無効にする
-  推奨動画は無効になります
-  おすすめの動画が表示されます
+  再生終了時に「関連動画」を表示しない
+  再生終了時に「関連動画」は表示されません
+  再生終了時に「関連動画」が表示されます
   
   
   タイムスタンプを隠す
@@ -796,12 +799,12 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   タイムスタンプを表示
   
   
-  プレーヤーのポップアップパネルを隠す
-  プレーヤーのポップアップパネルが非表示になります
-  プレーヤーのポップアップパネルが表示されます
+  ポップアップパネルを非表示
+  チャット欄やプレイリストを閉じた状態で動画を開きます
+  チャット欄やプレイリストを展開した状態で動画を開きます
   
   
-  ビデオの最後に全画面表示モードを終了する
+  動画終了時に全画面表示を終了
   無効
   ポートレート
   風景
@@ -813,9 +816,9 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   動画が全画面表示されません
   
   
-  プレイヤーオーバーレイの透明度
-  透明度の値は 0〜100 の範囲で、0 が透明です
-  プレイヤーオーバーレイの不透明度は0-100の間でなければなりません
+  オーバーレイの透明度
+  透明度の値は 0-100 の範囲で、0 が透明です
+  オーバーレイの透明度は 0-100 の間でなければなりません
   
   
   
@@ -871,9 +874,9 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   
   高画質サムネイルを有効にする
   シークバーのサムネイルは高画質です
-  シークバーのサムネイルの品質は中程度です
-  全画面表示のサムネイルの画質が高い
-  全画面表示のサムネイルの品質は中程度です
+  シークバーのサムネイルは中画質です
+  全画面表示のサムネイルは高画質です
+  全画面表示のサムネイルは中画質です
   "これにより、シークバーサムネイルがないライブストリームのサムネイルも復元されます。
 
 シークバーサムネイルは、現在の動画と同じ品質になります。
@@ -1079,20 +1082,20 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   SponsorBlock APIによって提供されるデータです。詳細はこちらをタップしてください。
   
   
-  レイアウトフォームファクター
+  レイアウト
   デフォルト
-  電話
+  スマートフォン
   タブレット
-  自動車
+  Automotive
   "変更内容:
 
 タブレットレイアウト
-• コミュニティ投稿は非表示
+• コミュニティ投稿が表示されません
 
-自動車レイアウト
-• 視聴履歴メニューを非表示
-• 「閲覧」タブを復元
-• Shorts は通常のプレーヤーで開きます
+Automotive レイアウト
+• マイページに視聴履歴が表示されません
+• 探索タブが復元されます
+• ショート動画を通常のプレーヤーで開きます
 • フィードはトピックとチャンネル別に整理"
   
   
@@ -1140,8 +1143,8 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   
   
   Shortsを開く
-  Shortsプレイヤー
-  通常のプレーヤー
+  Shortsプレーヤー
+  通常の動画プレーヤー
   通常のプレーヤー(全画面)
   
   
@@ -1153,8 +1156,8 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   ショート動画をバックグラウンド再生を繰り返しにします
   
   
-  ミニプレイヤー
-  アプリの最小化プレイヤーのスタイルを変更する
+  ミニプレーヤー
+  プレーヤーをアプリ内で最小化した際のスタイルを変更する
   ミニプレーヤータイプ
   無効
   既定
@@ -1167,20 +1170,20 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   角が丸くなっています
   角が正方形です
   ダブルタップとピンチでサイズ変更を有効にする
-  "ダブルタップアクションとピンチズームが有効になっています
+  "ダブルタップとピンチズームが有効になっています
 
-• ダブルタップでミニプレイヤーのサイズを大きくします
+• ダブルタップでミニプレーヤーのサイズを大きくします
 • もう一度ダブルタップすると、元のサイズに戻ります"
   ダブルタップでピンチでサイズを変更できません
   ドラッグ&ドロップを有効にする
   "ドラッグアンドドロップが有効になっています
 
-ミニプレイヤーは、画面の隅にドラッグできます"
+ミニプレーヤーは、画面の隅にドラッグできます"
   ドラッグ&ドロップは無効です
   水平ドラッグジェスチャーを有効にする
   "水平方向のドラッグジェスチャーが有効になっています
 
-ミニプレイヤーは、画面から左または右にドラッグできます"
+ミニプレーヤーは、画面から左または右にドラッグできます"
   水平ドラッグジェスチャーが無効になっています
   閉じるボタンを隠す
   閉じるボタンは非表示です
@@ -1199,9 +1202,9 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   初期サイズ
   最初の画面サイズ(ピクセル)
   ピクセルサイズは %1$s と %2$sの間でなければなりません
-  オーバーレイの不透明度
-  透明度の値は 0〜100 の範囲で、0 が透明です
-  ミニプレーヤーオーバーレイの不透明度は0-100の間でなければなりません
+  オーバーレイの透明度
+  透明度の値は 0-100 の範囲で、0 が透明です
+  オーバーレイの透明度は 0-100 の間でなければなりません
   
   
   グラデーション読み込み画面を有効にする
@@ -1225,36 +1228,34 @@ MicroG のバッテリー最適化を無効にしても、バッテリーの使
   
   
   
-  ホームタブ
+  ホームフィード
   
-  サブスクリプションタブ
+  登録チャンネルフィード
   
-  マイページ タブ
-  プレイリスト、おすすめ
+  マイページ
+  プレイリスト、関連動画
   検索結果
   オリジナルのサムネイル
   DeArrow & オリジナルのサムネイル
   DeArrow & 静止画サムネイル
   静止画サムネイル
-  "DeArrowは、YouTube動画のクラウドソースのサムネイルを提供します。これらのサムネイルは、YouTubeが提供するものよりも関連性が高い場合が多いです
+  "DeArrow は、YouTube 動画のサムネイルをクラウドソーシングで提供する機能です。DeArrow のサムネイルは、YouTube が提供するサムネイルよりも適切なことが多いです。これを有効にすると、動画のURLが API サーバーに送信されますが、他のデータは送信されません。動画に DeArrow サムネイルがない場合は、オリジナルのサムネイルまたは静止画サムネイルが表示されます。
 
-有効にすると、動画のURLがAPIサーバーに送信されます。他のデータは送信されません。動画にDeArrowのサムネイルがない場合は、元のサムネイルまたは静止画キャプチャが表示されます
-
-DeArrowの詳細については、ここをタップしてください。"
+DeArrow の詳細については、ここをタップしてください。"
   API が利用できない場合はトーストを表示
   DeArrowが利用できない場合はトーストが表示されます
   DeArrowが利用できない場合でもトーストは表示されません
-  DeArrow API サンドラント
-  DeArrowサムネイルキャッシュエンドポイントのURL
+  DeArrow API のエンドポイント
+  DeArrowからサムネイルを取得するエンドポイントのURL
   静止画サムネイル
-  静止画は各動画の最初/中間/最後から取得されます。これらの画像はYouTubeに組み込まれており、外部 API は使用されていません。
+  静止画は各動画の序盤/中盤/終盤から取得されます。これらの画像はYouTubeに組み込まれており、外部 API は使用されません
   高速な静止画サムネイルを使用する
-  中品質の静止画サムネイルを使用します。サムネイルの読み込みは速くなりますが、ライブ、未公開、または非常に古い動画には空白のサムネイルが表示されることがあります。
-  高画質の静止画サムネイルを使用します
-  取得する静止画サムネイルの時間
-  ビデオの最初
-  ビデオの中間
-  ビデオの最後
+  中画質の静止画サムネイルを使用します。サムネイルの読み込みは速くなりますが、ライブ、未公開、または非常に古い動画には空白のサムネイルが表示されることがあります
+  高画質の静止画を使用します
+  静止画サムネイルを取得する位置
+  動画の序盤
+  動画の中盤
+  動画の終盤
   
   DeArrowは一時的に利用できません(ステータスコード: %s)
   DeArrowは一時的に利用できません
@@ -1343,6 +1344,8 @@ DeArrowの詳細については、ここをタップしてください。"カスタム再生速度の数値は%s未満である必要があります
   無効なカスタム再生速度
   自動
+  カスタムタップアンドホールド速度
+  0-8 の間の再生速度
   
   
   再生速度の変更を記憶する
@@ -1373,8 +1376,8 @@ DeArrowの詳細については、ここをタップしてください。"デフォルトのクライアント
   
   Android VR(認証なし)
-  iOS AVC (H.264) を強制する
-  ビデオコーデックは AVC (H.264) に強制されています。
+  iOS クライアントで AVC (H.264) を強制
+  iOS クライアントで AVC (H.264) を強制します。
   ビデオコーデックは自動的に決定されます。
   "有効にすると、バッテリー寿命が延び、再生の途切れが改善される可能性があります。
 
@@ -1387,8 +1390,7 @@ AVC の最大解像度は 1080p であり、Opus オーディオコーデック
   "• オーディオトラックメニューがありません
 • 安定した音量は使用できません
 • 強制的なオリジナル音声は使用できません"
-  • AV1 ビデオコーデックなし
-  • HDR ビデオなし
+  • AV1 コーデックは使用できません。
   統計情報(詳細)
   クライアントの種類は統計情報(詳細)に表示されます
   クライアントは統計情報(詳細)に表示されません
@@ -1410,7 +1412,7 @@ AVC の最大解像度は 1080p であり、Opus オーディオコーデック
   PurpleAdBlock プロキシ
   
   
-  ビデオ広告をブロック
+  動画広告をブロック
   ビデオ広告はブロックされています
   ビデオ広告のブロックが解除されました
   
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 1c6d4b362..896326042 100644
--- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml
+++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK 빌드 날짜가 손상됨
   
   
+  설정
   ReVanced
   계속하시겠습니까?
   초기화
@@ -133,13 +134,16 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
   광고
   대체 썸네일
   피드
-  플레이어
-  일반
+  일반
+  플레이어
   Shorts
   재생바
   스와이프 제스처
   기타
   동영상
+  이전 설정 메뉴 복원하기
+  이전 설정 메뉴를 표시합니다
+  이전 설정 메뉴를 표시하지 않습니다
   
   
   Shorts 백그라운드 재생 비활성화하기
@@ -181,7 +185,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
   동영상 하단에서 채널 워터마크 숨기기
   워터마크가 숨겨집니다
   워터마크가 표시됩니다
-  좌우 슬라이드 선반 숨기기
+  회전형 선반 숨기기
   "다음 선반이 숨겨집니다:
 • 다시 듣기
 • 다시 시청하기
@@ -1348,6 +1352,8 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"
   재생 속도 값은 %s배속보다 작아야 합니다
   잘못된 사용자 정의 재생 속도 값입니다
   자동
+  사용자 정의 길게 눌러서 동영상 재생 속도
+  화면을 길게 누르는 동안에 변경되는 동영상 재생 속도를 0-8 사이에서 지정할 수 있습니다
   
   
   동영상 재생 속도 저장 활성화하기
@@ -1392,7 +1398,6 @@ AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동
 • 안정적인 볼륨을 사용할 수 없습니다
 • 원본 오디오 트랙를 강제로 활성화할 수 없습니다."
   • AV1 코덱이 지원되지 않습니다
-  • HDR 동영상을 재생할 수 없습니다
   통계에서 표시하기
   \'스트리밍 데이터를 가져오는 데 사용되는 클라이언트\'가 전문 통계에서 표시됩니다
   \'스트리밍 데이터를 가져오는 데 사용되는 클라이언트\'가 전문 통계에서 표시되지 않습니다
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 39b4ee5b8..ca421f351 100644
--- a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml
+++ b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK sukurties data yra sugadinta
   
   
+  Nustatymai
   ReVanced
   Ar norite tęsti?
   Atstatyti
@@ -133,12 +134,15 @@ Palieskite mygtuką Tęsti ir leiskite optimizavimo pakeitimus."
   Skelbimai
   Alternatyvūs miniatiūrai
   Naujienos
-  Grotuvas
-  Bendras išdėstymas
+  Bendra
+  Grotuvas
   Paieškos juosta
   Braukimo valdikliai
   Įvairūs
   Vaizdo įrašas
+  Atkurti senus nustatymų meniu
+  Rodomi seni nustatymų meniu
+  Seni nustatymų meniu nerodomi
   
   
   Išjungti \"Shorts\" foninį atkūrimą
@@ -1343,6 +1347,8 @@ Gali būti atrakinta aukštesnės vaizdo įrašų kokybės, bet galite patirti v
   Pasirinktinis greitis turi būti mažesnis nei %s
   Netinkamas pasirinktinis atkūrimo greitis
   Automatinis
+  Pritaikytas bakstelėjimo ir laikymo greitis
+  Atkūrimo greitis: nuo 0 iki 8
   
   
   Atsiminti atkūrimo greičio pakeitimus
@@ -1388,7 +1394,6 @@ AVC didžiausia skiriamoji geba yra 1080 p, „Opus“ garso kodekas negalimas,
 • Nėra stabilaus garso
 • Negalima priverstinai naudoti originalo garso"
   • Nėra AV1 vaizdo kodeko
-  • Nėra HDR vaizdo įrašo
   Rodyti statistinėje informacijoje \"tik profesionalams\"
   Kliento tipas rodomas statistinėje informacijoje \"tik profesionalams\"
   Klientas paslėptas statistinėje informacijoje \"tik profesionalams\"
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 f0f093b58..b22c4ebde 100644
--- a/patches/src/main/resources/addresources/values-lv-rLV/strings.xml
+++ b/patches/src/main/resources/addresources/values-lv-rLV/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK veidošanas datums ir bojāts
   
   
+  Iestatījumi
   ReVanced
   Vai vēlaties turpināt?
   Atiestatīt
@@ -133,12 +134,15 @@ Nospiediet turpināt pogu un atļaujiet optimizācijas izmaiņas."
   Reklāmas
   Alternatīvi sīktēli
   Lente
-  Atskaņotājs
-  Vispārīga izkārtojums
+  Vispārīgi
+  Atskaņotājs
   Slīdņu skala
   Pārvelciet vadīklas
   Dažādi
   Video
+  Atjaunot vecās iestatījumu izvēlnes
+  Tiek rādītas vecās iestatījumu izvēlnes
+  Vecās iestatījumu izvēlnes netiek rādītas
   
   
   Atspējot Shorts fonu atskaņošanu
@@ -1340,6 +1344,8 @@ Var tikt atbloķētas augstākas video kvalitātes, taču var rasties video atsk
   Pielāgoti ātrumi ir jābūt mazākiem par %s
   Nederīgi pielāgoti video atskaņošanas ātrumi
   Automātiski
+  Pielāgots pieskaršanās un turēšanas ātrums
+  Atskaņošanas ātrums no 0 līdz 8
   
   
   Atcerēties atskaņošanas ātruma izmaiņas
@@ -1385,7 +1391,6 @@ AVC maksimālā izšķirtspēja ir 1080p, Opus audio kodeks nav pieejams, un vid
 • Nav pieejams stabils skaļums
 • Nav pieejama oriģinālā audio piespiešana"
   • Nav pieejams AV1 video kodeks
-  • Bez HDR video
   Rādīt statistiskos datos entuziastiem
   Klienta tips tiek rādīts statistiskos datos entuziastiem
   Klients ir paslēpts statistiskos datos entuziastiem
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 33cd4931d..25eff8d3e 100644
--- a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml
+++ b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK-bouwdatum is beschadigd
   
   
+  Instellingen
   ReVanced
   Wilt u doorgaan?
   Herstellen naar standaard
@@ -133,13 +134,16 @@ Tik op de knop Doorgaan en sta optimalisatieveranderingen toe."
   Advertenties
   Alternatieve miniaturen
   Feed
-  Speler
-  Algemene lay-out
+  Algemeen
+  Speler
   Shorts
   Zoekbalk
   Veegbediening
-  Diversen
+  Overige
   Video
+  Oude instellingenmenu\'s herstellen
+  Oude instellingenmenu\'s worden weergegeven
+  Oude instellingenmenu\'s worden niet weergegeven
   
   
   Uitschakelen achtergrondweergave Shorts
@@ -1342,6 +1346,8 @@ Het inschakelen hiervan kan hogere videokwaliteiten ontgrendelen"
   Aangepaste snelheden moeten lager zijn dan %s
   Ongeldige aangepaste afspeelsnelheden
   Automatisch
+  De snelheid van aangepast tikken en vasthouden
+  Afspeelsnelheid tussen 0-8
   
   
   Onthoud wijzigingen in afspeelsnelheid
@@ -1387,7 +1393,6 @@ AVC heeft een maximale resolutie van 1080p, de Opus-audiocodec is niet beschikba
 • Stabiel volume is niet beschikbaar
 • Forceer originele audio is niet beschikbaar"
   • Geen AV1-videocodec
-  • Geen HDR-video
   Weergeven in Stats for nerds
   Het clienttype wordt getoond in Stats for nerds
   Client is verborgen in Stats for nerds
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 4d899cb31..b5237ed4a 100644
--- a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml
+++ b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Data kompilacji APK jest uszkodzona
   
   
+  Ustawienia
   ReVanced
   Czy chcesz kontynuować?
   Zresetuj
@@ -133,12 +134,15 @@ Naciśnij przycisk Kontynuuj i zezwól na zmiany optymalizacji."
   Reklamy
   Alternatywne miniaturki
   Strona główna
-  Odtwarzacz
-  Ogólny układ
+  Ogólne
+  Odtwarzacz
   Pasek postępu filmu
   Sterowanie przesuwaniem
-  Pozostałe
+  Różne
   Film
+  Przywróć stare menu ustawień
+  Wyświetlane są stare menu ustawień
+  Stare menu ustawień nie są wyświetlane
   
   
   Wyłącz odtwarzanie Shortsów w tle
@@ -1341,6 +1345,8 @@ Włączenie tego może odblokować wyższe jakości wideo"
   Prędkości niestandardowe muszą być mniejsze niż %s
   Nieprawidłowe prędkości odtwarzania niestandardowego
   Automatyczne
+  Szybkość dostosowywania dotknięciem i przytrzymaniem
+  Prędkość odtwarzania w granicach 0-8
   
   
   Zapamiętuj zmiany prędkości odtwarzania
@@ -1386,7 +1392,6 @@ AVC ma maksymalną rozdzielczość 1080p, kodek audio Opus nie jest dostępny, a
 • Stabilna głośność jest niedostępna
 • Wymuś oryginalny dźwięk jest niedostępny"
   • Žádný video kodek AV1
-  • Žádné HDR video
   Pokaż w statystykach dla nerdów
   Typ klienta jest wyświetlany w Statystykach dla nerdów
   Klient jest ukryty w statystykach dla nerdów
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 fbe44eaba..f27961182 100644
--- a/patches/src/main/resources/addresources/values-pt-rBR/strings.xml
+++ b/patches/src/main/resources/addresources/values-pt-rBR/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Data de compilação do APK está corrompida
   
   
+  Configurações
   ReVanced
   Você deseja prosseguir?
   Resetar
@@ -131,12 +132,15 @@ Toque no botão continuar e permita as mudanças de otimização. "
   Anúncios
   Miniaturas alternativas
   Feed
-  Reprodutor
-  Layout geral
+  Geral
+  Jogador
   Barra de busca
   Controles deslizantes
-  Outras configurações
+  Diversos
   Vídeo
+  Restaurar menus de configurações antigos
+  Os menus de configurações antigos são mostrados.
+  Os menus de configurações antigos não são mostrados.
   
   
   Desativar reprodução de fundo dos Shorts
@@ -1338,6 +1342,8 @@ Habilitar isso pode desbloquear qualidades de vídeo mais altas"
   Velocidades personalizadas devem ser menores que %s
   Velocidades de reprodução personalizadas inválidas
   Automático
+  Velocidade personalizada de tocar e segurar
+  Velocidade de reprodução entre 0-8
   
   
   Lembrar mudança na velocidade de reprodução
@@ -1383,7 +1389,6 @@ A AVC tem uma resolução máxima de 1080p, o codec de áudio Opus não está di
 • Volume estável não está disponível
 • Forçar áudio original não está disponível"
   • Sem codec de vídeo AV1
-  • Sem vídeo HDR
   Mostrar em Estatísticas para nerds
   O tipo de cliente é mostrado em Estatísticas para nerds
   O cliente está oculto em Estatísticas para nerds
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 0234c8982..c79814004 100644
--- a/patches/src/main/resources/addresources/values-pt-rPT/strings.xml
+++ b/patches/src/main/resources/addresources/values-pt-rPT/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Data de compilação do APK está corrompida
   
   
+  Configurações
   ReVanced
   Desejas continuar?
   Redefinir
@@ -133,12 +134,15 @@ Toque no botão continuar e permita as alterações de otimização."
   Anúncios
   Miniaturas alternativas
   Recomendações
-  Leitor
-  Interface geral
+  Geral
+  Jogador
   Barra de pesquisa
   Controlos por Gestos
-  Outros
+  Diversos
   Vídeo
+  Restaurar menus de configurações antigos
+  Os menus de configurações antigos são mostrados
+  Os menus de configurações antigos não são mostrados
   
   
   Desativar reprodução de fundo de Shorts
@@ -1341,6 +1345,8 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"Tốc độ tùy chỉnh phải nhỏ hơn %s
   Tốc độ phát lại tùy chỉnh không hợp lệ
   Automático
+  Velocidade personalizada ao tocar e segurar
+  Velocidade de reprodução de 0 a 8
   
   
   Lembrar velocidade de reprodução
@@ -1386,7 +1392,6 @@ A AVC tem resolução máxima de 1080p, Opus audio codec não está disponível,
 • Volume estável não está disponível
 • Forçar áudio original não está disponível"
   • Nenhum codec de vídeo AV1
-  • Sem vídeo HDR
   Mostrar em Estatísticas para nerds
   O tipo de cliente é mostrado em Estatísticas para nerds
   O cliente está oculto em Estatísticas para nerds
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 9900967a2..6a16cb6ba 100644
--- a/patches/src/main/resources/addresources/values-ro-rRO/strings.xml
+++ b/patches/src/main/resources/addresources/values-ro-rRO/strings.xml
@@ -23,9 +23,9 @@ Second \"item\" text"
   
   
   Verificările au eșuat
-  Deschide site-ul oficial
-  Ignoră
-  <h5>Această aplicație nu pare a fi modificată de dumneavoastră.</h5><br>Această aplicație s-ar putea să nu funcționeze corect, <b>ar putea fi dăunătoare sau chiar periculoasă de utilizat</b>.<br><br>Aceste verificări indică faptul că aplicația este pre-modificată sau obținută de la altcineva:<br><br><small>%1$s</small><br>Se recomandă insistent <b>dezinstalarea acestei aplicații și modificarea ei personal</b> pentru a vă asigura că utilizați o aplicație validată și securizată.<p><br>Dacă ignorați acest avertisment, acesta va fi afișat doar de două ori.
+  Deschidere site oficial
+  Ignorare
+  <h5>Această aplicație nu pare să fie modificată de tine.</h5><br>Această aplicație ar putea să nu funcționeze corect, <b>ar putea fi dăunătoare sau chiar periculoasă de utilizat</b>.<br><br>Aceste verificări implică faptul că această aplicație este modificată anterior sau a fost obținută de la altcineva:<br><br><small>%1$s</small><br>Este recomandat cu tărie să <b>dezinstalați această aplicație și să o modificați singuri</b> pentru a vă asigura că utilizați o aplicație validată și sigură.<p><br>Dacă este ignorat, acest avertisment va fi afișat doar de două ori.
   Patch-at de pe un alt dispozitiv
   Nu este instalat de către ReVanced Manager
   Patch-at acum mai mult de 10 minute
@@ -33,10 +33,11 @@ Second \"item\" text"
   Data construirii APK-ului este coruptă
   
   
+  Setări
   ReVanced
   Doriți să continuați?
-  Resetează
-  Reîmprospătați și reporniți
+  Resetare
+  Reîmprospătare și repornire
   Repornire
   Importare
   Copiere
@@ -133,13 +134,16 @@ Apăsați butonul continuare și permiteți modificările de optimizare."Reclame
   Miniaturi alternative
   Flux
-  Player
-  Aspect general
+  General
+  Player
   Shorts
   Bară de progres
   Controale glisare
   Diverse
   Video
+  Restaurare meniuri setări vechi
+  Meniurile de setări vechi sunt afișate
+  Meniurile de setări vechi nu sunt afișate
   
   
   Dezactivează redarea în fundal a Shorts
@@ -1342,6 +1346,8 @@ Activarea acestei opțiuni poate debloca calități video mai mari"
   Vitezele personalizate trebuie să fie mai mici de %s
   Viteze de redare personalizate nevalide
   Automat
+  Viteză personalizată de apăsare și menținere
+  Viteză de redare între 0-8
   
   
   Memorează schimbările vitezei de redare
@@ -1387,7 +1393,6 @@ AVC are o rezoluție maximă de 1080p, codecul audio Opus nu este disponibil, ia
 • Volumul stabil nu este disponibil
 • Forțarea sunetului original nu este disponibilă"
   • Fara codec video AV1
-  • Fara video HDR
   Afișează în Statistici pentru pasionați
   Tipul clientului este afișat în Statistici pentru pasionați
   Clientul este ascuns în Statistici pentru pasionați
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 91b0c1bd3..fb4a9f227 100644
--- a/patches/src/main/resources/addresources/values-ru-rRU/strings.xml
+++ b/patches/src/main/resources/addresources/values-ru-rRU/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Дата сборки APK повреждена
   
   
+  Настройки
   ReVanced
   Вы хотите продолжить?
   Сбросить
@@ -43,11 +44,11 @@ Second \"item\" text"
   Настройки ReVanced сброшены по умолчанию
   Импортировано %d настроек
   Не удалось импортировать: %s
-  Язык ReVanced
+  Локализация ReVanced
   "Переводы для некоторых языков могут отсутствовать или быть неполными.
 
 Чтобы перевести новые языки, посетите translate.revanced.app"
-  Язык приложения
+  Языковая локализация приложения
   Арабский
   Азербайджанский
   Болгарский
@@ -133,13 +134,16 @@ Second \"item\" text"
   Реклама
   Альтернативные миниатюры
   Лента
-  Плеер
-  Основной интерфейс
+  Общие
+  Плеер
   Shorts
   Полоса прогресса
   Управление жестами
-  Прочие
+  Разное
   Видео
+  Восстановить старое меню настроек
+  Отображается старое меню настроек
+  Отображается новое меню настроек
   
   
   Фоновое воспроизведение Shorts
@@ -684,7 +688,7 @@ Second \"item\" text"
   Полоса прогресса в миниатюрах отображена
   
   
-  Плеер Shorts
+  Компоненты плеера Shorts
   Скрыть или отобразить компоненты в плеере Shorts
   
   Shorts в ленте \"Главной\"
@@ -695,11 +699,11 @@ Second \"item\" text"
   Shorts в ленте \"Подписок\" скрыты
   Shorts в ленте \"Подписок\" отображены
   Shorts в результатах поиска
-  Скрыты в результатах поиска
-  Отображены в результатах поиска
+  Shorts в результатах поиска скрыты
+  Shorts в результатах поиска отображены
   Shorts в истории просмотров
-  Скрыты в истории просмотров
-  Отображены в истории просмотров
+  Shorts в истории просмотров скрыты
+  Shorts в истории просмотров отображены
   
   Кнопка \"Присоединиться\"
   Кнопка \"Присоединиться\" в Shorts скрыта
@@ -709,14 +713,14 @@ Second \"item\" text"
   Кнопка \"Подписаться\" в Shorts скрыта
   Кнопка \"Подписаться\" в Shorts отображена
   Оверлей кнопок при паузе
-  Оверлей кнопок при паузе скрыт
-  Оверлей кнопок при паузе отображен
+  Оверлей кнопок при паузе в Shorts скрыт
+  Оверлей кнопок при паузе в Shorts отображен
   Кнопка \"Магазин\"
   Кнопка \"Магазин\" в Shorts скрыта
   Кнопка \"Магазин\" в Shorts отображена
   Кнопка \"Супер спасибо\"
-  Кнопка \"Супер спасибо\" скрыта
-  Кнопка \"Супер спасибо\" отображена
+  Кнопка \"Супер спасибо\" в Shorts скрыта
+  Кнопка \"Супер спасибо\" в Shorts отображена
   Товары с тегом
   Товары с тегом в Shorts скрыты
   Товары с тегом в Shorts отображены
@@ -724,29 +728,29 @@ Second \"item\" text"
   Метка местоположения в Shorts скрыта
   Метка местоположения в Shorts отображена
   Кнопка \"Сохранить музыку\"
-  Кнопка \"Сохранить музыку\" скрыта
-  Кнопка \"Сохранить музыку\" отображена
+  Кнопка \"Сохранить музыку\" в Shorts скрыта
+  Кнопка \"Сохранить музыку\" в Shorts отображена
   Кнопка \"Использовать шаблон\"
-  Кнопка \"Использовать шаблон\" скрыта
-  Кнопка \"Использовать шаблон\" отображена
+  Кнопка \"Использовать шаблон\" в Shorts скрыта
+  Кнопка \"Использовать шаблон\" в Shorts отображена
   Кнопка \"Предстоящие события\"
-  Кнопка \"Предстоящие события\" скрыта
-  Кнопка \"Предстоящие события\" отображена
+  Кнопка \"Предстоящие события\" в Shorts скрыта
+  Кнопка \"Предстоящие события\" в Shorts отображена
   Кнопка \"Зеленый экран\"
-  Кнопка \"Зеленый экран\" скрыта
-  Кнопка \"Зеленый экран\" отображена
+  Кнопка \"Зеленый экран\" в Shorts скрыта
+  Кнопка \"Зеленый экран\" в Shorts отображена
   Кнопка хэштега
-  Кнопка хэштега скрыта
-  Кнопка хэштега отображена
+  Кнопка хэштега в Shorts скрыта
+  Кнопка хэштега в Shorts отображена
   Поисковые подсказки
-  Поисковые подсказки скрыты
-  Поисковые подсказки отображены
+  Поисковые подсказки в Shorts скрыты
+  Поисковые подсказки в Shorts отображены
   Стикеры
-  Стикеры скрыты
-  Стикеры отображены
+  Стикеры в Shorts скрыты
+  Стикеры в Shorts отображены
   Анимация кнопки \"Лайк\"
-  Анимация кнопки \"Лайк\" скрыта
-  Анимация кнопки \"Лайк\" отображена
+  Анимация кнопки \"Лайк\" в Shorts скрыта
+  Анимация кнопки \"Лайк\" в Shorts отображена
   Кнопка \"Лайк\"
   Кнопка \"Лайк\" в Shorts скрыта
   Кнопка \"Лайк\" в Shorts отображена
@@ -1138,7 +1142,7 @@ Second \"item\" text"
   Возобновление плеера Shorts при запуске приложения включено
   
   
-  Открывать Shorts с
+  Плеер для открытия Shorts
   Плеер Shorts
   Стандартный плеер
   Стандартный полноэкранный плеер
@@ -1343,6 +1347,8 @@ Second \"item\" text"
   Пользовательские скорости должны быть меньше, чем %s
   Недопустимые пользовательские скорости воспроизведения
   Автоматически
+  Пользовательская скорость при нажатии и удержания
+  Скорость воспроизведения между 0 и 8
   
   
   Запоминание изменений скорости
@@ -1387,8 +1393,7 @@ Second \"item\" text"
   "• Меню выбора звуковой дорожки отсутствует
 • Функция воспроизведения видео с постоянной громкостью недоступна
 • Принудительное использование оригинального звука недоступно"
-  • Нет видеокодека AV1
-  • Нет HDR-видео
+  • Отсутствует видеокодек AV1
   Отображение в «Статистике для сисадминов»
   Тип клиента в «Статистике для сисадминов» отображен
   Тип клиента в «Статистике для сисадминов» скрыт
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 00768a5ef..4f4c157a1 100644
--- a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml
+++ b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Dátum zostavenia APK je poškodený
   
   
+  Nastavenia
   Chcete pokračovať?
   Resetovať
   Obnovte a reštartujte
@@ -130,12 +131,15 @@ Vypnutie optimalizácie batérie pre MicroG nebude mať negatívny vplyv na spot
   Reklamy
   Alternatívne miniatúry
   Feed
-  Hráč
-  Všeobecné rozloženie
+  Všeobecné
+  Prehrávač
   Panel vyhľadávania
   Ovládanie potiahnutím
   Rôzne
   Video
+  Obnoviť staré ponuky nastavení
+  Staré ponuky nastavení sa zobrazujú
+  Staré ponuky nastavení sa nezobrazujú
   
   
   Zakázať prehrávanie Shorts na pozadí
@@ -1328,6 +1332,8 @@ Povolením tejto možnosti môžete odomknúť vyššie kvality videa"
   Vlastné rýchlosti musia byť menšie ako %s
   Neplatné vlastné rýchlosti prehrávania
   Automaticky
+  Vlastná rýchlosť ťuknutia a podržania
+  Rýchlosť prehrávania medzi 0-8
   
   
   Pamätajte na zmeny rýchlosti prehrávania
@@ -1373,7 +1379,6 @@ AVC má maximálne rozlíšenie 1080p, zvukový kodek Opus nie je k dispozícii
 • Nie je k dispozícii stabilná hlasitosť
 • Výber originálneho zvuku nie je k dispozícii"
   • Žiadny video kodek AV1
-  • Žiadne video HDR
   Zobraziť v štatistike pre expertov
   Typ klienta sa zobrazuje v štatistikách pre expertov
   Klient je skrytý v štatistikách pre expertov
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 64e1dbd29..40ca9b59f 100644
--- a/patches/src/main/resources/addresources/values-sl-rSI/strings.xml
+++ b/patches/src/main/resources/addresources/values-sl-rSI/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Datum izgradnje APK je poškodovan
   
   
+  Nastavitve
   ReVanced
   Želite nadaljevati?
   Ponastavi
@@ -133,12 +134,15 @@ Tapnite gumb Nadaljuj in dovolite spremembe optimizacije."
   Oglasi
   Nadomestni sličice
   Zbirka
-  Predvajalnik
-  Splošna postavitev
+  **Splošno**
+  **Predvajalnik**
   Drsnik
   Ukazi s potegom
-  Razno
+  **Razno**
   Videoposnetki
+  **Obnovi stare menije z nastavitvami**
+  Stari meniji z nastavitvami so prikazani
+  Stari meniji z nastavitvami niso prikazani
   
   
   Onemogoči predvajanje Shorts v ozadju
@@ -1341,6 +1345,8 @@ Omogočanje tega lahko odklene višje kakovosti videa"
   Hitrosti predvajanja po meri morajo biti manjše od %s
   Neveljavne hitrosti predvajanja po meri
   Samodejno
+  Hitrost pritiska in pridržanja po meri
+  Hitrost predvajanja med 0 in 8
   
   
   Zapomni si spremembe hitrosti predvajanja
@@ -1386,7 +1392,6 @@ AVC ima največjo ločljivost 1080p, avdio kodek Opus ni na voljo, predvajanje v
 • Stabilna glasnost ni na voljo
 • Prisilno izvirno zvočno posnetek ni na voljo"
   • Brez kodeka videa AV1
-  • Brez videa HDR
   Pokaži v statistiki za piflarje
   Vrsta odjemalca je prikazana v statistiki za piflarje
   Odjemalec je skrit v statistiki za piflarje
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 4c9d753dd..1529ee976 100644
--- a/patches/src/main/resources/addresources/values-sq-rAL/strings.xml
+++ b/patches/src/main/resources/addresources/values-sq-rAL/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Data e ndërtimit të APK është e korruptuar
   
   
+  Cilësimet
   ReVanced
   Dëshironi të vazhdoni?
   Rivendos
@@ -133,13 +134,16 @@ Prekni butonin vazhdo dhe lejoni ndryshimet e optimizimit."
   Anunet
   Miniatura alternative
   Ushtrimi
-  Lujtësi
-  Dizajni i përgjithshëm
+  Përgjithshëm
+  Lojtari
   Shorts
   Shiriti i kërkimit
   Kontrolluesit e rrëshqitjes
   Të ndryshme
   Video
+  Rikthe menutë e vjetër të konfigurimeve
+  Menutë e vjetër të cilësimeve shfaqen
+  Menutë e vjetër të cilësimeve nuk shfaqen
   
   
   Çaktivizo luajtjen në sfond të Shorts
@@ -1340,6 +1344,8 @@ Aktivizimi i kësaj mund të zhbllokojë cilësi më të larta video"
   Shpejtësitë e personalizuara duhet të jenë më të vogla se %s
   Shpejtësi të pavlefshme të personalizuar të riprodhimit
   Automatik
+  Shpejtësia sipas dëshirës së përdoruesit gjatë përdorimit
+  Shpejtësi e riprodhimit midis 0 dhe 8
   
   
   Mbani mend ndryshimet e shpejtësisë së përsëritjes
@@ -1385,7 +1391,6 @@ AVC ka një rezolucion maksimal prej 1080p, kodeku audio Opus nuk është i disp
 • Vellimi i qëndrueshëm nuk është në dispozicion
 • Zbatimi i audio origjinalit nuk është në dispozicion"
   • Nuk ka codec video AV1
-  • Nuk ka video HDR
   Shfaqni në Statistikat për nerdës
   Lloji i klientit shfaqet në Statistikat për nerds
   Klienti është fshehur në statistikat për nerds
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 3b85868a1..1dd15e426 100644
--- a/patches/src/main/resources/addresources/values-sr-rCS/strings.xml
+++ b/patches/src/main/resources/addresources/values-sr-rCS/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Datum izrade APK-a je oštećen
   
   
+  Podešavanja
   ReVanced
   Želite li da nastavite?
   Resetuj
@@ -133,13 +134,16 @@ Dodirnite dugme „Nastavi” i dozvolite promene optimizacije."
   Oglasi
   Alternativne sličice
   Fid
-  Plejer
-  Opšti izgled
+  Generalno
+  Plejer
   Shorts
   Traka za premotavanje
   Kontrole prevlačenja
   Razno
   Video
+  Vrati stare meni-je sa podešavanjima
+  Prikazuju se stari meniji podešavanja
+  Ne prikazuju se stari meniji podešavanja
   
   
   Onemogući puštanje Shorts videa u pozadini
@@ -1341,6 +1345,8 @@ Ako ovo omogućite, mogu biti otključani viši kvaliteti videa"
   Prilagođene brzine moraju biti manje od %s
   Nevažeće prilagođene brzine reprodukcije
   Automatski
+  Prilagođena brzina dodirivanja i zadržavanja
+  Brzina reprodukcije između 0 i 8
   
   
   Zapamti promene brzine reprodukcije
@@ -1386,7 +1392,6 @@ AVC ima maksimalnu rezoluciju od 1080p, audio kodek Opus nije dostupan, a reprod
 • Ujednačena jačina zvuka nije dostupna
 • Opcija „Prisili originalan zvuk” nije dostupna"
   • Nema video kodeka AV1
-  • Nema HDR videa
   Prikaži u „Statistici za znalce”
   Tip klijenta je prikazan u „Statistici za znalce”
   Tip klijenta je skriven u „Statistici za znalce”
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 26778dfa6..cae3cc660 100644
--- a/patches/src/main/resources/addresources/values-sr-rSP/strings.xml
+++ b/patches/src/main/resources/addresources/values-sr-rSP/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Датум израде APK-а је оштећен
   
   
+  Подешавања
   ReVanced
   Желите ли да наставите?
   Ресетуј
@@ -133,12 +134,15 @@ Second \"item\" text"
   Огласи
   Алтернативне сличице
   Фид
-  Плејер
-  Општи изглед
+  Опште
+  Претварач
   Трака за премотавање
   Контроле превлачења
   Разно
   Видео
+  Врати старе меније са подешавањима
+  Стари менији са подешавањима су приказани
+  Стари менији са подешавањима се не приказују
   
   
   Онемогући пуштање Shorts видеа у позадини
@@ -1340,6 +1344,8 @@ Second \"item\" text"
   Прилагођене брзине морају бити мање од %s
   Неважеће прилагођене брзине репродукције
   Аутоматски
+  Прилагођена брзина додиривања и задржавања
+  Брзина репродукције између 0 и 8
   
   
   Запамти промене брзине репродукције
@@ -1385,7 +1391,6 @@ AVC има максималну резолуцију од 1080p, аудио ко
 • Уједначена јачина звука није доступна
 • Опција „Присили оригиналан звук” није доступна"
   • Нема видео кодека AV1
-  • Нема HDR видеа
   Прикажи у „Статистици за зналце”
   Тип клијента је приказан у „Статистици за зналце”
   Тип клијента је скривен у „Статистици за зналце”
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 09f88be71..ad870c1d9 100644
--- a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml
+++ b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Byggdatum för APK är skadat
   
   
+  Inställningar
   ReVanced
   Vill du fortsätta?
   Återställ
@@ -133,13 +134,16 @@ Tryck på Fortsätt-knappen och tillåt optimeringsändringar."
   Annonser
   Alternativa miniatyrbilder
   Flöde
-  Spelare
-  Allmänt utseende
+  Generell
+  Spelare
   Shorts
   Sökfält
   Dragkontroller
-  Övrigt
+  Diverse
   Video
+  Återställ gamla inställningsmenyer
+  Gamla inställningsmenyer visas
+  Gamla inställningsmenyer visas inte
   
   
   Inaktivera Shorts bakgrundsuppspelning
@@ -1341,6 +1345,8 @@ Att aktivera detta kan låsa upp högre videokvalitet"
   Anpassade hastigheter måste vara mindre än %s
   Ogiltiga anpassade uppspelningshastigheter
   Automatiskt
+  Anpassad hastighet vid tryck och håll
+  Uppspelningshastighet mellan 0 och 8.
   
   
   Kom ihåg ändringar i uppspelningshastighet
@@ -1386,7 +1392,6 @@ AVC har en maximal upplösning på 1080p, Opus-ljudkodek är inte tillgänglig o
 • Stabilt ljud är inte tillgängligt
 • Tvinga originalspråk är inte tillgängligt"
   • Ingen AV1-videocodec
-  • Ingen HDR-video
   Visa i statistik för nördar
   Klienttyp visas i statistik för nördar
   Klienten är dold i statistik för nördar
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 28e0f6288..3531e3ad5 100644
--- a/patches/src/main/resources/addresources/values-th-rTH/strings.xml
+++ b/patches/src/main/resources/addresources/values-th-rTH/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   วันที่สร้าง APK เสียหาย
   
   
+  การตั้งค่า
   ReVanced
   คุณต้องการดำเนินการต่อหรือไม่?
   รีเซ็ต
@@ -133,13 +134,16 @@ Second \"item\" text"
   โฆษณา
   รูปขนาดย่อทางเลือก
   ฟีด
-  เครื่องเล่น
-  เค้าโครงทั่วไป
+  ทั่วไป
+  เครื่องเล่น
   Shorts
   แถบเลื่อน
   ปัดเพื่อควบคุม
-  อื่นๆ
+  เบ็ดเตล็ด
   วิดีโอ
+  กู้คืนเมนูการตั้งค่าแบบเก่า
+  แสดงเมนูการตั้งค่าแบบเก่า
+  ไม่แสดงเมนูการตั้งค่าแบบเก่า
   
   
   ปิดการเล่นพื้นหลัง Shorts
@@ -1342,6 +1346,8 @@ User id ของคุณเหมือนกับรหัสผ่าน 
   ความเร็วที่กําหนดเองต้องน้อยกว่า %s
   ความเร็วในการเล่นที่กําหนดเองไม่ถูกต้อง
   อัตโนมัติ
+  **Custom tap and hold speed**
+  ความเร็วในการเล่นระหว่าง 0-8
   
   
   จำการเปลี่ยนแปลงความเร็วในการเล่น
@@ -1387,7 +1393,6 @@ AVC มีความละเอียดสูงสุด 1080p, ตัว
 • ปรับระดับเสียงอัตโนมัติใช้งานไม่ได้
 • เปิดเสียงต้นฉบับใช้งานไม่ได้"
   • ไม่มีตัวแปลงสัญญาณวิดีโอ AV1
-  • ไม่มีวิดีโอ HDR
   แสดงในสถิติสำหรับพวกเนิร์ด
   แสดงชนิดไคลเอ็นต์ในสถิติสำหรับพวกเนิร์ด
   ซ่อนไคลเอ็นต์ในสถิติสำหรับพวกเนิร์ด
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 3d51fcd5d..b2bed8647 100644
--- a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml
+++ b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK derleme tarihi bozuk
   
   
+  Ayarlar
   Devam etmek istiyor musunuz?
   Sıfırla
   Yenile ve yeniden başlat
@@ -132,12 +133,15 @@ Devam düğmesine dokunun ve optimizasyon değişikliklerine izin verin."Reklamlar
   Alternatif kapak fotoğrafları
   Akış
-  Oynatıcı
-  Genel düzen
+  Genel
+  Oyuncu
   Zaman çubuğu
   Kaydırma kontrolleri
   Çeşitli
   Video
+  Eski ayar menülerini geri yükle
+  Eski ayar menüleri gösteriliyor
+  Eski ayar menüleri gösterilmiyor
   
   
   Shorts\'un arka planda oynatılmasını devre dışı bırak
@@ -1340,6 +1344,8 @@ Bunu etkinleştirmek daha yüksek video kalitelerini açabilir"
   Özel hızlar %s\'den az olmalıdır
   Geçersiz özel oynatma hızları
   Oto
+  Dokunup basılı tutma özel hızı
+  0-8 arası oynatma hızı
   
   
   Oynatma hızı değişikliklerini hatırla
@@ -1385,7 +1391,6 @@ AVC'nin maksimum çözünürlüğü 1080p'dir, Opus ses kodeği kullanılamaz ve
 • Sabit ses özelliği kullanılamaz
 • Orijinal sesi zorlama kullanılamaz"
   • AV1 video kodeği yok
-  • HDR video yok
   Meraklısı için istatistiklerde göster
   İstemci tipi meraklısı için istatistiklerde gösterilir
   İstemci, meraklısı için istatistiklerde gizli
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 87f6d57c5..844cf8f41 100644
--- a/patches/src/main/resources/addresources/values-uk-rUA/strings.xml
+++ b/patches/src/main/resources/addresources/values-uk-rUA/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Дата збірки APK пошкоджена
   
   
+  Налаштування
   ReVanced
   Бажаєте продовжити?
   Скинути
@@ -133,12 +134,15 @@ Second \"item\" text"
   Реклама
   Альтернативні прев\'ю
   Стрічка
-  Плеєр
-  Загальні налаштування
+  Загальні
+  Плеєр
   Панель прогресу
   Керування жестами
   Різне
   Відео
+  Відновити старе меню налаштувань
+  Показується старе меню налаштувань
+  Показується нове меню налаштувань
   
   
   Вимкнути фонове відтворення Shorts
@@ -1340,6 +1344,8 @@ Second \"item\" text"
   Користувацькі швидкості повинні бути менші ніж %s
   Неправильні користувацькі швидкості відтворення
   Авто
+  Користувацька швидкість при натисканні та утриманні
+  Швидкість відтворення від 0 до 8
   
   
   Запам\'ятовувати зміни швидкості
@@ -1385,7 +1391,6 @@ AVC має максимальну роздільну здатність 1080p, 
 • Меню стабілізації гучності недоступне
 • Примусове використання оригінальний звукової доріжки недоступне"
   • Відсутній відеокодек AV1
-  • Немає HDR відео
   Показувати у \"Статистиці для сисадмінів\"
   Тип клієнта відображається у вікні \"Статистика для сисадмінів\"
   Тип клієнта приховано у вікні \"Статистика для сисадмінів\"
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 679e95963..69d63fd90 100644
--- a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml
+++ b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   Ngày dựng APK bị hỏng
   
   
+  Thiết lập
   ReVanced
   Bạn có muốn tiếp tục không?
   Đặt lại
@@ -133,13 +134,16 @@ Nhấn nút tiếp tục và cho phép thay đổi tối ưu hóa."
   Quảng cáo
   Hình thu nhỏ thay thế
   Bảng tin
-  Trình phát
-  Bố cục chung
+  Chung
+  Nghe nhạc
   Shorts
   Thanh tiến trình
   Cử chỉ vuốt
-  Cài đặt khác
+  Khác
   Video
+  Khôi phục menu cài đặt cũ
+  Hiển thị các menu Cài đặt cũ
+  Không hiển thị các menu Cài đặt cũ
   
   
   Tắt phát nền cho Shorts
@@ -1342,6 +1346,8 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"Tốc độ tùy chỉnh phải nhỏ hơn %s
   Tốc độ phát lại tùy chỉnh không hợp lệ
   Tự động
+  Tỹc độ nhạn và giữ lúu tạo tốc độ tốc độ
+  Tốc độ phát lại giữa từ 0-̂8
   
   
   Nhớ các thay đổi tốc độ phát
@@ -1387,7 +1393,6 @@ AVC có độ phân giải tối đa là 1080p, bộ giải mã âm thanh Opus k
 • Không có âm lượng ổn định
 • Không có tùy chọn âm thanh gốc"
   • Không có bộ giải mã video AV1
-  • Không có video HDR
   Hiển thị trong Stats for nerds
   Loại máy khách được hiển thị trong Stats for nerds
   Máy khách bị ẩn trong Stats for nerds
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 d428a6fed..1d73c516a 100644
--- a/patches/src/main/resources/addresources/values-zh-rCN/strings.xml
+++ b/patches/src/main/resources/addresources/values-zh-rCN/strings.xml
@@ -33,6 +33,7 @@ Second \"item\" text"
   APK 构建日期已损坏
   
   
+  设置
   您想要继续吗?
   重置
   刷新并重启
@@ -132,13 +133,16 @@ Second \"item\" text"
   广告
   可选缩略图
   推荐
-  播放器
-  通用布局
+  常规
+  播放器
   Shorts
   进度条
   滑动控制
-  杂项
+  其他
   视频
+  恢复旧设置菜单
+  旧版设置菜单已显示
+  旧版设置菜单未显示
   
   
   禁用 Shorts 后台播放
@@ -321,7 +325,7 @@ Second \"item\" text"
   评论区已显示
   隐藏「创建 Short」按钮
   创建 Short 按钮被隐藏
-  显示创建 Short 按钮
+  创建 Shorts 按钮已显示
   隐藏评论预览
   评论预览已隐藏
   评论预览已显示
@@ -686,7 +690,7 @@ Second \"item\" text"
   Shorts 播放器
   隐藏或显示 Shorts 播放器组件
   
-  在主页动态中隐藏 Shorts
+  在首页动态中隐藏 Shorts
   隐藏在主页信息流和相关视频中
   显示在主页信息流和相关视频中
   
@@ -1391,7 +1395,6 @@ AVC 的最大分辨率为 1080p,Opus 音频编解码器不可用,视频播
 • 稳定音量不可用
 • 强制原始音频不可用"
   • 不支持 AV1 视频编解码器
-  • 不支持 HDR 视频
   显示在 Stats for nerds 中
   客户端类型显示在 Stats for nerds 中
   客户端隐藏在 Stats for nerds 中
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 3fc26077d..99faa60b8 100644
--- a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml
+++ b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml
@@ -25,14 +25,15 @@ Second \"item\" text"
   檢查失敗
   開啟官方網站
   忽略
-  <h5>這個應用程式似乎並非由您修補。</h5><br>這個應用程式可能無法正常運作,<b>可能有害甚至存在危險。</b><br><br>這些檢查表明該應用程式是預先修補的或來自其他來源:<br><br><small>%1$s</small><br>強烈建議<b>解除安裝此應用程式並自行修補</b>,以確保您使用的是經過驗證且安全的應用程式。<p><br>如果忽略,此警告僅會顯示兩次。
+  <h5>這個應用程式似乎並非由你修補。</h5><br>這個應用程式可能無法正常運作,<b>可能有害甚至存在危險。</b><br><br>這些檢查表明該應用程式是預先修補的或來自其他來源:<br><br><small>%1$s</small><br>強烈建議<b>解除安裝此應用程式並自行修補</b>,以確保你使用的是經過驗證且安全的應用程式。<p><br>如果忽略,此警告僅會顯示兩次。<2>
   在其他裝置上修補
   不是由 ReVanced Manager 安裝
   修補時間超過 10 分鐘
   修補於 %s 天前
-  APK 建構日期已損壞
+  APK 建構日期已損毀
   
   
+  設定
   ReVanced
   確定要繼續嗎?
   重設
@@ -44,67 +45,67 @@ Second \"item\" text"
   已匯入設定 %d
   無法匯入:%s
   ReVanced 語言
-  "某些語言的翻譯可能遺失或尚未完成。
+  "部分語言的翻譯可能缺少或不完整。
 
-如要為尚無翻譯的語言進行翻譯,請造訪 translate.revanced.app。"
+如要翻譯新的語言,請前往 translate.revanced.app。"
   應用程式語言
-  Arabic
-  Azerbaijani
-  Bulgarian
-  Bengali
-  Catalan
-  Czech
-  Danish
-  German
-  Greek
-  English
-  Spanish
-  Estonian
-  Persian
-  Finnish
-  French
-  Gujarati
-  Hindi
-  Croatian
-  Hungarian
-  Indonesian
-  Italian
-  Japanese
-  Kazakh
-  Korean
-  Lithuanian
-  Latvian
-  Macedonian
-  Mongolian
-  Marathi
-  Malay
-  Burmese
-  Dutch
-  Odia
-  Punjabi
-  Polish
-  Portuguese
-  Romanian
-  Russian
-  Slovak
-  Slovene
-  Serbian
-  Swedish
-  Swahili
-  Tamil
-  Telugu
-  Thai
-  Turkish
-  Ukrainian
-  Urdu
-  Vietnamese
+  阿拉伯文
+  亞塞拜然文
+  保加利亞文
+  孟加拉文
+  加泰隆尼亞文
+  捷克文
+  丹麥文
+  德文
+  希臘文
+  英文
+  西班牙文
+  愛沙尼亞文
+  波斯文
+  芬蘭文
+  法文
+  古吉拉特文
+  印地文
+  克羅埃西亞文
+  匈牙利文
+  印尼文
+  義大利文
+  日文
+  哈薩克文
+  韓文
+  立陶宛文
+  拉脫維亞文
+  馬其頓文
+  蒙古文
+  馬拉地文
+  馬來文
+  緬甸文
+  荷蘭文
+  歐利亞文
+  旁遮普文
+  波蘭文
+  葡萄牙文
+  羅馬尼亞文
+  俄文
+  斯洛伐克文
+  斯洛維尼亞文
+  塞爾維亞文
+  瑞典文
+  斯瓦希里文
+  坦米爾文
+  特拉古文
+  泰文
+  土耳其文
+  烏克蘭文
+  烏都文
+  越南文
   中文
-  匯入 / 匯出
-  匯入 / 匯出 ReVanced 設定
+  匯入/匯出
+  匯入/匯出 ReVanced 設定
   
   您正在使用 ReVanced 修補版本 <i>%s</i>
-  說明
-  這個版本為預先發布版,您可能會遇到非預期的問題。
+  注意
+  這個版本為預先發布版,你可能會遇到非預期的問題。
   官方連結
   
@@ -115,7 +116,7 @@ Second \"item\" text"
   需要採取行動
   "MicroG GmsCore 沒有權限在背景執行。
 
-請按照您手機的「不要關閉我的應用程式」指南,並將說明套用於您的 MicroG 安裝。
+請按照你手機的「不要關閉我的應用程式」指南,並將說明套用於你的 MicroG 安裝。
 
 這項設定是應用程式運作的必要條件。"
   開啟網站
@@ -132,14 +133,17 @@ Second \"item\" text"
   關於
   廣告
   替代縮圖
-  動態消息
-  播放器
-  通用版面
+  推薦內容
+  一般
+  播放器
   Shorts
-  拖拽欄
+  跳轉列
   滑動控制
   其他
   影片
+  回覆舊版設定選單
+  已回復舊版設定選單
+  已取消回復舊版設定選單
   
   
   停用背景播放 Shorts
@@ -152,61 +156,61 @@ Second \"item\" text"
   偵錯記錄
   已啟用偵錯記錄檔
   已停用偵錯記錄檔
-  記錄檔協議緩衝區
-  除錯記錄檔會包含協議緩衝資訊
-  除錯記錄檔不會包含協議緩衝資訊
+  記錄檔協定緩衝區
+  除錯記錄檔會包含協定緩衝資訊
+  除錯記錄檔不會包含協定緩衝資訊
   記錄檔堆疊追蹤
-  除錯記錄檔包含堆疊追蹤
-  除錯記錄檔不包含堆疊追蹤
+  除錯記錄檔會包含堆疊追蹤
+  除錯記錄檔不會包含堆疊追蹤
   在 ReVacned 錯誤時顯示提示
   若發生錯誤,顯示提示
   若發生錯誤,不顯示提示
-  "關閉錯誤提示將隱藏所有 ReVanced 錯誤通知。
+  "關閉錯誤訊息提示會隱藏所有 ReVanced 的錯誤通知。
 
-您將不會收到任何意外事件的通知。"
+你將不會收到任何非預期事件的通知。"
   
   
   停用「喜歡」和「訂閱」按鈕的發光效果
   提及時,「喜歡」和「訂閱」按鈕不會發光
   提及時,「喜歡」和「訂閱」按鈕會發光
-  隱藏專輯卡
-  已隱藏專輯卡
-  已顯示專輯卡
-  隱藏群眾募資
-  已隱藏群眾募資
-  已顯示群眾募資
+  隱藏專輯資訊卡
+  已隱藏專輯資訊卡
+  已顯示專輯資訊卡
+  隱藏群眾募資方塊
+  已隱藏群眾募資方塊
+  已顯示群眾募資方塊
   隱藏語音辨識按鈕
   已隱藏語音辨識按鈕
   已顯示語音辨識按鈕
   隱藏頻道浮水印
   已隱藏影片浮水印
   已顯示影片浮水印
-  隱藏水平櫃
-  "以下類型的資訊將被隱藏:
-• 最新消息
-• 繼續觀賞
+  隱藏橫向區塊
+  "這些橫向區塊將被隱藏,例如:
+• 即時新聞
+• 繼續觀看
 • 探索更多頻道
 • 購物
-• 再次觀賞"
-  已顯示櫃子
+• 再次觀看"
+  已顯示橫向區塊
   
   隱藏「加入」按鈕
   已隱藏按鈕
   已顯示按鈕
   
-  在頻道頁面中隱藏「為你推薦」匣
-  已隱藏「為你推薦」匣
-  已顯示「為你推薦」匣
+  在頻道頁面中隱藏「為你推薦」影片櫃
+  已隱藏影片櫃
+  已顯示影片櫃
   
   隱藏「通知我」按鈕
   已隱藏按鈕
   已顯示按鈕
   
-  隱藏「其他人還看了」推薦
-  已隱藏推薦
-  已顯示推薦
+  隱藏「其他人還看了」推薦內容
+  已隱藏推薦內容
+  已顯示推薦內容
   
   隱藏「顯示更多」按鈕
@@ -216,41 +220,41 @@ Second \"item\" text"
   已隱藏直播即時反應
   已顯示直播即時反應
   隱藏頻道規範
-  已隱藏頻道指南
-  已顯示節目指南
-  隱藏 [章節匣]
-  已隱藏 [章節匣]
-  已顯示 [章節匣]
-  隱藏影片下方的章節選擇欄
-  可展開的晶片已隱藏
-  可展開的晶片已顯示
+  已隱藏頻道規範
+  已顯示頻道規範
+  隱藏標籤列
+  已隱藏標籤列
+  已顯示標籤列
+  隱藏影片下方的可展開標籤
+  已隱藏可展開標籤
+  已顯示可展開標籤
   隱藏社群貼文
   已隱藏社群貼文
-  已顯示社區貼文
-  隱藏小型橫幅
-  簡潔的橫幅已隱藏
-  簡潔的橫幅已顯示
-  隱藏電影區
-  已隱藏電影區塊
-  已顯示電影區
+  已顯示社群貼文
+  隱藏精簡橫幅
+  已隱藏精簡橫幅
+  已顯示精簡橫幅
+  隱藏電影版面
+  已隱藏電影版面
+  已顯示電影版面
   隱藏動態影片問卷調查
   已隱藏動態影片問卷調查
   已顯示動態影片問卷調查
   隱藏《社群規範》
   已隱藏《社群規範》
   已顯示《社群規範》
-  隱藏訂閱者《社群規範》
+  隱藏《訂閱者社群規範》
   已隱藏《訂閱者社群規範》
   已顯示《訂閱者社群規範》
-  隱藏 [頻道會員匣]
-  已隱藏 [頻道會員匣]
-  已顯示 [頻道會員匣]
+  隱藏頻道會員專區
+  已隱藏頻道會員專區
+  已顯示頻道會員專區
   隱藏影片警告提醒
   已隱藏影片警告提醒
   已顯示影片警告提醒
   隱藏資訊面板
   已隱藏資訊面板
-  已顯示資訊板
+  已顯示資訊面板
   隱藏醫療資訊面板
   已隱藏醫療資訊面板
   已顯示醫療資訊面板
@@ -260,49 +264,49 @@ Second \"item\" text"
   隱藏遊戲角落
   已隱藏遊戲角落
   已顯示遊戲角落
-  隱藏全螢幕快捷功能欄
+  隱藏全螢幕中的快捷操作
   已隱藏快速操作
   已顯示快速操作
   隱藏快速操作相關影片
   已隱藏相關影片
-  已開啟顯示近期影片
-  在搜尋結果中隱藏 [圖片匣]
-  已隱藏 [圖片匣]
-  已顯示 [圖片匣]
+  已顯示相關影片
+  隱藏搜尋結果中的圖片區塊
+  已隱藏圖片區塊
+  已顯示圖片區塊
   隱藏最新貼文
   已隱藏最新貼文
   已顯示最新貼文
   隱藏合輯
   已隱藏合輯
   已顯示合輯
-  隱藏藝人卡
-  已隱藏藝人卡
-  已顯示藝人卡
-  隱藏屬性區
-  已隱藏「特色地點」、遊戲和音樂區
-  已顯示「特色地點」、遊戲和音樂區
-  隱藏章節區
-  已隱藏章節區
-  已顯示章節區
-  隱藏「探索 Podcast」區
-  已隱藏「探索 Podcast」區
-  已顯示「探索 Podcast」區
-  隱藏資訊卡區
-  已隱藏資訊卡區
-  已顯示資訊卡區
-  隱藏關鍵概念部分
-  已隱藏關鍵概念部分
-  已顯示關鍵概念部分
-  隱藏文字紀錄區
+  隱藏藝人資訊卡
+  已隱藏藝人資訊卡
+  已顯示藝人資訊卡
+  隱藏屬性版面
+  已隱藏「拍攝地點」、遊戲和音樂版面
+  已顯示「拍攝地點」、遊戲和音樂版面
+  隱藏章節版面
+  已隱藏章節版面
+  已顯示章節版面
+  隱藏「探索 Podcast」版面
+  已隱藏「探索 Podcast」版面
+  已顯示「探索 Podcast」版面
+  隱藏資訊卡版面
+  已隱藏資訊卡版面
+  已顯示資訊卡版面
+  隱藏「重點概念」版面
+  已隱藏「重點概念」版面
+  已顯示「重點概念」版面
+  隱藏文字記錄區
   已隱藏字幕記錄區
   已顯示字幕記錄區
-  影片描述欄
-  隱藏或顯示影片描述欄內容
+  影片說明
+  隱藏或顯示影片說明元件
   篩選列
-  隱藏或顯示動態消息、搜尋、相關影片篩選列
-  在動態消息中隱藏
-  在動態消息中隱藏
-  在動態消息中顯示
+  隱藏或顯示推薦內容、搜尋、相關影片篩選列
+  在推薦內容中隱藏
+  在推薦內容中隱藏
+  在推薦內容中顯示
   在搜尋中隱藏
   在搜尋中隱藏
   在搜尋中顯示
@@ -311,15 +315,15 @@ Second \"item\" text"
   在相關影片中顯示
   留言區
   隱藏或顯示影片留言區內容
-  隱藏「聊天摘要」 
-  「聊天摘要」已隱藏
-  「聊天摘要」已顯示
+  隱藏「聊天室摘要」
+  已隱藏「聊天室摘要」
+  已顯示「聊天室摘要」
   隱藏「會員留言」標題
-  已隱藏「由會員留言」標題
-  已顯示「由會員留言」標題
+  已隱藏「會員留言」標題
+  已顯示「會員留言」標題
   隱藏留言區
-  已隱藏留言區塊
-  已開啟顯示留言區塊
+  已隱藏留言區
+  已顯示留言區
   隱藏「建立 Short」按鈕
   已隱藏「建立 Short」按鈕
   已顯示「建立 Short」按鈕
@@ -336,11 +340,11 @@ Second \"item\" text"
   隱藏 YouTube Doodles
   已隱藏位於搜尋欄的 Doodles 
   已顯示位於搜尋欄的 Doodles 
-  "YouTube 塗鴉每年會顯示幾天。
+  "YouTube Doodles 每年會顯示幾天。
 
-如果塗鴉目前在您所在國家/地區顯示,而且此隱藏設定處於啟用狀態,搜尋列下方顯示的篩選列也會隱藏。"
+如果塗鴉目前在你所在國家/地區顯示,而且此隱藏設定處於啟用狀態,搜尋列下方顯示的篩選列也會隱藏。"
   自訂篩選器
-  使用自訂篩選器隱藏欄位
+  使用自訂篩選器隱藏元件
   啟用自訂篩選器
   已啟用自訂篩選器
   已停用自訂篩選器
@@ -349,37 +353,37 @@ Second \"item\" text"
   列出篩選的欄位路徑建構器字串,使用換行符號進行分隔
   無效的自訂篩選器:%s
   隱藏關鍵字內容
-  使用關鍵字過濾器隱藏搜尋和動態消息影片
-  按關鍵字隱藏首頁影片
-  已按關鍵字過濾首頁標籤影片
-  未按關鍵字過濾首頁標籤影片
-  按關鍵字隱藏訂閱
-  已按關鍵字過濾訂閱標籤影片
-  未按關鍵字過濾訂閱標籤影片
-  按關鍵字隱藏搜尋結果
-  已按關鍵字過濾搜尋結果
-  未按關鍵字過濾搜尋結果
-  隱藏關鍵字
+  透過關鍵字篩選,隱藏搜尋結果與推薦內容中的影片
+  依關鍵字隱藏首頁影片
+  首頁影片將會被關鍵字篩選
+  首頁影片將不會被關鍵字篩選
+  依關鍵字隱藏訂閱內容影片
+  訂閱內容分頁的影片將會被關鍵字篩選
+  訂閱內容分頁的影片將不會被關鍵字篩選
+  依關鍵字隱藏搜尋結果
+  搜尋結果將會被關鍵字篩選
+  搜尋結果將不會被關鍵字篩選
+  要隱藏的關鍵字
   
-  "要隱藏的關鍵字和詞組,請以新行分隔
+  "要隱藏的關鍵字和詞語,請用換行符號分隔
 
-關鍵字可以是頻道名稱或顯示在影片標題中的任何文字
+關鍵字可以是頻道名稱或影片標題中顯示的任何文字
 
-中間有字母大寫的詞組必須使用大小寫輸入(即:iPhone、TikTok、LeBlanc)"
-  關於關鍵字過濾
-  "首頁/訂閱/搜尋結果會根據篩選條件,隱藏包含關鍵字詞組的相關內容
+中間有大寫字母的詞語必須輸入完全相同的大小寫(例如:iPhone、TikTok、YouTube)"
+  關於關鍵字篩選
+  "首頁/訂閱/搜尋結果會根據篩選條件,隱藏包含關鍵字詞組的相關內容
 
 限制
 • YouTube Shorts 無法透過頻道名稱篩選隱藏
 • 某些使用者介面可能無法隱藏
 • 搜尋關鍵字可能顯示無結果"
-  匹配整個詞彙
+  比對整個字詞
   
   將關鍵字或詞組用雙引號括起來,可以防止影片標題和頻道名稱的部分匹配<br><br>例如:<br><b>\"ai\"</b> 會隱藏影片:<b>How does AI work?</b><br>但不會隱藏:<b>What does fair use mean?</b>
   
   無法使用關鍵字:%s
-  請添加引號以使用關鍵字:%s
+  請加上引號來使用關鍵字:%s
   關鍵字存在衝突聲明:%s
   關鍵字過短,需要加上引號:%s
   關鍵字將隱藏所有影片:%s
@@ -387,18 +391,18 @@ Second \"item\" text"
   
   隱藏一般廣告
   已隱藏一般廣告
-  已開啟顯示一般廣告
+  已顯示一般廣告
   隱藏全螢幕廣告
   "全螢幕廣告已隱藏
 
 此功能僅適用於舊版裝置"
-  已開啟顯示全螢幕廣告
-  隱藏按鈕廣告
-  已隱藏按鈕型廣告
-  已開啟顯示按鈕化廣告
+  已顯示全螢幕廣告
+  隱藏帶按鈕的廣告
+  已隱藏帶按鈕的廣告
+  已顯示帶按鈕的廣告
   隱藏付費推廣標籤
   已隱藏付費推廣標籤
-  已開啟顯示付費推廣標籤
+  已顯示付費推廣標籤
   隱藏自我贊助資訊卡
   已隱藏自我贊助資訊卡
   已顯示自我贊助資訊卡
@@ -425,30 +429,30 @@ Second \"item\" text"
   只能在舊裝置上使用隱藏全螢幕廣告
   
   
-  隱藏 YouTube Premium 推廣
-  已隱藏影片播放器下方 YouTube Premium 推廣
-  已顯示影片播放器下方 YouTube Premium 推廣
+  隱藏 YouTube Premium 促銷內容
+  已隱藏影片播放器下方 YouTube Premium 促銷內容
+  已顯示影片播放器下方 YouTube Premium 促銷內容
   
   
   隱藏影片廣告
   已隱藏影片廣告
-  已開啟顯示影片廣告
+  已顯示影片廣告
   
   
-  已複製 URL 到剪貼簿
-  已複製時間戳記 URL
-  顯示複製影片 URL 按鈕
-  已顯示按鈕。點擊將複製影片 URL。點擊並按住將複製帶有時間戳記的影片 URL
+  已將網址複製到剪貼簿
+  已複製時間戳記網址
+  顯示複製影片網址按鈕
+  已顯示按鈕。輕觸將複製影片網址。輕觸並按住將複製帶有時間戳記的影片網址。
   未顯示按鈕
   顯示複製時間戳記 URL 按鈕
   已顯示按鈕。點擊將複製帶有時間戳記的影片 URL。點擊並按住將複製不帶時間戳記的影片 URL
   未顯示按鈕
   
   
-  移除謹慎觀看對話框
-  將移除對話框
-  將顯示對話框
-  此功能無法繞過年齡限制。它只是自動按下確認。
+  移除觀眾謹慎觀看對話方塊
+  將移除對話方塊
+  將顯示對話方塊
+  這不會繞過年齡限制,只是自動按下同意。
   
   
   外部下載
@@ -465,14 +469,14 @@ Second \"item\" text"
   未安裝 %s。請前往安裝。
   
   
-  停用精確搜尋手勢
+  停用精準跳轉手勢
   已停用手勢
   已啟用手勢
   
   
-  啟用拖拽欄點擊
-  已啟用拖拽欄點擊
-  已停用拖拽欄點擊
+  啟用跳轉列輕觸
+  已啟用跳轉列輕觸
+  已停用跳轉列輕觸
   
   
   啟用亮度手勢
@@ -494,22 +498,22 @@ Second \"item\" text"
   滑動至最低點手勢以啟用自動亮度
   滑動至最低點手勢不啟用自動亮度
   自動
-  滑動覆蓋超時
-  覆蓋顯示毫秒數
-  滑動覆蓋文字大小
+  滑動覆蓋顯示時間
+  覆蓋顯示的毫秒數
+  滑動覆蓋的文字大小
   滑動覆蓋的文字大小
   滑動背景透明度
   滑動覆蓋背景透明度
   滑動幅度臨界點
   滑動幅度臨界點
-  啟用滑動以變更影片
-  在全螢幕模式下滑動會切換到下一個/上一個影片
-  在全螢幕模式下滑動不會切換到下一個/上一個影片
+  啟用滑動切換影片
+  在全螢幕模式下滑動會切換到下一部/上一部影片
+  在全螢幕模式下滑動不會切換到下一部/上一部影片
   
   
-  停用自動產生字幕
-  已停用自動產生字幕
-  已啟用自動產生字幕
+  停用自動產生的字幕
+  已停用自動產生的字幕
+  已啟用自動產生的字幕
   
   
   動作按鈕
@@ -527,9 +531,9 @@ Second \"item\" text"
   已隱藏檢舉按鈕
   已顯示檢舉按鈕
   
-  隱藏重混
-  已隱藏重混
-  顯示重新混音按鈕
+  隱藏 Remix
+  已隱藏 Remix 按鈕
+  已顯示 Remix 按鈕
   
   隱藏下載
   已隱藏下載按鈕
@@ -543,13 +547,13 @@ Second \"item\" text"
   已隱藏剪輯片段按鈕
   已顯示剪輯片段按鈕
   
-  隱藏儲存到播放列表
-  已隱藏儲存到播放列表
-  已顯示儲存到播放列表
+  隱藏儲存至播放清單
+  已隱藏儲存至播放清單
+  已顯示儲存到播放清單
   
   
   導覽列按鈕
-  隱藏或變更導覽區按鈕
+  隱藏或變更導覽列中的按鈕
   
   隱藏首頁
   已隱藏首頁按鈕
@@ -613,8 +617,8 @@ Second \"item\" text"
   已隱藏 [平衡音量]
   
   隱藏說明和意見回饋
-  已隱藏說明與回饋選單
-  已顯示說明與回饋選單
+  已隱藏說明和意見回饋選單
+  已顯示說明和意見回饋選單
   
   隱藏播放速度
   已隱藏播放速度選單
@@ -626,19 +630,19 @@ Second \"item\" text"
   已顯示更多資訊
   
   隱藏鎖定螢幕
-  已隱藏鎖定螢幕選單
-  已顯示鎖定螢幕選單
+  已隱藏螢幕鎖定選單
+  已顯示螢幕鎖定選單
   
-  隱藏音軌
-  已隱藏音軌選單
-  已顯示音軌選單
+  隱藏音訊
+  已隱藏音訊選單
+  已顯示音訊選單
   
-  隱藏在 VR 觀看
-  已隱藏在 VR 觀看
-  已顯示在 VR 觀看
-  隱藏 [影片畫質] 選單頁尾
-  已隱藏 [影片畫質] 選單頁尾
-  已顯示 [影片畫質] 選單頁尾
+  隱藏以 VR 模式觀看
+  已隱藏以 VR 模式觀看
+  已顯示以 VR 模式觀看
+  隱藏影片畫質選單頁尾
+  已隱藏影片畫質選單頁尾
+  已顯示影片畫質選單頁尾
   
   
   隱藏上一部和下一部影片按紐
@@ -671,35 +675,35 @@ Second \"item\" text"
   已顯示資訊卡
   
   
-  停用數字滾動動畫
-  非動畫滾動數字
-  動畫滾動數字
+  停用數字滾動動畫效果
+  滾動的數字將不會有動畫效果
+  滾動的數字將會有動畫效果
   
   
-  隱藏影片播放器拖拽欄
-  已隱藏影片播放器拖拽欄
-  已顯示影片播放器拖拽欄
-  在縮圖中隱藏拖拽欄
-  已隱藏縮圖拖拽欄
-  已顯示縮圖拖拽欄
+  隱藏影片播放器跳轉列
+  已隱藏影片播放器跳轉列
+  已顯示影片播放器跳轉列
+  在縮圖中隱藏跳轉列
+  已隱藏縮圖跳轉列
+  已顯示縮圖跳轉列
   
   
   Shorts 播放器
   隱藏或顯示 Shorts 播放器的元件
   
-  隱藏 Shorts 首頁動態消息
-  隱藏在首頁饋送和相關影片中
-  顯示在首頁饋送和相關影片中
+  隱藏 Shorts 首頁推薦內容
+  隱藏在首頁推薦和相關影片中
+  顯示在首頁推薦內容和相關影片中
   
-  隱藏 Shorts 訂閱內容動態消息
-  已隱藏在訂閱動態
-  已顯示在訂閱動態
-  隱藏 Shorts 搜尋結果
-  隱藏於搜尋結果中
-  已顯示在搜尋結果
-  隱藏 Shorts 於觀看紀錄中
-  已隱藏在觀看記錄
-  顯示於觀看紀錄中
+  隱藏訂閱內容中的 Shorts
+  已在訂閱內容中隱藏
+  在訂閱內容中顯示
+  隱藏搜尋結果中的 Shorts
+  已在搜尋結果中隱藏
+  在搜尋結果中顯示
+  隱藏觀看記錄中的 Shorts
+  已在觀看記錄中隱藏
+  在觀看記錄中顯示
   
   隱藏加入按鈕
   已隱藏加入按鈕
@@ -714,39 +718,39 @@ Second \"item\" text"
   隱藏商店按鈕
   已隱藏商店按鈕
   已顯示商店按鈕
-  隱藏 [超級感謝] 按鈕
-  已隱藏 [超級感謝] 按鈕
-  已顯示 [超級感謝] 按鈕
+  隱藏超級感謝按鈕
+  已隱藏超級感謝按鈕
+  已顯示超級感謝按鈕
   隱藏標記產品
-  已隱藏標註產品
-  已開啟顯示標註產品
-  隱藏地區標籤
+  已隱藏標記產品
+  已顯示標記產品
+  隱藏地點標籤
   已隱藏地點標籤
-  已開啟顯示地點標籤
-  隱藏 [儲存音樂] 按鈕
-  已隱藏 [儲存音樂] 按鈕
-  已顯示 [顯示音樂] 按鈕
-  隱藏 [使用範本] 按鈕
-  已隱藏 [使用範本] 按鈕
-  已顯示 [使用範本] 按鈕
-  隱藏 [即將到來] 按鈕
-  已隱藏 [即將到來] 按鈕
-  已顯示 [即將到來] 按鈕
-  隱藏 [綠色畫面] 按鈕
-  已隱藏 [綠色畫面] 按鈕
-  已顯示 [綠色畫面] 按鈕
+  已顯示地點標籤
+  隱藏儲存音樂按鈕
+  已隱藏儲存音樂按鈕
+  已顯示顯示音樂按鈕
+  隱藏使用範本按鈕
+  已隱藏使用範本按鈕
+  已顯示使用範本按鈕
+  隱藏即將到來按鈕
+  已隱藏即將到來按鈕
+  已顯示即將到來按鈕
+  隱藏綠色畫面按鈕
+  已隱藏綠色畫面按鈕
+  已顯示綠色畫面按鈕
   隱藏主題標籤按鈕
-  主題標籤按鈕已隱藏
-  主題標籤按鈕已顯示
+  已隱藏主題標籤按鈕
+  已顯示主題標籤按鈕
   隱藏搜尋建議
   已隱藏搜尋建議
-  已開啟顯示搜尋建議
-  隱藏「Stickers」
-  已隱藏「Stickers」
-  已顯示「Stickers」
-  隱藏 [喜歡] 按鈕的動畫
-  已隱藏 [喜歡] 按鈕的動畫
-  已顯示 [喜歡] 按鈕的動畫
+  已顯示搜尋建議
+  隱藏貼圖
+  已隱藏貼圖
+  已顯示貼圖
+  隱藏喜歡按鈕的動畫
+  已隱藏喜歡按鈕的動畫
+  已顯示喜歡按鈕的動畫
   隱藏「喜歡」按鈕
   已隱藏「喜歡」按鈕
   已顯示「喜歡」按鈕
@@ -757,9 +761,9 @@ Second \"item\" text"
   已隱藏留言按鈕
   已顯示留言按鈕
   
-  隱藏重混按鈕
-  已隱藏重混
-  已顯示重混
+  隱藏 Remix 按鈕
+  已隱藏 Remix 按鈕
+  已顯示 Remix 按鈕
   
   隱藏分享按鈕
   已隱藏分享按鈕
@@ -820,10 +824,10 @@ Second \"item\" text"
   
   
   
-  暫時無法使用「不喜歡」數(API 超時)
+  暫時無法使用「不喜歡」數(API 逾時)
   無法使用「不喜歡」數(狀態 %d)
   無法使用「不喜歡」數(已達到用戶端 API 限制)
-  無法使用「不喜歡」數(%s)
+  無法使用「不喜歡」數 (%s)
   
   重新載入影片以使用 Return YouTube Dislike 進行投票
   已顯示「不喜歡」數
@@ -842,21 +846,21 @@ Second \"item\" text"
   「喜歡」按鈕的最小寬度
   「喜歡」按鈕的最佳外觀
   若 API 無法使用,顯示提示
-  若 Return YouTube Dislike 無法使用,顯示提示
-  若 Return YouTube Dislike 無法使用,不顯示提示
+  若 Return YouTube Dislike 無法使用,則顯示提示
+  若 Return YouTube Dislike 無法使用,則隱藏提示
   關於
-  資料由 Return YouTube Dislike API 提供。點擊此處來瞭解更多資訊
+  資料由 Return YouTube Dislike API 提供。輕觸這裡來了解更多資訊
   
   回傳此裝置的 ReturnYouTubeDislike API 統計資料
   平均 API 回應時間
   最短 API 回應時間
   最長 API 回應時間
   最後一個影片的 API 回應時間
-  暫時無法使用「不喜歡」數 - 用戶端 API 頻率限制已生效
+  暫時無法使用「不喜歡」數 — 用戶端 API 頻率限制已生效
   API 取得投票呼叫數
-  沒有進行網路調用
-  進行了 %d 次網路調用
-  API取得投票超時數
+  沒有進行網路呼叫
+  進行了 %d 次網路呼叫
+  API取得投票逾時數
   無網路呼叫逾時
   %d 個網路呼叫逾時
   API 用戶端頻率限制
@@ -871,18 +875,18 @@ Second \"item\" text"
   
   
   啟用高畫質縮圖
-  已設定拖拽欄為高畫質縮圖
-  已設定拖拽欄為中畫質縮圖
-  已設定全螢幕拖拽欄為高畫質縮圖
-  已設定全螢幕拖拽欄為中畫質縮圖
+  已設定跳轉列為高畫質縮圖
+  已設定跳轉列為中畫質縮圖
+  已設定全螢幕跳轉列為高畫質縮圖
+  已設定全螢幕跳轉列為中畫質縮圖
   "這也會在沒有時間軸縮略圖的直播影片中恢復縮略圖。
 
 時間軸縮略圖將使用與目前影片相同的畫質。
 
 這項功能在影片畫質為 720p 或更低或使用高速網路連線時效果最佳。"
-  還原舊版拖拽欄縮圖
-  拖拽欄縮圖將出現在拖拽欄上
-  拖拽欄縮圖將出現在全螢幕畫面
+  還原舊版跳轉列縮圖
+  跳轉列縮圖將出現在跳轉列上方
+  跳轉列縮圖將出現在全螢幕畫面
   
   
   啟用 SponsorBlock
@@ -899,8 +903,8 @@ Second \"item\" text"
   在幾秒過後隱藏跳過按鈕
   為整個片段顯示跳過按鈕
   自動跳過時顯示提示
-  已顯示在片段被自動跳過時的提示。點擊此處來查看範例
-  未顯示提示。點擊此處來查看範例
+  已顯示在片段被自動跳過時的提示。輕觸這裡來查看範例
+  已隱藏提示。輕觸這裡來查看範例
   顯示不包含被略過片段的時間戳記
   將被略過片段減去的時間戳括號後,顯示於完整時間戳記旁邊
   只顯示完整的時間戳記
@@ -931,15 +935,15 @@ Second \"item\" text"
   這應該被保密。這就像一個密碼,不應該與他人分享。如果有人擁有它,他們就可以冒充您
   個人使用者 ID 必須至少有 30 字元長
   變更 API URL
-  SponsorBlock 用來和伺服器互動的地址
+  SponsorBlock 用來和伺服器互動的位址
   重設 API URL
   無效的 API URL
   已變更 API URL
-  匯入 / 匯出設定
+  匯入/匯出設定
   複製
-  您的 SponsorBlock JSON 設定可以匯入 / 匯出到 ReVanced 和其他 SponsorBlock 平台
-  您的 SponsorBlock JSON 設定可以匯入 / 匯出到 ReVanced 和其他 SponsorBlock 平台。此檔案將包含您的個人使用者 ID。請小心使用。
-  已成功地匯入設定
+  您的 SponsorBlock JSON 設定可以匯入/匯出到 ReVanced 和其他 SponsorBlock 平台
+  你的 SponsorBlock JSON 設定可以匯入/匯出到 ReVanced 和其他 SponsorBlock 平台。這個檔案包含你的個人使用者 ID。請小心使用。
+  已成功匯入設定
   無法匯入:%s
   無法匯出:%s
   "您的設定包含私人 SponsorBlock 使用者 ID。
@@ -948,20 +952,20 @@ Second \"item\" text"
   不要再顯示
   變更片段操作
   贊助商廣告
-  付費推廣、付費推薦和直接廣告。不得用於自我推廣或免費宣傳他們喜歡的事業、創作者、網站或產品
-  非付費 / 自我推廣
+  付費推廣、付費推薦和直接廣告。不得用於自我推廣或免費宣傳他們喜歡的事業/創作者/網站/產品
+  非付費/自我推廣
   類似「贊助商廣告」,但是非付費或自我推廣。這包括有關商品、捐贈或與他人合作的資訊
   互動提醒(訂閱)
-  這裡就是指「按喜歡訂閱加分享」。若此片段很長或是針對某事,請將其歸類為非付費 / 自我推廣
+  在內容中間穿插簡短提醒,例如按讚、訂閱或追蹤他們。如果內容較長或針對特定主題,則應將相關宣傳放在自我宣傳區
   重播次數最多
   大部分的人在影片尋找的部分
-  中場休息 / 開頭動畫
+  中場休息/開頭動畫
   沒有實際內容的片段。可以是個靜止的幀,重複性動畫。這不應該是含有資訊的
-  結尾資訊卡 / 鳴謝
+  片尾資訊卡/鳴謝
   鳴謝或當 YouTube 結尾資訊卡出現時。不是含有資訊的總結
-  預覽 / 回顧 / 摘要節錄
+  預覽/回顧/摘要節錄
   展示即將播放的影片或整系列內容的短片集錦,所有內容都會在後面影片中重複
-  離題閒聊 / 玩笑
+  離題閒聊/玩笑
   與影片主要內容無關的填充詞或笑話,但不應包含與前後或背景有關者
   音樂:非音樂部分
   此功能僅供音樂影片使用。本功能僅應該用於音樂錄影帶中並未包含其他類別的段落
@@ -999,7 +1003,7 @@ Second \"item\" text"
   自動跳過
   自動跳過一次
   顯示跳過按鈕
-  在拖拽欄顯示
+  在跳轉列顯示
   停用
   無法提交片段:%s
   SponsorBlock 暫時離線
@@ -1007,18 +1011,17 @@ Second \"item\" text"
   無法提交片段。頻率限制(同一位使用者或 IP 的提交次數過多)
   無法提交片段:%s
   "無法提交片段。
-
-已存在"
+已經存在"
   成功提交新片段
   
-  SponsorBlock 暫時無法使用(API 超時)
+  SponsorBlock 暫時無法使用(API 逾時)
   SponsorBlock 暫時無法使用(狀態 %d)
   SponsorBlock 暫時無法使用
-  無法為片段投票(API 超時)
-  無法為此片段投票(狀態:%1$d %2$s)
-  無法為此片段投票:%s
+  無法為片段投票(API 逾時)
+  無法為這個片段投票(狀態:%1$d %2$s)
+  無法為這個片段投票:%s
   按讚
-  按倒讚
+  倒讚
   變更類別
   沒有可以投票的片段
   選擇片段的類別
@@ -1050,22 +1053,22 @@ Second \"item\" text"
   統計
   
   統計資料暫時無法使用(API 離線)
-  正在載入……
-  已停用 SponsorBloc
-  您的使用者名稱:<b>%s</b>
-  點擊以更改您的使用者名稱
-  無法更改使用者名稱:狀態:%1$d %2$s
+  載入中…
+  已停用 SponsorBlock
+  你的使用者名稱:<b>%s</b>
+  輕觸這裡變更你的使用者名稱
+  無法變更使用者名稱:狀態:%1$d %2$s
   使用者名稱變更成功
-  您的評價是 <b>%.2f</b>
-  您已建立 <b>%s</b> 個片段
-  點擊這裡查看您的片段
+  你的評價是 <b>%.2f</b>
+  你已建立 <b>%s</b> 個片段
+  輕觸這裡查看你的片段
   SponsorBlock 排行榜
   您已為人們省下了觀看 <b>%s</b> 個片段的時間
   輕觸這裡查看全球統計資料和最佳貢獻者
   那可是他們生命中寶貴的 <b>%s</b>。<br>點選檢視排行榜
   您已跳過 <b>%s</b> 個片段
   總共 <b>%s</b>
-  重置略過片段的計數器?
+  要重設略過片段的計數器嗎?
   %1$s 小時 %2$s 分鐘
   %1$s 分鐘 %2$s 秒
   %s 秒
@@ -1076,7 +1079,7 @@ Second \"item\" text"
   重設顏色
   重設
   關於
-  資料由 SponsorBlock API 提供。點擊此處來瞭解更多資訊和查看其他平台的下載
+  資料由 SponsorBlock API 提供。輕觸這裡來瞭解更多資訊和查看其他平台的下載
   
   
   修改排版形式係數
@@ -1107,13 +1110,13 @@ Second \"item\" text"
   
   欺騙應用程式版本目標
-  19.35.36 - 還原舊版 Shorts 播放圖標
-  19.26.42 - 恢復舊版導覽和工具列圖示
+  19.35.36 - 還原舊版 Shorts 播放圖示
+  19.26.42 - 還原舊版導覽和工具列圖示
   
   18.33.40 - 在 Shorts 無痕模式中還原 RYD
-  18.20.39 - 還原寬影片速度 & 畫質選單
-  18.09.39 - 還原庫標籤
-  17.33.42 - 還原舊版播放清單匣
+  18.20.39 - 還原寬影片速度與畫質選單
+  18.09.39 - 還原媒體庫分頁
+  17.33.42 - 還原舊版播放清單櫃
   
   
   設定起始頁面
@@ -1129,7 +1132,7 @@ Second \"item\" text"
   音樂
   搜尋
   運動
-  訂閱
+  訂閱內容
   發燒影片
   稍後觀看
   
@@ -1154,7 +1157,7 @@ Second \"item\" text"
   
   
   迷你播放器
-  更改應用程式內縮小播放器的樣式
+  變更應用程式中小型播放器的樣式
   迷你播放器類型
   已停用
   預設
@@ -1177,20 +1180,20 @@ Second \"item\" text"
 
 迷你播放器可以拖曳至螢幕的任何角落"
   已停用拖曳
-  啟用水平拖拽手勢
+  啟用水平拖曳手勢
   "已啟用水平拖曳手勢
 
 迷你播放器可以拖曳到螢幕的左側或右側隱藏"
-  已停用水平拖拽手勢
-  隱藏 [關閉] 按鈕
-  已隱藏 [關閉] 按鈕
-  已顯示 [關閉] 按鈕
-  隱藏 [展開] 和 [關閉] 按鈕
+  已停用水平拖曳手勢
+  隱藏關閉按鈕
+  已隱藏 [關閉按鈕
+  已顯示關閉按鈕
+  隱藏展開和關閉按鈕
   "按鈕已隱藏
 
 向上或向下滑動以展開或關閉"
-  已顯示 [展開] 和 [關閉] 按鈕
-  隱藏副標
+  已顯示展開和關閉按鈕
+  隱藏副標題
   已隱藏字幕
   已開啟顯示字幕
   隱藏快轉和倒帶按鈕
@@ -1209,12 +1212,12 @@ Second \"item\" text"
   載入畫面將有純色背景
   
   
-  啟用自訂拖拽欄顏色
-  已顯示自訂拖拽欄顏色
-  已顯示原版拖拽欄顏色
-  自訂拖拽欄顏色
-  拖拽欄顏色
-  滑動桿色彩值無效
+  啟用自訂跳轉列顏色
+  已顯示自訂跳轉列顏色
+  已顯示原版跳轉列顏色
+  自訂跳轉列顏色
+  跳轉列顏色
+  跳轉列色彩值無效
   
   
   繞過圖片區域限制
@@ -1230,7 +1233,7 @@ Second \"item\" text"
   訂閱標籤
   
   個人中心
-  播放器列表、推薦
+  播放器播放清單、推薦內容
   搜尋結果
   原版縮圖
   DeArrow & 原版縮圖
@@ -1248,7 +1251,7 @@ Second \"item\" text"
   DeArrow API 端點
   DeArrow URL 縮圖快取端點
   靜態影片擷取
-  靜態捕捉是擷取每個影片的開頭 / 中間 / 結尾作為縮圖。這些圖像內建於 YouTube 中,不會使用外部 API
+  靜態捕捉是擷取每個影片的開頭/中間/結尾作為縮圖。這些圖像內建於 YouTube 中,不會使用外部 API
   使用快速靜態捕捉
   使用中等品質靜態擷取。縮圖載入速度會更快,但直播、未發布或非常舊的影片可能會顯示空白縮圖
   使用高品質的靜態捕捉
@@ -1257,7 +1260,7 @@ Second \"item\" text"
   影片中間
   影片結尾
   
-  DeArrow 暫時無法使用(狀態代碼:%s)
+  DeArrow 暫時無法使用(狀態碼:%s)
   DeArrow 暫時無法使用
   
   
@@ -1271,7 +1274,7 @@ Second \"item\" text"
   
   警告
   你的觀看記錄未被儲存。<br><br>這很可能是由於 DNS 廣告封鎖器或網路代理所導致。<br><br>若要解決此問題,請將 <b>s.youtube.com</b> 加入白名單,或關閉所有 DNS 封鎖器和代理。
-  不要再顯示
+  不再顯示
   
   
   啟用自動循環播放
@@ -1331,19 +1334,21 @@ Second \"item\" text"
   變更畫質預設 %1$s 為 %2$s
   
   
-  顯示速度對話框按鈕
+  顯示速度對話方塊按鈕
   已顯示按鈕
-  未顯示按鈕
+  已隱藏按鈕
   
   
   自訂 [播放速度] 選單
   已顯示自訂 [播放速度] 選單
   已隱藏自訂 [播放速度] 選單
   自訂播放速度
-  新增或更改自訂播放速度
+  新增或變更自訂播放速度
   自訂速度必須小於 %s
   自訂播放速度格式不正確
   自動
+  自訂輕觸和長按時長
+  播放速度介於 0-8
   
   
   記住播放速度
@@ -1355,7 +1360,7 @@ Second \"item\" text"
   
   還原舊版影片畫質選單
   已顯示舊版影片畫質選單
-  未顯示舊版影片畫質選單
+  已隱藏舊版影片畫質選單
   
   
   啟用滑動預覽
@@ -1385,11 +1390,10 @@ A​VC 的最高解析度為 1080p,不支援 Opus 音訊解碼器,而且與
 • 無法使用穩定音量控制
 • 影片提前 1 秒結束"
   偽裝 Android 的副作用
-  "• 音軌選單遺失
+  "• 音訊選單遺失
 • 無法使用穩定音量
 • 無法強制使用原始音訊"
   • 沒有 AV1 影片解碼器
-  • 沒有 HDR 影片
   顯示統計資料
   於統計資料中顯示用戶端類型
   於統計資料中隱藏用戶端類型
@@ -1411,9 +1415,9 @@ A​VC 的最高解析度為 1080p,不支援 Opus 音訊解碼器,而且與
   PurpleAdBlock 代理
   
   
-  阻擋影片廣告
-  已阻擋影片廣告
-  未阻擋影片廣告
+  攔截影片廣告
+  已攔截影片廣告
+  未攔截影片廣告
   
   
   已刪除訊息
@@ -1429,8 +1433,8 @@ A​VC 的最高解析度為 1080p,不支援 Opus 音訊解碼器,而且與
   
   
   
-  啟用 Twitch  除錯模式
-  已啟用 Twitch  除錯模式(不推薦啟用)
+  啟用 Twitch 除錯模式
+  已啟用 Twitch 除錯模式(不推薦啟用)
   已停用 Twitch 除錯模式
   
   
@@ -1438,7 +1442,7 @@ A​VC 的最高解析度為 1080p,不支援 Opus 音訊解碼器,而且與
   關於
   關於 ReVanced
   廣告
-  廣告阻擋設定
+  廣告攔截設定
   聊天
   聊天設定
   其他
diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml
index 3165e0a47..a8bf565d9 100644
--- a/patches/src/main/resources/addresources/values/arrays.xml
+++ b/patches/src/main/resources/addresources/values/arrays.xml
@@ -116,7 +116,6 @@
             
                 Android VR
                 @string/revanced_spoof_video_streams_client_type_android_vr_no_auth
-                Android Creator
                 Android TV
                 iOS TV
             
@@ -124,7 +123,6 @@
                 
                 ANDROID_VR
                 ANDROID_VR_NO_AUTH
-                ANDROID_CREATOR
                 ANDROID_UNPLUGGED
                 IOS_UNPLUGGED
             
diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml
index 2e4a803d7..ffceca0ad 100644
--- a/patches/src/main/resources/addresources/values/strings.xml
+++ b/patches/src/main/resources/addresources/values/strings.xml
@@ -32,6 +32,7 @@ Second \"item\" text"
             APK build date is corrupted
         
         
+            Settings
             ReVanced
             Do you wish to proceed?
             Reset
@@ -132,13 +133,16 @@ Tap the continue button and allow optimization changes."
             Ads
             Alternative thumbnails
             Feed
-            Player
-            General layout
+            General
+            Player
             Shorts
             Seekbar
             Swipe controls
-            Misc
+            Miscellaneous
             Video
+            Restore old settings menus
+            Old settings menus are shown
+            Old settings menus are not shown
         
         
             Disable Shorts background play
@@ -1351,6 +1355,8 @@ Enabling this can unlock higher video qualities"
             Custom speeds must be less than %s
             Invalid custom playback speeds
             Auto
+            Custom tap and hold speed
+            Playback speed between 0-8
         
         
             Remember playback speed changes
@@ -1396,7 +1402,6 @@ AVC has a maximum resolution of 1080p, Opus audio codec is not available, and vi
 • Stable volume is not available
 • Force original audio is not available"
             • No AV1 video codec
-            • No HDR video
             Show in Stats for nerds
             Client type is shown in Stats for nerds
             Client is hidden in Stats for nerds
diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_icon.xml b/patches/src/main/resources/settings/drawable/revanced_settings_icon.xml
new file mode 100644
index 000000000..a7d7185fa
--- /dev/null
+++ b/patches/src/main/resources/settings/drawable/revanced_settings_icon.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+    
+    
+
\ No newline at end of file
diff --git a/patches/src/main/resources/settings/layout/revanced_settings_with_toolbar.xml b/patches/src/main/resources/settings/layout/revanced_settings_with_toolbar.xml
index 1c91a9bc6..238dc5f79 100644
--- a/patches/src/main/resources/settings/layout/revanced_settings_with_toolbar.xml
+++ b/patches/src/main/resources/settings/layout/revanced_settings_with_toolbar.xml
@@ -10,6 +10,7 @@
         android:transitionGroup="true">
 
         
  
 
\ No newline at end of file