Compare commits

..

25 Commits

Author SHA1 Message Date
semantic-release-bot
fb87199514 chore: Release v5.41.0-dev.13 [skip ci]
# [5.41.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.12...v5.41.0-dev.13) (2025-09-24)

### Bug Fixes

* **YouTube - Hide Shorts components:** Fix "Hide preview comment" ([#5990](https://github.com/ReVanced/revanced-patches/issues/5990)) ([dd4e2cd](dd4e2cd085))
2025-09-24 19:44:03 +00:00
ILoveOpenSourceApplications
dd4e2cd085 fix(YouTube - Hide Shorts components): Fix "Hide preview comment" (#5990) 2025-09-24 23:41:15 +04:00
semantic-release-bot
fadc66816d chore: Release v5.41.0-dev.12 [skip ci]
# [5.41.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.11...v5.41.0-dev.12) (2025-09-24)

### Bug Fixes

* **YouTube - SponsorBlock:** Show category color in create new segment menu ([#5987](https://github.com/ReVanced/revanced-patches/issues/5987)) ([ffd933c](ffd933c673))
2025-09-24 13:53:25 +00:00
MarcaD
ffd933c673 fix(YouTube - SponsorBlock): Show category color in create new segment menu (#5987) 2025-09-24 17:50:46 +04:00
github-actions[bot]
69883530b7 chore: Sync translations (#5989) 2025-09-24 17:49:49 +04:00
LisoUseInAIKyrios
39971291f3 chore: Fix typo 2025-09-24 15:56:29 +04:00
LisoUseInAIKyrios
51facf9321 chore(YouTube): Adjust UI dialog message 2025-09-24 09:46:37 +04:00
semantic-release-bot
b83d41ca88 chore: Release v5.41.0-dev.11 [skip ci]
# [5.41.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.10...v5.41.0-dev.11) (2025-09-23)

### Features

* **YouTube:** Add `Disable video codecs` patch ([#5981](https://github.com/ReVanced/revanced-patches/issues/5981)) ([bfbffbd](bfbffbd1f5))
2025-09-23 18:10:52 +00:00
LisoUseInAIKyrios
bfbffbd1f5 feat(YouTube): Add Disable video codecs patch (#5981) 2025-09-23 22:06:02 +04:00
semantic-release-bot
ee4755646b chore: Release v5.41.0-dev.10 [skip ci]
# [5.41.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.9...v5.41.0-dev.10) (2025-09-23)

### Bug Fixes

* **TikTok:** Show correct dialog restart text, use correct font color for non-dark mode ([d1a1293](d1a12930c3))
2025-09-23 17:46:05 +00:00
LisoUseInAIKyrios
d1a12930c3 fix(TikTok): Show correct dialog restart text, use correct font color for non-dark mode 2025-09-23 21:43:04 +04:00
semantic-release-bot
dfac836a8c chore: Release v5.41.0-dev.9 [skip ci]
# [5.41.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.8...v5.41.0-dev.9) (2025-09-23)

### Bug Fixes

* **Instagram - Hide navigation buttons:** Remove button based on name ([#5971](https://github.com/ReVanced/revanced-patches/issues/5971)) ([6fa4043](6fa404331b))
2025-09-23 10:28:29 +00:00
brosssh
6fa404331b fix(Instagram - Hide navigation buttons): Remove button based on name (#5971) 2025-09-23 12:25:36 +02:00
semantic-release-bot
8bcb95adcd chore: Release v5.41.0-dev.8 [skip ci]
# [5.41.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.7...v5.41.0-dev.8) (2025-09-23)

### Features

* **YouTube Music:** Add `Check watch history domain name resolution` ([#5979](https://github.com/ReVanced/revanced-patches/issues/5979)) ([8af70fe](8af70fe2d1))
2025-09-23 09:38:14 +00:00
LisoUseInAIKyrios
8af70fe2d1 feat(YouTube Music): Add Check watch history domain name resolution (#5979) 2025-09-23 13:34:00 +04:00
semantic-release-bot
191b9169ff chore: Release v5.41.0-dev.7 [skip ci]
# [5.41.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.6...v5.41.0-dev.7) (2025-09-23)

### Features

* **Tumblr:** Add `Disable Tumblr TV` patch ([#5959](https://github.com/ReVanced/revanced-patches/issues/5959)) ([212418b](212418b8db))
2025-09-23 06:24:06 +00:00
Temm
212418b8db feat(Tumblr): Add Disable Tumblr TV patch (#5959) 2025-09-23 10:19:58 +04:00
github-actions[bot]
7dbc744be0 chore: Sync translations (#5978) 2025-09-23 10:18:20 +04:00
LisoUseInAIKyrios
150a3e7c60 chore(YouTube Music - GmsCore support): Add missing supported versions 2025-09-23 10:17:25 +04:00
semantic-release-bot
5027943470 chore: Release v5.41.0-dev.6 [skip ci]
# [5.41.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.5...v5.41.0-dev.6) (2025-09-22)

### Features

* **YouTube - Spoof app version:** Add spoof target `20.05.46` that fixes transcript functionality ([5823f0e](5823f0e982))
2025-09-22 18:04:18 +00:00
github-actions[bot]
fa9e590b3a chore: Sync translations (#5972) 2025-09-22 22:01:33 +04:00
LisoUseInAIKyrios
5823f0e982 feat(YouTube - Spoof app version): Add spoof target 20.05.46 that fixes transcript functionality 2025-09-22 22:01:14 +04:00
LisoUseInAIKyrios
f506a67e4a chore(YouTube): Drop 19.43.41
Playback speed has a patch error. Don't want to fix. Most users want the latest or the oldest app target, and don't care about anything in-between.
2025-09-22 21:57:42 +04:00
semantic-release-bot
ed6e1155f2 chore: Release v5.41.0-dev.5 [skip ci]
# [5.41.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.4...v5.41.0-dev.5) (2025-09-22)

### Bug Fixes

* **Twitch - Settings:** Fix missing style resources ([#5970](https://github.com/ReVanced/revanced-patches/issues/5970)) ([8c22995](8c229954d7))
2025-09-22 16:05:55 +00:00
MarcaD
8c229954d7 fix(Twitch - Settings): Fix missing style resources (#5970) 2025-09-22 20:02:34 +04:00
174 changed files with 2079 additions and 1265 deletions

View File

@@ -1,3 +1,66 @@
# [5.41.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.12...v5.41.0-dev.13) (2025-09-24)
### Bug Fixes
* **YouTube - Hide Shorts components:** Fix "Hide preview comment" ([#5990](https://github.com/ReVanced/revanced-patches/issues/5990)) ([dd4e2cd](https://github.com/ReVanced/revanced-patches/commit/dd4e2cd0855ccc51b94593004fdd8150ac3b41cc))
# [5.41.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.11...v5.41.0-dev.12) (2025-09-24)
### Bug Fixes
* **YouTube - SponsorBlock:** Show category color in create new segment menu ([#5987](https://github.com/ReVanced/revanced-patches/issues/5987)) ([ffd933c](https://github.com/ReVanced/revanced-patches/commit/ffd933c6734274cdde5aaec0159b67f173f9228c))
# [5.41.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.10...v5.41.0-dev.11) (2025-09-23)
### Features
* **YouTube:** Add `Disable video codecs` patch ([#5981](https://github.com/ReVanced/revanced-patches/issues/5981)) ([bfbffbd](https://github.com/ReVanced/revanced-patches/commit/bfbffbd1f5aa867027053e25b343a51a606216a3))
# [5.41.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.9...v5.41.0-dev.10) (2025-09-23)
### Bug Fixes
* **TikTok:** Show correct dialog restart text, use correct font color for non-dark mode ([d1a1293](https://github.com/ReVanced/revanced-patches/commit/d1a12930c35f630793a0f240d4203c2ff9060158))
# [5.41.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.8...v5.41.0-dev.9) (2025-09-23)
### Bug Fixes
* **Instagram - Hide navigation buttons:** Remove button based on name ([#5971](https://github.com/ReVanced/revanced-patches/issues/5971)) ([6fa4043](https://github.com/ReVanced/revanced-patches/commit/6fa404331b5162682d83fba5f38ed570c31495fc))
# [5.41.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.7...v5.41.0-dev.8) (2025-09-23)
### Features
* **YouTube Music:** Add `Check watch history domain name resolution` ([#5979](https://github.com/ReVanced/revanced-patches/issues/5979)) ([8af70fe](https://github.com/ReVanced/revanced-patches/commit/8af70fe2d10c0f4da2d7e53bd00f5b3979775d5d))
# [5.41.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.6...v5.41.0-dev.7) (2025-09-23)
### Features
* **Tumblr:** Add `Disable Tumblr TV` patch ([#5959](https://github.com/ReVanced/revanced-patches/issues/5959)) ([212418b](https://github.com/ReVanced/revanced-patches/commit/212418b8db9a730ae9efa89ad2bef24952afbadd))
# [5.41.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.5...v5.41.0-dev.6) (2025-09-22)
### Features
* **YouTube - Spoof app version:** Add spoof target `20.05.46` that fixes transcript functionality ([5823f0e](https://github.com/ReVanced/revanced-patches/commit/5823f0e982e87b4a35d30feeca8a7e16edfebc5f))
# [5.41.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.4...v5.41.0-dev.5) (2025-09-22)
### Bug Fixes
* **Twitch - Settings:** Fix missing style resources ([#5970](https://github.com/ReVanced/revanced-patches/issues/5970)) ([8c22995](https://github.com/ReVanced/revanced-patches/commit/8c229954d7f232a7a472ca49f1b5e7cdc475bbcc))
# [5.41.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.3...v5.41.0-dev.4) (2025-09-22)

View File

@@ -0,0 +1,33 @@
package app.revanced.extension.instagram.hide.navigation;
import java.lang.reflect.Field;
import java.util.List;
@SuppressWarnings("unused")
public class HideNavigationButtonsPatch {
/**
* Injection point.
* @param navigationButtonsList the list of navigation buttons, as an (obfuscated) Enum type
* @param buttonNameToRemove the name of the button we want to remove
* @param enumNameField the field in the nav button enum class which contains the name of the button
* @return the patched list of navigation buttons
*/
public static List<Object> removeNavigationButtonByName(
List<Object> navigationButtonsList,
String buttonNameToRemove,
String enumNameField
)
throws IllegalAccessException, NoSuchFieldException {
for (Object button : navigationButtonsList) {
Field f = button.getClass().getDeclaredField(enumNameField);
String currentButtonEnumName = (String) f.get(button);
if (buttonNameToRemove.equals(currentButtonEnumName)) {
navigationButtonsList.remove(button);
break;
}
}
return navigationButtonsList;
}
}

View File

@@ -1,4 +1,4 @@
package app.revanced.extension.youtube.patches;
package app.revanced.extension.shared.patches;
import static app.revanced.extension.shared.StringRef.str;
@@ -13,8 +13,8 @@ import java.net.UnknownHostException;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.ui.CustomDialog;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class CheckWatchHistoryDomainNameResolutionPatch {
@@ -49,7 +49,7 @@ public class CheckWatchHistoryDomainNameResolutionPatch {
* Checks if s.youtube.com is blacklisted and playback history will fail to work.
*/
public static void checkDnsResolver(Activity context) {
if (!Utils.isNetworkConnected() || !Settings.CHECK_WATCH_HISTORY_DOMAIN_NAME.get()) return;
if (!Utils.isNetworkConnected() || !BaseSettings.CHECK_WATCH_HISTORY_DOMAIN_NAME.get()) return;
Utils.runOnBackgroundThread(() -> {
try {
@@ -61,8 +61,8 @@ public class CheckWatchHistoryDomainNameResolutionPatch {
// Prevent this false positive by verify youtube.com resolves.
// If youtube.com does not resolve, then it's not a watch history domain resolving error
// because the entire app will not work since no domains are resolving.
if (domainResolvesToValidIP(HISTORY_TRACKING_ENDPOINT)
|| !domainResolvesToValidIP("youtube.com")) {
if (!domainResolvesToValidIP("youtube.com")
|| domainResolvesToValidIP(HISTORY_TRACKING_ENDPOINT)) {
return;
}
@@ -78,7 +78,7 @@ public class CheckWatchHistoryDomainNameResolutionPatch {
() -> {}, // OK button action (just dismiss).
() -> {}, // Cancel button action (just dismiss).
str("revanced_check_watch_history_domain_name_dialog_ignore"), // Neutral button text.
() -> Settings.CHECK_WATCH_HISTORY_DOMAIN_NAME.save(false), // Neutral button action (Ignore).
() -> BaseSettings.CHECK_WATCH_HISTORY_DOMAIN_NAME.save(false), // Neutral button action (Ignore).
true // Dismiss dialog on Neutral button click.
);

View File

@@ -28,10 +28,16 @@ public class BaseSettings {
public static final BooleanSetting SETTINGS_SEARCH_HISTORY = new BooleanSetting("revanced_settings_search_history", TRUE, true);
public static final StringSetting SETTINGS_SEARCH_ENTRIES = new StringSetting("revanced_settings_search_entries", "");
//
// Settings shared by YouTube and YouTube Music.
//
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
public static final EnumSetting<AppLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AppLanguage.DEFAULT, new AudioStreamLanguageOverrideAvailability());
public static final BooleanSetting SPOOF_STREAMING_DATA_STATS_FOR_NERDS = new BooleanSetting("revanced_spoof_streaming_data_stats_for_nerds", TRUE, parent(SPOOF_VIDEO_STREAMS));
public static final BooleanSetting SANITIZE_SHARED_LINKS = new BooleanSetting("revanced_sanitize_sharing_links", TRUE);
public static final BooleanSetting REPLACE_MUSIC_LINKS_WITH_YOUTUBE = new BooleanSetting("revanced_replace_music_with_youtube", FALSE);
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
}

View File

@@ -53,7 +53,7 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
* Set by subclasses if Strings cannot be added as a resource.
*/
@Nullable
protected static String restartDialogButtonText, restartDialogTitle, confirmDialogTitle, restartDialogMessage;
protected static CharSequence restartDialogTitle, restartDialogMessage, restartDialogButtonText, confirmDialogTitle;
private final SharedPreferences.OnSharedPreferenceChangeListener listener = (sharedPreferences, str) -> {
try {
@@ -125,10 +125,13 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
showingUserDialogMessage = true;
CharSequence message = BulletPointPreference.formatIntoBulletPoints(
Objects.requireNonNull(setting.userDialogMessage).toString());
Pair<Dialog, LinearLayout> dialogPair = CustomDialog.create(
context,
confirmDialogTitle, // Title.
Objects.requireNonNull(setting.userDialogMessage).toString(), // No message.
message,
null, // No EditText.
null, // OK button text.
() -> {
@@ -152,6 +155,7 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
);
dialogPair.first.setOnDismissListener(d -> showingUserDialogMessage = false);
dialogPair.first.setCancelable(false);
// Show the dialog.
dialogPair.first.show();

View File

@@ -15,7 +15,15 @@ import android.util.AttributeSet;
@SuppressWarnings({"unused", "deprecation"})
public class BulletPointPreference extends Preference {
public static SpannedString formatIntoBulletPoints(CharSequence source) {
/**
* Replaces bullet points with styled spans.
*/
public static CharSequence formatIntoBulletPoints(CharSequence source) {
final char bulletPoint = 'â€ĸ';
if (TextUtils.indexOf(source, bulletPoint) < 0) {
return source; // Nothing to do.
}
SpannableStringBuilder builder = new SpannableStringBuilder(source);
int lineStart = 0;
@@ -26,7 +34,7 @@ public class BulletPointPreference extends Preference {
if (lineEnd < 0) lineEnd = length;
// Apply BulletSpan only if the line starts with the 'â€ĸ' character.
if (lineEnd > lineStart && builder.charAt(lineStart) == 'â€ĸ') {
if (lineEnd > lineStart && builder.charAt(lineStart) == bulletPoint) {
int deleteEnd = lineStart + 1; // remove the bullet itself
// If there's a single space right after the bullet, remove that too.

View File

@@ -5,12 +5,15 @@ import static app.revanced.extension.shared.Utils.getResourceIdentifierOrThrow;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
@@ -23,6 +26,7 @@ import android.widget.SearchView;
import android.widget.Toolbar;
import androidx.annotation.ColorInt;
import androidx.annotation.RequiresApi;
import java.util.ArrayList;
import java.util.Collections;
@@ -118,6 +122,14 @@ public abstract class BaseSearchViewController {
searchView.setBackground(createBackgroundDrawable());
searchView.setQueryHint(str("revanced_settings_search_hint"));
// Set text size.
searchEditText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
// Set cursor color.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
setCursorColor(searchEditText);
}
// Configure RTL support based on app language.
AppLanguage appLanguage = BaseSettings.REVANCED_LANGUAGE.get();
if (Utils.isRightToLeftLocale(appLanguage.getLocale())) {
@@ -126,6 +138,24 @@ public abstract class BaseSearchViewController {
}
}
/**
* Sets the cursor color (for Android 10+ devices).
*/
@RequiresApi(api = Build.VERSION_CODES.Q)
private void setCursorColor(EditText editText) {
// Get the cursor color based on the current theme.
final int cursorColor = Utils.isDarkModeEnabled() ? Color.WHITE : Color.BLACK;
// Create cursor drawable.
GradientDrawable cursorDrawable = new GradientDrawable();
cursorDrawable.setShape(GradientDrawable.RECTANGLE);
cursorDrawable.setSize(Utils.dipToPixels(2), -1); // Width: 2dp, Height: match text height.
cursorDrawable.setColor(cursorColor);
// Set cursor drawable.
editText.setTextCursorDrawable(cursorDrawable);
}
/**
* Initializes the overlay container for displaying search results and history.
*/

View File

@@ -42,11 +42,8 @@ final class PlayerRoutes {
JSONObject context = new JSONObject();
AppLanguage language = SpoofVideoStreamsPatch.getLanguageOverride();
if (language == null || clientType == ANDROID_VR_1_43_32) {
if (language == null) {
// Force original audio has not overrode the language.
// Or if YT has fallen over to the last unauthenticated client (VR 1.43), then
// always use the app language because forcing an audio stream of specific languages
// can sometimes fail so it's better to try and load something rather than nothing.
language = BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get();
}
//noinspection ExtractMethodRecommender

View File

@@ -58,10 +58,10 @@ public class CustomDialog {
* @param dismissDialogOnNeutralClick If the dialog should be dismissed when the Neutral button is clicked.
* @return The Dialog and its main LinearLayout container.
*/
public static Pair<Dialog, LinearLayout> create(Context context, String title, CharSequence message,
@Nullable EditText editText, String okButtonText,
public static Pair<Dialog, LinearLayout> create(Context context, CharSequence title, CharSequence message,
@Nullable EditText editText, CharSequence okButtonText,
Runnable onOkClick, Runnable onCancelClick,
@Nullable String neutralButtonText,
@Nullable CharSequence neutralButtonText,
@Nullable Runnable onNeutralClick,
boolean dismissDialogOnNeutralClick) {
Logger.printDebug(() -> "Creating custom dialog with title: " + title);
@@ -85,9 +85,9 @@ public class CustomDialog {
* @param onNeutralClick Action to perform when the Neutral button is clicked, or null if no Neutral button is needed.
* @param dismissDialogOnNeutralClick If the dialog should be dismissed when the Neutral button is clicked.
*/
private CustomDialog(Context context, String title, CharSequence message, @Nullable EditText editText,
String okButtonText, Runnable onOkClick, Runnable onCancelClick,
@Nullable String neutralButtonText, @Nullable Runnable onNeutralClick,
private CustomDialog(Context context, CharSequence title, CharSequence message, @Nullable EditText editText,
CharSequence okButtonText, Runnable onOkClick, Runnable onCancelClick,
@Nullable CharSequence neutralButtonText, @Nullable Runnable onNeutralClick,
boolean dismissDialogOnNeutralClick) {
this.context = context;
this.dialog = new Dialog(context);
@@ -139,7 +139,7 @@ public class CustomDialog {
*
* @param title The title text to display.
*/
private void addTitle(String title) {
private void addTitle(CharSequence title) {
if (TextUtils.isEmpty(title)) return;
TextView titleView = new TextView(context);
@@ -232,8 +232,8 @@ public class CustomDialog {
* @param onNeutralClick Action for the Neutral button click, or null if no Neutral button.
* @param dismissDialogOnNeutralClick If the dialog should dismiss on Neutral button click.
*/
private void addButtons(String okButtonText, Runnable onOkClick, Runnable onCancelClick,
@Nullable String neutralButtonText, @Nullable Runnable onNeutralClick,
private void addButtons(CharSequence okButtonText, Runnable onOkClick, Runnable onCancelClick,
@Nullable CharSequence neutralButtonText, @Nullable Runnable onNeutralClick,
boolean dismissDialogOnNeutralClick) {
// Button container.
LinearLayout buttonContainer = new LinearLayout(context);
@@ -280,7 +280,7 @@ public class CustomDialog {
* @param dismissDialog If the dialog should dismiss when the button is clicked.
* @return The created Button.
*/
private Button createButton(String text, Runnable onClick, boolean isOkButton, boolean dismissDialog) {
private Button createButton(CharSequence text, Runnable onClick, boolean isOkButton, boolean dismissDialog) {
Button button = new Button(context, null, 0);
button.setText(text);
button.setTextSize(14);

View File

@@ -2,12 +2,15 @@ package app.revanced.extension.tiktok.settings.preference;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import androidx.annotation.NonNull;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.settings.preference.AbstractPreferenceFragment;
import app.revanced.extension.tiktok.settings.preference.categories.DownloadsPreferenceCategory;
import app.revanced.extension.tiktok.settings.preference.categories.FeedFilterPreferenceCategory;
import app.revanced.extension.tiktok.settings.preference.categories.ExtensionPreferenceCategory;
import app.revanced.extension.tiktok.settings.preference.categories.FeedFilterPreferenceCategory;
import app.revanced.extension.tiktok.settings.preference.categories.SimSpoofPreferenceCategory;
/**
@@ -37,10 +40,14 @@ public class TikTokPreferenceFragment extends AbstractPreferenceFragment {
// Currently no resources can be compiled for TikTok (fails with aapt error).
// So all TikTok Strings are hard coded in the extension.
restartDialogTitle = "Refresh and restart";
restartDialogTitle = "Restart required";
restartDialogMessage = "Restart the app for this change to take effect.";
restartDialogButtonText = "Restart";
confirmDialogTitle = "Do you wish to proceed?";
// App does not use dark mode.
Utils.setIsDarkModeEnabled(false);
PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(context);
setPreferenceScreen(preferenceScreen);

View File

@@ -5,7 +5,7 @@ import android.view.Display;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class DisableHdrPatch {
public class DisableVideoCodecsPatch {
/**
* Injection point.
@@ -15,5 +15,12 @@ public class DisableHdrPatch {
? new int[0]
: capabilities.getSupportedHdrTypes();
}
/**
* Injection point.
*/
public static boolean allowVP9() {
return !Settings.FORCE_AVC_CODEC.get();
}
}

View File

@@ -15,7 +15,8 @@ public class ForceOriginalAudioPatch {
*/
public static void setPreferredLanguage() {
if (Settings.FORCE_ORIGINAL_AUDIO.get()
&& SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams()) {
&& SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams()
&& !Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get().useAuth) {
// If client spoofing does not use authentication and lacks multi-audio streams,
// then can use any language code for the request and if that requested language is
// not available YT uses the original audio language. Authenticated requests ignore

View File

@@ -154,6 +154,13 @@ public final class ShortsFilter extends Filter {
"reel_dislike_button.eml"
);
StringFilterGroup previewComment = new StringFilterGroup(
Settings.HIDE_SHORTS_PREVIEW_COMMENT,
// Preview comment that can popup while a Short is playing.
// Uses no bundled icons, and instead the users profile photo is shown.
"participation_bar.eml"
);
joinButton = new StringFilterGroup(
Settings.HIDE_SHORTS_JOIN_BUTTON,
"sponsor_button"
@@ -213,7 +220,7 @@ public final class ShortsFilter extends Filter {
addPathCallbacks(
shortsCompactFeedVideo, joinButton, subscribeButton, paidPromotionButton,
shortsActionBar, suggestedAction, pausedOverlayButtons, channelBar,
shortsActionBar, suggestedAction, pausedOverlayButtons, channelBar, previewComment,
fullVideoLinkLabel, videoTitle, useSoundButton, reelSoundMetadata, soundButton, infoPanel,
stickers, likeFountain, likeButton, dislikeButton
);
@@ -243,12 +250,6 @@ public final class ShortsFilter extends Filter {
// Suggested actions.
//
suggestedActionsBuffer.addAll(
new ByteArrayFilterGroup(
Settings.HIDE_SHORTS_PREVIEW_COMMENT,
// Preview comment that can popup while a Short is playing.
// Uses no bundled icons, and instead the users profile photo is shown.
"shorts-comments-panel"
),
new ByteArrayFilterGroup(
Settings.HIDE_SHORTS_SHOP_BUTTON,
"yt_outline_bag_"

View File

@@ -18,7 +18,22 @@ public class SpoofVideoStreamsPatch {
* Injection point.
*/
public static void setClientOrderToUse() {
List<ClientType> availableClients = List.of(
final boolean forceAVC = Settings.FORCE_AVC_CODEC.get();
// VR 1.61 uses VP9/AV1, and cannot force AVC.
ClientType client = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
if (forceAVC && client == ANDROID_VR_1_61_48) {
client = ANDROID_VR_1_43_32; // Use VR 1.43 instead.
}
List<ClientType> availableClients = forceAVC
? List.of(
ANDROID_VR_1_43_32,
VISIONOS,
ANDROID_CREATOR,
ANDROID_VR_1_61_48,
IPADOS)
: List.of(
ANDROID_VR_1_61_48,
VISIONOS,
ANDROID_CREATOR,
@@ -27,6 +42,6 @@ public class SpoofVideoStreamsPatch {
);
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(
availableClients, Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get());
availableClients, client);
}
}

View File

@@ -48,6 +48,9 @@ import app.revanced.extension.youtube.swipecontrols.SwipeControlsConfigurationPr
public class Settings extends BaseSettings {
// Video
public static final BooleanSetting ADVANCED_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_advanced_video_quality_menu", TRUE);
public static final BooleanSetting DISABLE_HDR_VIDEO = new BooleanSetting("revanced_disable_hdr_video", FALSE);
public static final BooleanSetting FORCE_AVC_CODEC = new BooleanSetting("revanced_force_avc_codec", FALSE, true, "revanced_force_avc_codec_user_dialog_message");
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);
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_LAST_SELECTED = new BooleanSetting("revanced_remember_video_quality_last_selected", FALSE);
@@ -56,8 +59,6 @@ public class Settings extends BaseSettings {
public static final BooleanSetting REMEMBER_SHORTS_QUALITY_LAST_SELECTED = new BooleanSetting("revanced_remember_shorts_quality_last_selected", FALSE);
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_LAST_SELECTED_TOAST = new BooleanSetting("revanced_remember_video_quality_last_selected_toast", TRUE, false,
parentsAny(REMEMBER_VIDEO_QUALITY_LAST_SELECTED, REMEMBER_SHORTS_QUALITY_LAST_SELECTED));
public static final BooleanSetting ADVANCED_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_advanced_video_quality_menu", TRUE);
public static final BooleanSetting DISABLE_HDR_VIDEO = new BooleanSetting("revanced_disable_hdr_video", FALSE);
// Speed
public static final FloatSetting SPEED_TAP_AND_HOLD = new FloatSetting("revanced_speed_tap_and_hold", 2.0f, true);
@@ -344,7 +345,6 @@ public class Settings extends BaseSettings {
public static final BooleanSetting LOOP_VIDEO = new BooleanSetting("revanced_loop_video", FALSE);
public static final BooleanSetting LOOP_VIDEO_BUTTON = new BooleanSetting("revanced_loop_video_button", FALSE);
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
public static final BooleanSetting DISABLE_HAPTIC_FEEDBACK_CHAPTERS = new BooleanSetting("revanced_disable_haptic_feedback_chapters", FALSE);
public static final BooleanSetting DISABLE_HAPTIC_FEEDBACK_PRECISE_SEEKING = new BooleanSetting("revanced_disable_haptic_feedback_precise_seeking", FALSE);
public static final BooleanSetting DISABLE_HAPTIC_FEEDBACK_SEEK_UNDO = new BooleanSetting("revanced_disable_haptic_feedback_seek_undo", FALSE);

View File

@@ -96,7 +96,7 @@ public class SponsorBlockUtils {
SegmentCategory[] categories = SegmentCategory.categoriesWithoutHighlights();
CharSequence[] titles = new CharSequence[categories.length];
for (int i = 0, length = categories.length; i < length; i++) {
titles[i] = categories[i].getTitle().toString();
titles[i] = categories[i].getTitleWithColorDot();
}
newUserCreatedSegmentCategory = null;
@@ -336,8 +336,8 @@ public class SponsorBlockUtils {
Utils.verifyOnMainThread();
final SegmentCategory[] values = SegmentCategory.categoriesWithoutHighlights();
CharSequence[] titles = new CharSequence[values.length];
for (int i = 0, length = values.length; i < length; i++) {
titles[i] = values[i].getTitle().toString();
for (int i = 0; i < values.length; i++) {
titles[i] = values[i].getTitleWithColorDot();
}
new AlertDialog.Builder(context)

View File

@@ -5,8 +5,12 @@ import static app.revanced.extension.youtube.settings.Settings.*;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -83,6 +87,8 @@ public enum SegmentCategory {
MUSIC_OFFTOPIC,
};
public static final String COLOR_DOT_STRING = "âŦ¤";
public static final float CATEGORY_DEFAULT_OPACITY = 0.7f;
private static final Map<String, SegmentCategory> mValuesMap = new HashMap<>(2 * categoriesWithoutUnsubmitted.length);
@@ -324,6 +330,32 @@ public enum SegmentCategory {
return title;
}
/**
* Creates a {@link SpannableString} that starts with a colored dot followed by the provided text.
*/
private static SpannableString getCategoryColorDotSpan(String text, @ColorInt int color) {
SpannableString dotSpan = new SpannableString(COLOR_DOT_STRING + text);
dotSpan.setSpan(new ForegroundColorSpan(color), 0, 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
dotSpan.setSpan(new RelativeSizeSpan(1.5f), 0, 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return dotSpan;
}
/**
* Returns the category title with a colored dot.
*/
public SpannableString getTitleWithColorDot(@ColorInt int categoryColor) {
return getCategoryColorDotSpan(" " + title, categoryColor);
}
/**
* Returns the category title with a colored dot.
*/
public SpannableString getTitleWithColorDot() {
return getTitleWithColorDot(color);
}
/**
* Gets the skip button text based on segment position.
*

View File

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

View File

@@ -405,6 +405,10 @@ public final class app/revanced/patches/music/misc/debugging/EnableDebuggingPatc
public static final fun getEnableDebuggingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/misc/dns/CheckWatchHistoryDomainNameResolutionPatchKt {
public static final fun getCheckWatchHistoryDomainNameResolutionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/misc/extension/SharedExtensionPatchKt {
public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -1169,6 +1173,10 @@ public final class app/revanced/patches/tumblr/annoyances/popups/DisableGiftMess
public static final fun getDisableGiftMessagePopupPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/tumblr/annoyances/tv/DisableTumblrTvPatchKt {
public static final fun getDisableTumblrTvPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/tumblr/featureflags/OverrideFeatureFlagsPatchKt {
public static final fun getOverrideFeatureFlagsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -1719,6 +1727,10 @@ public final class app/revanced/patches/youtube/video/audio/ForceOriginalAudioPa
public static final fun getForceOriginalAudioPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/video/codecs/DisableVideoCodecsPatchKt {
public static final fun getDisableVideoCodecsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/video/hdr/DisableHdrPatchKt {
public static final fun getDisableHdrPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}

View File

@@ -2,28 +2,22 @@
package app.revanced.patches.instagram.hide.navigation
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
import app.revanced.patcher.patch.BytecodePatchContext
internal val tabCreateButtonsLoopStartFingerprint = fingerprint {
returns("V")
strings("InstagramMainActivity.createTabButtons")
opcodes(
//Loop Start
Opcode.IF_GE, // Check if index is finished (index, size)
//Injection
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT
)
internal val initializeNavigationButtonsListFingerprint = fingerprint {
strings("Nav3")
parameters("Lcom/instagram/common/session/UserSession;", "Z")
returns("Ljava/util/List;")
}
internal val tabCreateButtonsLoopEndFingerprint = fingerprint {
returns("V")
strings("InstagramMainActivity.createTabButtons")
opcodes(
Opcode.IPUT_OBJECT,
// Injection Jump
Opcode.ADD_INT_LIT8, //Increase Index
Opcode.GOTO // Jump to loopStart
// LoopEnd
)
private val navigationButtonsEnumClassDef = fingerprint {
strings("FEED", "fragment_feed", "SEARCH", "fragment_search")
}
context(BytecodePatchContext)
internal val navigationButtonsEnumInitFingerprint get() = fingerprint {
custom { method, classDef ->
method.name == "<init>"
&& classDef == navigationButtonsEnumClassDef.classDef
}
}

View File

@@ -1,21 +1,28 @@
package app.revanced.patches.instagram.hide.navigation
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.booleanOption
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.util.addInstructionsAtControlFlowLabel
import app.revanced.util.findFreeRegister
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import java.util.logging.Logger
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/instagram/hide/navigation/HideNavigationButtonsPatch;"
@Suppress("unused")
val hideNavigationButtonsPatch = bytecodePatch(
name = "Hide navigation buttons",
description = "Hides navigation bar buttons, such as the Reels and Create button.",
use = false
) {
compatibleWith("com.instagram.android"("397.1.0.52.81"))
compatibleWith("com.instagram.android")
val hideReels by booleanOption(
key = "hideReels",
@@ -38,43 +45,44 @@ val hideNavigationButtonsPatch = bytecodePatch(
)
}
tabCreateButtonsLoopStartFingerprint.method.apply {
// Check the current loop index, and skip over adding the
// navigation button view if the index matches a given button.
val enumNameField: String
val startIndex = tabCreateButtonsLoopStartFingerprint.patternMatch!!.startIndex
val endIndex = tabCreateButtonsLoopEndFingerprint.patternMatch!!.endIndex
val insertIndex = startIndex + 1
val loopIndexRegister = getInstruction<TwoRegisterInstruction>(startIndex).registerA
val freeRegister = findFreeRegister(insertIndex, loopIndexRegister)
val instruction = getInstruction(endIndex - 1)
val instructions = buildString {
if (hideCreate!!) {
appendLine(
"""
const v$freeRegister, 0x2
if-eq v$freeRegister, v$loopIndexRegister, :skipAddView
"""
)
}
if (hideReels!!) {
appendLine(
"""
const v$freeRegister, 0x3
if-eq v$freeRegister, v$loopIndexRegister, :skipAddView
"""
)
}
}
addInstructionsWithLabels(
insertIndex,
instructions,
ExternalLabel("skipAddView", instruction)
)
// Get the field name which contains the name of the enum for the navigation button ("fragment_clips", "fragment_share", ...)
with(navigationButtonsEnumInitFingerprint.method) {
enumNameField = indexOfFirstInstructionOrThrow {
opcode == Opcode.IPUT_OBJECT &&
(this as TwoRegisterInstruction).registerA == 2 // The p2 register
}.let {
getInstruction(it).getReference<FieldReference>()!!.name
}
}
}
initializeNavigationButtonsListFingerprint.method.apply {
val returnIndex = indexOfFirstInstructionOrThrow(Opcode.RETURN_OBJECT)
val buttonsListRegister = getInstruction<OneRegisterInstruction>(returnIndex).registerA
val freeRegister = findFreeRegister(returnIndex)
val freeRegister2 = findFreeRegister(returnIndex, freeRegister)
fun instructionsRemoveButtonByName(buttonEnumName: String): String {
return """
const-string v$freeRegister, "$buttonEnumName"
const-string v$freeRegister2, "$enumNameField"
invoke-static { v$buttonsListRegister, v$freeRegister, v$freeRegister2 }, $EXTENSION_CLASS_DESCRIPTOR->removeNavigationButtonByName(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
move-result-object v$buttonsListRegister
"""
}
if (hideReels!!)
addInstructionsAtControlFlowLabel(
returnIndex,
instructionsRemoveButtonByName("fragment_clips")
)
if (hideCreate!!)
addInstructionsAtControlFlowLabel(
returnIndex,
instructionsRemoveButtonByName("fragment_share")
)
}
}
}

View File

@@ -0,0 +1,22 @@
package app.revanced.patches.music.misc.dns
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.shared.mainActivityOnCreateFingerprint
import app.revanced.patches.shared.misc.dns.checkWatchHistoryDomainNameResolutionPatch
val checkWatchHistoryDomainNameResolutionPatch = checkWatchHistoryDomainNameResolutionPatch(
block = {
dependsOn(
sharedExtensionPatch
)
compatibleWith(
"com.google.android.apps.youtube.music"(
"7.29.52",
"8.10.52"
)
)
},
mainActivityFingerprint = mainActivityOnCreateFingerprint
)

View File

@@ -1,9 +1,10 @@
package app.revanced.patches.music.misc.extension
import app.revanced.patches.music.misc.extension.hooks.applicationInitHook
import app.revanced.patches.music.misc.extension.hooks.applicationInitOnCreateHook
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
val sharedExtensionPatch = sharedExtensionPatch(
"music",
applicationInitHook,
applicationInitHook, applicationInitOnCreateHook
)

View File

@@ -1,5 +1,6 @@
package app.revanced.patches.music.misc.extension.hooks
import app.revanced.patches.music.shared.YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE
import app.revanced.patches.shared.misc.extension.extensionHook
internal val applicationInitHook = extensionHook {
@@ -8,3 +9,11 @@ internal val applicationInitHook = extensionHook {
strings("activity")
custom { method, _ -> method.name == "onCreate" }
}
internal val applicationInitOnCreateHook = extensionHook {
returns("V")
parameters("Landroid/os/Bundle;")
custom { method, classDef ->
method.name == "onCreate" && classDef.type == YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE
}
}

View File

@@ -28,7 +28,12 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch(
) {
dependsOn(spoofVideoStreamsPatch)
compatibleWith(MUSIC_PACKAGE_NAME)
compatibleWith(
MUSIC_PACKAGE_NAME(
"7.29.52",
"8.10.52"
)
)
}
private fun gmsCoreSupportResourcePatch(

View File

@@ -42,6 +42,8 @@ private val settingsResourcePatch = resourcePatch {
execute {
// Set the style for the ReVanced settings to follow the style of the music settings,
// namely: action bar height, menu item padding and remove horizontal dividers.
val targetResource = "values/styles.xml"
inputStreamFromBundledResource(
"settings/music",
@@ -53,7 +55,7 @@ private val settingsResourcePatch = resourcePatch {
).close()
}
// Remove horizontal divider from the settings Preferences.
// Remove horizontal dividers from the music settings.
val styleFile = get("res/values/styles.xml")
styleFile.writeText(
styleFile.readText()

View File

@@ -0,0 +1,13 @@
package app.revanced.patches.music.shared
import app.revanced.patcher.fingerprint
internal const val YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE = "Lcom/google/android/apps/youtube/music/activities/MusicActivity;"
internal val mainActivityOnCreateFingerprint = fingerprint {
returns("V")
parameters("Landroid/os/Bundle;")
custom { method, classDef ->
method.name == "onCreate" && classDef.type == YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE
}
}

View File

@@ -0,0 +1,36 @@
package app.revanced.patches.shared.misc.dns
import app.revanced.patcher.Fingerprint
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.patch.BytecodePatchBuilder
import app.revanced.patcher.patch.BytecodePatchContext
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/shared/patches/CheckWatchHistoryDomainNameResolutionPatch;"
/**
* Patch shared with YouTube and YT Music.
*/
internal fun checkWatchHistoryDomainNameResolutionPatch(
block: BytecodePatchBuilder.() -> Unit = {},
executeBlock: BytecodePatchContext.() -> Unit = {},
mainActivityFingerprint: Fingerprint
) = bytecodePatch(
name = "Check watch history domain name resolution",
description = "Checks if the device DNS server is preventing user watch history from being saved.",
) {
block()
execute {
executeBlock()
addResources("shared", "misc.dns.checkWatchHistoryDomainNameResolutionPatch")
mainActivityFingerprint.method.addInstruction(
0,
"invoke-static/range { p0 .. p0 }, $EXTENSION_CLASS_DESCRIPTOR->checkDnsResolver(Landroid/app/Activity;)V",
)
}
}

View File

@@ -18,7 +18,9 @@ import app.revanced.util.returnEarly
import org.w3c.dom.Node
// TODO: Delete this on next major version bump.
@Deprecated("Use non deprecated settings patch function")
@Deprecated("Use non deprecated settings patch function",
ReplaceWith("settingsPatch(listOf(rootPreference), preferences)")
)
fun settingsPatch (
rootPreference: Pair<IntentPreference, String>,
preferences: Set<BasePreference>,
@@ -69,8 +71,8 @@ fun settingsPatch (
ResourceGroup("drawable",
// CustomListPreference resources.
"revanced_ic_dialog_alert.xml",
// Search resources.
"revanced_settings_arrow_time.xml",
"revanced_settings_cursor.xml",
"revanced_settings_custom_checkmark.xml",
"revanced_settings_search_icon.xml",
"revanced_settings_search_remove.xml",

View File

@@ -0,0 +1,19 @@
package app.revanced.patches.tumblr.annoyances.tv
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.tumblr.featureflags.addFeatureFlagOverride
import app.revanced.patches.tumblr.featureflags.overrideFeatureFlagsPatch
@Suppress("unused")
val disableTumblrTvPatch = bytecodePatch(
name = "Disable Tumblr TV",
description = "Removes the Tumblr TV navigation button from the bottom navigation bar.",
) {
dependsOn(overrideFeatureFlagsPatch)
compatibleWith("com.tumblr")
execute {
addFeatureFlagOverride("tumblrTvMobileNav", "false")
}
}

View File

@@ -77,7 +77,6 @@ val hideAdsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -26,7 +26,6 @@ val hideGetPremiumPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -24,7 +24,6 @@ val videoAdsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -54,7 +54,6 @@ val copyVideoUrlPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -25,7 +25,6 @@ val removeViewerDiscretionDialogPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -75,7 +75,6 @@ val downloadsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -21,7 +21,6 @@ val seekbarPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -89,7 +89,6 @@ val swipeControlsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -25,7 +25,6 @@ val autoCaptionsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -44,7 +44,6 @@ val customBrandingPatch = resourcePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -94,7 +94,6 @@ val changeHeaderPatch = resourcePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -23,7 +23,6 @@ val hideButtonsPatch = resourcePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -41,7 +41,6 @@ val navigationButtonsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -59,7 +59,6 @@ val hidePlayerOverlayButtonsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -34,7 +34,6 @@ val changeFormFactorPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -60,7 +60,6 @@ val hideEndscreenCardsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -32,7 +32,6 @@ val hideEndScreenSuggestedVideoPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -30,7 +30,6 @@ val disableFullscreenAmbientModePatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -127,7 +127,6 @@ val hideLayoutComponentsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -58,7 +58,6 @@ val hideInfoCardsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -25,7 +25,6 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -49,7 +49,6 @@ val hideRelatedVideoOverlayPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -30,7 +30,6 @@ val disableRollingNumberAnimationPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -173,7 +173,6 @@ val hideShortsComponentsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -32,7 +32,6 @@ val disableSignInToTvPopupPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -22,7 +22,6 @@ val hideTimestampPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -154,7 +154,6 @@ val miniplayerPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -22,7 +22,6 @@ val playerPopupPanelsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -22,7 +22,6 @@ internal val exitFullscreenPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -53,7 +53,6 @@ val customPlayerOverlayOpacityPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -62,7 +62,6 @@ val returnYouTubeDislikePatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -67,7 +67,6 @@ val wideSearchbarPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -45,7 +45,6 @@ val shortsAutoplayPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -65,7 +65,6 @@ val openShortsInRegularPlayerPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -127,7 +127,6 @@ val sponsorBlockPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -60,7 +60,6 @@ val spoofAppVersionPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -33,7 +33,6 @@ val changeStartPagePatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -35,7 +35,6 @@ val disableResumingShortsOnStartupPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -205,7 +205,6 @@ val themePatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -34,7 +34,6 @@ val alternativeThumbnailsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -28,7 +28,6 @@ val bypassImageRegionRestrictionsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -24,7 +24,6 @@ val announcementsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -52,7 +52,6 @@ val backgroundPlaybackPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -18,7 +18,6 @@ val enableDebuggingPatch = enableDebuggingPatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -25,7 +25,6 @@ val spoofDeviceDimensionsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -1,40 +1,23 @@
package app.revanced.patches.youtube.misc.dns
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.misc.dns.checkWatchHistoryDomainNameResolutionPatch
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/CheckWatchHistoryDomainNameResolutionPatch;"
val checkWatchHistoryDomainNameResolutionPatch = bytecodePatch(
name = "Check watch history domain name resolution",
description = "Checks if the device DNS server is preventing user watch history from being saved.",
) {
dependsOn(
sharedExtensionPatch,
addResourcesPatch
)
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",
val checkWatchHistoryDomainNameResolutionPatch = checkWatchHistoryDomainNameResolutionPatch(
block = {
dependsOn(
sharedExtensionPatch
)
)
execute {
addResources("youtube", "misc.dns.checkWatchHistoryDomainNameResolutionPatch")
mainActivityOnCreateFingerprint.method.addInstruction(
0,
"invoke-static/range { p0 .. p0 }, $EXTENSION_CLASS_DESCRIPTOR->checkDnsResolver(Landroid/app/Activity;)V",
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"20.07.39",
"20.13.41",
"20.14.43",
)
)
}
}
},
mainActivityFingerprint = mainActivityOnCreateFingerprint
)

View File

@@ -36,7 +36,6 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch(
compatibleWith(
YOUTUBE_PACKAGE_NAME(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -27,7 +27,6 @@ val disableHapticFeedbackPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -33,7 +33,6 @@ val bypassURLRedirectsPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -42,7 +42,6 @@ val openLinksExternallyPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -28,7 +28,6 @@ val loopVideoPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -15,7 +15,6 @@ val sanitizeSharingLinksPatch = sanitizeSharingLinksPatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -95,20 +95,6 @@ private val settingsResourcePatch = resourcePatch {
)
)
// Copy style properties used to fix over-sized copy menu that appear in EditTextPreference.
// For a full explanation of how this fixes the issue, see the comments in this style file
// and the comments in the extension code.
val targetResource = "values/styles.xml"
inputStreamFromBundledResource(
"settings/youtube",
targetResource,
)!!.let { inputStream ->
"resources".copyXmlNode(
document(inputStream),
document("res/$targetResource"),
).close()
}
// Remove horizontal divider from the settings Preferences
// To better match the appearance of the stock YouTube settings.
document("res/values/styles.xml").use { document ->

View File

@@ -23,7 +23,6 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -45,7 +45,6 @@ val forceOriginalAudioPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -0,0 +1,87 @@
package app.revanced.patches.youtube.video.codecs
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.getReference
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/DisableVideoCodecsPatch;"
@Suppress("unused")
val disableVideoCodecsPatch = bytecodePatch(
name = "Disable video codecs",
description = "Adds options to disable HDR and VP9 codecs.",
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
/**
* Override all calls of `getSupportedHdrTypes`.
*/
transformInstructionsPatch(
filterMap = filterMap@{ classDef, _, instruction, instructionIndex ->
if (classDef.type.startsWith("Lapp/revanced/")) {
return@filterMap null
}
val reference = instruction.getReference<MethodReference>()
if (reference?.definingClass =="Landroid/view/Display\$HdrCapabilities;"
&& reference.name == "getSupportedHdrTypes") {
return@filterMap instruction to instructionIndex
}
return@filterMap null
},
transform = { method, entry ->
val (instruction, index) = entry
val register = (instruction as FiveRegisterInstruction).registerC
method.replaceInstruction(
index,
"invoke-static/range { v$register .. v$register }, $EXTENSION_CLASS_DESCRIPTOR->" +
"disableHdrVideo(Landroid/view/Display\$HdrCapabilities;)[I",
)
}
)
)
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"20.07.39",
"20.13.41",
"20.14.43",
)
)
execute {
addResources("youtube", "video.codecs.disableVideoCodecsPatch")
PreferenceScreen.VIDEO.addPreferences(
SwitchPreference("revanced_disable_hdr_video"),
SwitchPreference("revanced_force_avc_codec")
)
vp9CapabilityFingerprint.method.addInstructionsWithLabels(
0,
"""
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->allowVP9()Z
move-result v0
if-nez v0, :default
return v0
:default
nop
"""
)
}
}

View File

@@ -0,0 +1,13 @@
package app.revanced.patches.youtube.video.codecs
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val vp9CapabilityFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
strings(
"vp9_supported",
"video/x-vnd.on2.vp9"
)
}

View File

@@ -1,72 +1,10 @@
package app.revanced.patches.youtube.video.hdr
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.getReference
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/DisableHdrPatch;"
import app.revanced.patches.youtube.video.codecs.disableVideoCodecsPatch
@Deprecated("Patch was renamed", ReplaceWith("disableVideoCodecsPatch"))
@Suppress("unused")
val disableHdrPatch = bytecodePatch(
name = "Disable HDR video",
description = "Adds an option to disable video HDR.",
) {
dependsOn(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
// Override all calls of `getSupportedHdrTypes`.
transformInstructionsPatch(
filterMap = filterMap@{ classDef, _, instruction, instructionIndex ->
if (classDef.type.startsWith("Lapp/revanced/")) {
return@filterMap null
}
val reference = instruction.getReference<MethodReference>()
if (reference?.definingClass =="Landroid/view/Display\$HdrCapabilities;"
&& reference.name == "getSupportedHdrTypes") {
return@filterMap instruction to instructionIndex
}
return@filterMap null
},
transform = { method, entry ->
val (instruction, index) = entry
val register = (instruction as FiveRegisterInstruction).registerC
method.replaceInstruction(
index,
"invoke-static/range { v$register .. v$register }, $EXTENSION_CLASS_DESCRIPTOR->" +
"disableHdrVideo(Landroid/view/Display\$HdrCapabilities;)[I",
)
}
)
)
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",
)
)
execute {
addResources("youtube", "video.hdr.disableHdrPatch")
PreferenceScreen.VIDEO.addPreferences(
SwitchPreference("revanced_disable_hdr_video")
)
}
}
val disableHdrPatch = bytecodePatch{
dependsOn(disableVideoCodecsPatch)
}

View File

@@ -26,7 +26,6 @@ internal val videoQualityItemOnClickFingerprint = fingerprint {
}
}
internal val videoQualityMenuOptionsFingerprint = fingerprint {
accessFlags(AccessFlags.STATIC)
returns("[L")

View File

@@ -14,18 +14,18 @@ internal val settingsMenuVideoQualityGroup = mutableSetOf<BasePreference>()
@Suppress("unused")
val videoQualityPatch = bytecodePatch(
name = "Video quality",
description = "Adds options to use the advanced video quality menu and set default video qualities."
description = "Adds options to use the advanced video quality menu, set default video qualities, " +
"and disable video codecs such as VP9/HDR."
) {
dependsOn(
rememberVideoQualityPatch,
advancedVideoQualityMenuPatch,
videoQualityDialogButtonPatch,
videoQualityDialogButtonPatch
)
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -29,7 +29,6 @@ val playbackSpeedPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"20.07.39",
"20.13.41",
"20.14.43",

View File

@@ -22,6 +22,8 @@ Second \"item\" text"</string>
<app id="shared">
<patch id="misc.checks.checkEnvironmentPatch">
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
</patch>
<patch id="misc.settings.settingsResourcePatch">
<!-- Settings about dialog. -->
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
@@ -209,8 +211,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.announcements.announcementsPatch">
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
</patch>
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
@@ -239,7 +239,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
</patch>

View File

@@ -22,6 +22,8 @@ Second \"item\" text"</string>
<app id="shared">
<patch id="misc.checks.checkEnvironmentPatch">
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
</patch>
<patch id="misc.settings.settingsResourcePatch">
<!-- Settings about dialog. -->
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
@@ -209,8 +211,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.announcements.announcementsPatch">
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
</patch>
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
@@ -239,7 +239,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
</patch>

View File

@@ -31,6 +31,11 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_days">ØĒŲ… Ø§Ų„ØĒØšØ¯ŲŠŲ„ Ų…Ų†Ø° %s ŲŠŲˆŲ…</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">ØĒØ§ØąŲŠØŽ Ø¨Ų†Ø§ØĄ APK ØĒØ§Ų„Ų</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">ØĒØ­Ø°ŲŠØą</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Ų„Ų… ؊ØĒŲ… Ø­ŲØ¸ ØŗØŦŲ„ Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯ØŠ Ø§Ų„ØŽØ§Øĩ Ø¨Ųƒ.&lt;br&gt;&lt;br&gt;Ų…Ų† Ø§Ų„Ų…ØąØŦØ­ ØŖŲ† ŲŠŲƒŲˆŲ† Ø§Ų„ØŗØ¨Ø¨ ؁؊ Ø°Ų„Ųƒ Ų‡Ųˆ Ų…Ø§Ų†Øš ØĨØšŲ„Ø§Ų†Ø§ØĒ DNS ØŖŲˆ ŲˆŲƒŲŠŲ„ Ø§Ų„Ø´Ø¨ŲƒØŠ.&lt;br&gt;&lt;br&gt;Ų„ØĨØĩŲ„Ø§Ø­ Ų‡Ø°Ų‡ Ø§Ų„Ų…Ø´ŲƒŲ„ØŠØŒ Ų‚Ų… بØĨØļØ§ŲØŠ &lt;b&gt;s.youtube.com&lt;/b&gt; ØĨŲ„Ų‰ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ø¨ŲŠØļØ§ØĄ ØŖŲˆ Ų‚Ų… بØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ ØŦŲ…ŲŠØš ØŖØ¯ŲˆØ§ØĒ Ø­Ø¸Øą DNS ŲˆŲˆŲƒŲ„Ø§ØĄ Ø§Ų„Ø¨ØąŲˆŲƒØŗŲŠ.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Ų„Ø§ ØĒØšØąØļ Ų…ØąØŠ ØŖØŽØąŲ‰</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Ø§Ų„ØĨؚداداØĒ</string>
<string name="revanced_settings_confirm_user_dialog_title">Ų‡Ų„ ØŖŲ†ØĒ Ų…ØĒØŖŲƒØ¯ ØŖŲ†Ųƒ ØĒØąŲŠØ¯ Ø§Ų„Ų…ØĒابؚ؊؟</string>
@@ -1266,8 +1271,9 @@ Second \"item\" text"</string>
ØĨذا ØĒŲ… ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„Ų‡ Ų„Ø§Ø­Ų‚Ų‹Ø§ØŒ Ų…Ų† Ø§Ų„Ų…ØŗØĒØ­ØŗŲ† Ų…ØŗØ­ Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĒØˇØ¨ŲŠŲ‚ Ų„Ų…Ų†Øš Ø­Ø¯ŲˆØĢ ØŖØŽØˇØ§ØĄ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…."</string>
<string name="revanced_spoof_app_version_target_title">Ø§Ų„Ų‡Ø¯Ų Ų…Ų† ØĒØēŲŠŲŠØą ØĨØĩØ¯Ø§Øą Ø§Ų„ØĒØˇØ¨ŲŠŲ‚</string>
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Ø§ØŗØĒؚاد؊ Ø´ØąŲŠØˇ ØĨØŦØąØ§ØĄØ§ØĒ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØēŲŠØą Ø§Ų„Ų…ØˇŲˆŲŠ</string>
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Ø§ØŗØĒؚاد؊ ØŖŲŠŲ‚ŲˆŲ†Ø§ØĒ Ų…Ø´ØēŲ„ Shorts Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - Ø§ØŗØĒؚاد؊ ØŖŲŠŲ‚ŲˆŲ†Ø§ØĒ Ø§Ų„ØĒŲ†Ų‚Ų„ Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Ø§ØŗØĒؚاد؊ ŲˆØ¸ŲŠŲØŠ Ø§Ų„Ų†ØŗØŽ</string>
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Ø§ØŗØĒؚاد؊ ØŖŲŠŲ‚ŲˆŲ†Ø§ØĒ Ų…Ø´ØēŲ„ Shorts Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - Ø§ØŗØĒؚاد؊ ØŖŲŠŲ‚ŲˆŲ†Ø§ØĒ Ø§Ų„ØĒŲ†Ų‚Ų„ Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ</string>
</patch>
<patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">ØĒØēŲŠŲŠØą ØĩŲØ­ØŠ Ø§Ų„Ø¨Ø¯Ø§ŲŠØŠ</string>
@@ -1442,11 +1448,6 @@ Second \"item\" text"</string>
<string name="revanced_announcements_connection_failed">ŲØ´Ų„ Ø§Ų„Ø§ØĒØĩØ§Ų„ Ø¨Ų…ŲˆŲØą Ø§Ų„ØĨØšŲ„Ø§Ų†Ø§ØĒ</string>
<string name="revanced_announcements_dialog_dismiss">ØĒØŦØ§Ų‡Ų„</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">ØĒØ­Ø°ŲŠØą</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Ų„Ų… ؊ØĒŲ… Ø­ŲØ¸ ØŗØŦŲ„ Ø§Ų„Ų…Ø´Ø§Ų‡Ø¯ØŠ Ø§Ų„ØŽØ§Øĩ Ø¨Ųƒ.&lt;br&gt;&lt;br&gt;Ų…Ų† Ø§Ų„Ų…ØąØŦØ­ ØŖŲ† ŲŠŲƒŲˆŲ† Ø§Ų„ØŗØ¨Ø¨ ؁؊ Ø°Ų„Ųƒ Ų‡Ųˆ Ų…Ø§Ų†Øš ØĨØšŲ„Ø§Ų†Ø§ØĒ DNS ØŖŲˆ ŲˆŲƒŲŠŲ„ Ø§Ų„Ø´Ø¨ŲƒØŠ.&lt;br&gt;&lt;br&gt;Ų„ØĨØĩŲ„Ø§Ø­ Ų‡Ø°Ų‡ Ø§Ų„Ų…Ø´ŲƒŲ„ØŠØŒ Ų‚Ų… بØĨØļØ§ŲØŠ &lt;b&gt;s.youtube.com&lt;/b&gt; ØĨŲ„Ų‰ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ø¨ŲŠØļØ§ØĄ ØŖŲˆ Ų‚Ų… بØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ ØŦŲ…ŲŠØš ØŖØ¯ŲˆØ§ØĒ Ø­Ø¸Øą DNS ŲˆŲˆŲƒŲ„Ø§ØĄ Ø§Ų„Ø¨ØąŲˆŲƒØŗŲŠ.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Ų„Ø§ ØĒØšØąØļ Ų…ØąØŠ ØŖØŽØąŲ‰</string>
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
<string name="revanced_loop_video_title">ØĒŲØšŲŠŲ„ ØĒŲƒØąØ§Øą Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
<string name="revanced_loop_video_summary_on">ØŗŲŠØĒŲ… ØĒŲƒØąØ§Øą Ø§Ų„ŲŲŠØ¯ŲŠŲˆ</string>
@@ -1561,10 +1562,22 @@ Second \"item\" text"</string>
<string name="revanced_playback_speed_default_title">ØŗØąØšØŠ Ø§Ų„ØĒØ´ØēŲŠŲ„ Ø§Ų„Ø§ŲØĒØąØ§ØļŲŠØŠ</string>
<string name="revanced_remember_playback_speed_toast">ØĒØēŲŠŲŠØą Ø§Ų„ØŗØąØšØŠ Ø§Ų„Ø§ŲØĒØąØ§ØļŲŠØŠ ØĨŲ„Ų‰: %s</string>
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
<string name="revanced_disable_hdr_video_title">ØĒØšØˇŲŠŲ„ ŲŲŠØ¯ŲŠŲˆ HDR</string>
<string name="revanced_disable_hdr_video_summary_on">ØĒŲ… ØĒØšØˇŲŠŲ„ ŲŲŠØ¯ŲŠŲˆ HDR</string>
<string name="revanced_disable_hdr_video_summary_off">ØĒŲ… ØĒŲ…ŲƒŲŠŲ† ŲŲŠØ¯ŲŠŲˆ HDR</string>
<string name="revanced_force_avc_codec_title">ŲØąØļ AVC (H.264)</string>
<string name="revanced_force_avc_codec_summary_on">ØĒŲ… ŲØąØļ Ø¨ØąŲ†Ø§Ų…ØŦ ØĒØąŲ…ŲŠØ˛ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØšŲ„Ų‰ AVC (H.264)</string>
<string name="revanced_force_avc_codec_summary_off">؊ØĒŲ… ØĒØ­Ø¯ŲŠØ¯ Ø¨ØąŲ†Ø§Ų…ØŦ ØĒØąŲ…ŲŠØ˛ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØĒŲ„Ų‚Ø§ØĻŲŠŲ‹Ø§</string>
<string name="revanced_force_avc_codec_user_dialog_message">"Ø§Ų„ŲŲˆØ§ØĻد:
â€ĸ ŲŠŲ…ŲƒŲ† ØŖŲ† ŲŠØ­ØŗŲ† ØšŲ…Øą Ø§Ų„Ø¨ØˇØ§ØąŲŠØŠ
â€ĸ ŲŠŲ…ŲƒŲ† ØŖŲ† ŲŠØŗØĒØšŲŠØ¯ Ø¯Ų‚ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ų…ŲŲ‚ŲˆØ¯ØŠ ØšŲ„Ų‰ Ø§Ų„ØŖØŦŲ‡Ø˛ØŠ Ø§Ų„Ų‚Ø¯ŲŠŲ…ØŠ
Ø§Ų„Ų‚ŲŠŲˆØ¯:
â€ĸ ØŖŲ‚ØĩŲ‰ Ø¯Ų‚ØŠ Ų‡ŲŠ 1080p
â€ĸ ØĒØ´ØēŲŠŲ„ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ ØŗŲŠØŗØĒŲ‡Ų„Ųƒ Ø§Ų„Ų…Ø˛ŲŠØ¯ Ų…Ų† Ø¨ŲŠØ§Ų†Ø§ØĒ Ø§Ų„ØĨŲ†ØĒØąŲ†ØĒ Ų…Ų‚Ø§ØąŲ†ØŠŲ‹ Ø¨Ų€ VP9 ØŖŲˆ AV1
â€ĸ Ų„Ų† ØĒØŗØĒØŽØ¯Ų… ŲŲŠØ¯ŲŠŲˆŲ‡Ø§ØĒ HDR ØĒØąŲ…ŲŠØ˛ AVC
â€ĸ Ų„Ø§ ŲŠŲ…ŲƒŲ† Ų„Ø¨ØšØļ Ø§Ų„ØŖØŦŲ‡Ø˛ØŠ ŲØąØļ AVC"</string>
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
<string name="revanced_advanced_video_quality_menu_title">ØšØąØļ Ų‚Ø§ØĻŲ…ØŠ ØŦŲˆØ¯ØŠ Ø§Ų„ŲŲŠØ¯ŲŠŲˆ Ø§Ų„Ų…ØĒŲ‚Ø¯Ų…ØŠ</string>

View File

@@ -22,6 +22,9 @@ Second \"item\" text"</string>
<app id="shared">
<patch id="misc.checks.checkEnvironmentPatch">
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">āϏāĻ•ā§€ā§ŸāύāĻŋ</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<!-- Settings about dialog. -->
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
@@ -210,9 +213,6 @@ Second \"item\" text"</string>
<patch id="misc.announcements.announcementsPatch">
<string name="revanced_announcements_dialog_dismiss">āĻ–āĻžā§°āĻŋāϜ āϕ⧰āĻ•</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">āϏāĻ•ā§€ā§ŸāύāĻŋ</string>
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
</patch>
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
@@ -241,7 +241,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
</patch>

View File

@@ -31,6 +31,11 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_days">%s gÃŧn əvvəl yamaqlanÄąb</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK qurulma vaxtÄą pozulub</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">XĶ™bĶ™rdarlÄąq</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">BaxÄąÅŸ tarixçəniz saxlanmÄąr.&lt;br&gt;&lt;br&gt;Bu çox gÃŧman ki, DNS reklam bloklayÄącÄą və ya şəbəkə proksisinə gÃļrədir.&lt;br&gt;&lt;br&gt;.Bunu dÃŧzəltmək ÃŧçÃŧn s.youtube.com-u&lt;/b&gt; &lt;b&gt;ağ siyahÄąya salÄąn və ya bÃŧtÃŧn DNS bloklayÄącÄąlarÄą və proksiləri bağlayÄąn.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Təkrar gÃļstərmə</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Tənzimləmələr</string>
<string name="revanced_settings_confirm_user_dialog_title">Davam etmək istədiyinizə əminsiniz?</string>
@@ -1265,8 +1270,9 @@ Bu tətbiqin gÃļrÃŧnÃŧşÃŧn və xÃŧsusiyyətlərin dəyişdirəcək, lakin bilin
Sonradan qapadÄąlarsa, UI səhvlərin Ãļnləmək ÃŧçÃŧn tətbiq məlumatlarÄąn silmək tÃļvsiyə olunur."</string>
<string name="revanced_spoof_app_version_target_title">Saxta tətbiq versiyası hədəfi</string>
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Yığılmayan video fəaliyyət cizgisin bərpa et</string>
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - KÃļhnə Shorts oynadÄącÄą işarələrin bərpa et</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - KÃļhnə fəaliyyət simvollarÄąn bərpa et</string>
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Transkript xÃŧsusiyyətin bərpa et</string>
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - KÃļhnə Shorts oynadÄącÄą işarələrin bərpa et</string>
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - KÃļhnə fəaliyyət simvollarÄąn bərpa et</string>
</patch>
<patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">Başlatma səhifəsini dəyişdir</string>
@@ -1441,22 +1447,17 @@ DeArrow haqqÄąnda ətraflÄą Ãļyrənmək ÃŧçÃŧn bura toxun"</string>
<string name="revanced_announcements_connection_failed">Elan provayderinə bağlanmaq olmadı</string>
<string name="revanced_announcements_dialog_dismiss">Ləğv et</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">XĶ™bĶ™rdarlÄąq</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">BaxÄąÅŸ tarixçəniz saxlanmÄąr.&lt;br&gt;&lt;br&gt;Bu çox gÃŧman ki, DNS reklam bloklayÄącÄą və ya şəbəkə proksisinə gÃļrədir.&lt;br&gt;&lt;br&gt;.Bunu dÃŧzəltmək ÃŧçÃŧn s.youtube.com-u&lt;/b&gt; &lt;b&gt;ağ siyahÄąya salÄąn və ya bÃŧtÃŧn DNS bloklayÄącÄąlarÄą və proksiləri bağlayÄąn.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Təkrar gÃļstərmə</string>
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
<string name="revanced_loop_video_title">DÃļngÃŧ videosunu aktivləşdir</string>
<string name="revanced_loop_video_summary_on">Video dÃļngÃŧyə alÄąnacaq</string>
<string name="revanced_loop_video_summary_off">Video dÃļngÃŧyə alÄąnmayacaq</string>
<string name="revanced_loop_video_title">Video təkrarlamanÄą aktivləşdir</string>
<string name="revanced_loop_video_summary_on">Video təkrarlanacaq</string>
<string name="revanced_loop_video_summary_off">Video təkrarlanmayacaq</string>
</patch>
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
<string name="revanced_loop_video_button_title">DÃļngÃŧ videosu dÃŧyməsini gÃļstər</string>
<string name="revanced_loop_video_button_title">Video təkrarlama dÃŧyməsini gÃļstər</string>
<string name="revanced_loop_video_button_summary_on">DÃŧymə gÃļrÃŧnÃŧr</string>
<string name="revanced_loop_video_button_summary_off">DÃŧymə gÃļrÃŧnmÃŧr</string>
<string name="revanced_loop_video_button_toast_on">Video dÃļngÃŧsÃŧ aktivdir</string>
<string name="revanced_loop_video_button_toast_off">Video dÃļngÃŧsÃŧ passivdir</string>
<string name="revanced_loop_video_button_toast_on">Video təkrarlama aÃ§ÄąqdÄąr</string>
<string name="revanced_loop_video_button_toast_off">Video təkrarlama qapalıdır</string>
</patch>
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
<string name="revanced_spoof_device_dimensions_title">Cihaz ÃļlçÃŧlərini saxtalaşdÄąr</string>
@@ -1560,10 +1561,22 @@ Bunu aktivləşdirmə daha yÃŧksək video keyfiyyətləri əngəlin silə bilər
<string name="revanced_playback_speed_default_title">İlkin oynatma sÃŧrəti</string>
<string name="revanced_remember_playback_speed_toast">İlkin sÃŧrət %s kimi dəyişdirildi</string>
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
<string name="revanced_disable_hdr_video_title">HDR Videonu Qapat</string>
<string name="revanced_disable_hdr_video_summary_on">HDR video qapalÄądÄąr</string>
<string name="revanced_disable_hdr_video_summary_off">HDR video aktivdir</string>
<string name="revanced_force_avc_codec_title">AVC (H.264) -i Məcbur et</string>
<string name="revanced_force_avc_codec_summary_on">Video kodlayıcı AVC (H.264) - ə məcbur edilir</string>
<string name="revanced_force_avc_codec_summary_off">Video kodlayÄącÄą birbaşa mÃŧəyyən edilir</string>
<string name="revanced_force_avc_codec_user_dialog_message">"Faydalar:
â€ĸ Batareya ÃļmrÃŧnÃŧ uzada bilər
â€ĸ KÃļhnə cihazlarda çatÄąÅŸmayan video ayÄąrdetmələrin bərpa edə bilər
Məhdudiyyətlər:
â€ĸ Maksimum ayÄąrdetmə 1080p-dir
â€ĸ Video oynatma VP9 və ya AV1-dən daha çox internet məlumatÄą işlədəcək
â€ĸ HDR videolarÄą AVC istifadə etməyəcək
â€ĸ Bəzi cihazlar AVC-ni zorlaya bilməz"</string>
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
<string name="revanced_advanced_video_quality_menu_title">QabaqcÄąl video keyfiyyət siyahÄąsÄąn gÃļstər</string>

View File

@@ -31,6 +31,11 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_days">АдĐēĐ°Ņ€ŅĐēŅ‚Đ°Đ˛Đ°ĐŊа %s Đ´ĐˇŅ‘ĐŊ Ņ‚Đ°Đŧ҃</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Đ”Đ°Ņ‚Đ° ŅŅ‚Đ˛Đ°Ņ€ŅĐŊĐŊŅ APK ĐŋĐ°ŅˆĐēОдĐļаĐŊа</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">ĐŖĐ˛Đ°ĐŗĐ°</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Đ’Đ°ŅˆĐ° ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ ĐŊĐĩ ĐˇĐ°Ņ…ĐžŅžĐ˛Đ°ĐĩŅ†Ņ†Đ°.&lt;br&gt;&lt;br&gt;Đ“ŅŅ‚Đ°, Ņ…ŅƒŅ‚Ņ‡ŅĐš Са ŅžŅŅ‘, Đ˛Ņ‹ĐēĐģŅ–ĐēаĐŊа DNS-ĐąĐģаĐēŅ–Ņ€ĐžŅžŅˆŅ‡Ņ‹ĐēаĐŧ Ņ€ŅĐēĐģаĐŧŅ‹ айО ҁĐĩŅ‚ĐēĐ°Đ˛Ņ‹Đŧ ĐŋŅ€Đ°ĐēҁҖ.&lt;br&gt;&lt;br&gt;Каб Đ˛Ņ‹ĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ĐŗŅŅ‚Đ°, Đ´Đ°Đ´Đ°ĐšŅ†Đĩ &lt;b&gt;s.youtube.com&lt;/b&gt; ҃ ĐąĐĩĐģŅ‹ ҁĐŋҖҁ айО адĐēĐģŅŽŅ‡Ņ‹Ņ†Đĩ ŅžŅĐĩ DNS-ĐąĐģаĐēŅ–Ņ€ĐžŅžŅˆŅ‡Ņ‹ĐēŅ– Ņ– ĐŋŅ€Đ°ĐēҁҖ.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">БоĐģҌ҈ ĐŊĐĩ ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†ŅŒ</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">НаĐģĐ°Đ´Ņ‹</string>
<string name="revanced_settings_confirm_user_dialog_title">Đ’Ņ‹ ŅžĐŋŅŅžĐŊĐĩĐŊŅ‹, ŅˆŅ‚Đž Ņ…ĐžŅ‡Đ°Ņ†Đĩ ĐŋŅ€Đ°Ņ†ŅĐŗĐŊŅƒŅ†ŅŒ?</string>
@@ -1267,8 +1272,9 @@ Second \"item\" text"</string>
КаĐģŅ– ĐŋаСĐŊĐĩĐš ĐąŅƒĐ´ĐˇĐĩ адĐēĐģŅŽŅ‡Đ°ĐŊа, Ņ€ŅĐēаĐŧĐĩĐŊĐ´ŅƒĐĩŅ†Ņ†Đ° Đ°Ņ‡Ņ‹ŅŅ†Ņ–Ņ†ŅŒ даĐŊŅ‹Ņ ĐŋҀҋĐēĐģадаĐŊĐŊŅ, Đēай ĐŋаСйĐĩĐŗĐŊŅƒŅ†ŅŒ ĐŋаĐŧŅ‹ĐģаĐē ҃ Ņ–ĐŊŅ‚ŅŅ€Ņ„ĐĩĐšŅĐĩ."</string>
<string name="revanced_spoof_app_version_target_title">ĐŸĐ°Đ´Ņ€ĐžĐąĐēа ĐŧŅŅ‚Đ°Đ˛Đ°Đš вĐĩҀҁҖҖ ĐŋŅ€Đ°ĐŗŅ€Đ°ĐŧŅ‹</string>
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - АдĐŊĐ°Đ˛Ņ–Ņ†ŅŒ ĐŊĐĩ ĐˇĐŗĐžŅ€ĐŊŅƒŅ‚Ņ‹ Ņ€Đ°Đ´ĐžĐē дСĐĩŅĐŊĐŊŅŅž Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 — Đ’ĐžŅŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Đĩ СĐŊĐ°Ņ‡Đēи ĐŋĐģĐĩĐĩŅ€Đ° Shorts</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - АдĐŊĐ°ŅžĐģĐĩĐŊĐŊĐĩ ŅŅ‚Đ°Ņ€Ņ‹Ņ… СĐŊĐ°Ņ‡ĐēĐžŅž ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - АдĐŊĐ°Đ˛Ņ–Ņ†ŅŒ Ņ„ŅƒĐŊĐēŅ†Ņ‹ŅĐŊаĐģҌĐŊĐ°ŅŅ†ŅŒ ŅŅ‚ŅĐŊĐ°ĐŗŅ€Đ°ĐŧŅ‹</string>
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 — Đ’ĐžŅŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Đĩ СĐŊĐ°Ņ‡Đēи ĐŋĐģĐĩĐĩŅ€Đ° Shorts</string>
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - АдĐŊĐ°ŅžĐģĐĩĐŊĐŊĐĩ ŅŅ‚Đ°Ņ€Ņ‹Ņ… СĐŊĐ°Ņ‡ĐēĐžŅž ĐŊĐ°Đ˛Ņ–ĐŗĐ°Ņ†Ņ‹Ņ–</string>
</patch>
<patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">ЗĐŧŅĐŊŅ–Ņ†ŅŒ ŅŅ‚Đ°Ņ€Ņ‚Đ°Đ˛ŅƒŅŽ ŅŅ‚Đ°Ņ€ĐžĐŊĐē҃</string>
@@ -1443,11 +1449,6 @@ Second \"item\" text"</string>
<string name="revanced_announcements_connection_failed">НĐĩ ŅžĐ´Đ°ĐģĐžŅŅ ĐŋадĐēĐģŅŽŅ‡Ņ‹Ņ†Ņ†Đ° да ĐŋĐ°ŅŅ‚Đ°ŅžŅˆŅ‡Ņ‹Đēа ай\"ŅŅž</string>
<string name="revanced_announcements_dialog_dismiss">Ņ€Đ°ŅŅĐģĐ°ĐąŅ–Ņ†Ņ†Đ°</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">ĐŖĐ˛Đ°ĐŗĐ°</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Đ’Đ°ŅˆĐ° ĐŗŅ–ŅŅ‚ĐžŅ€Ņ‹Ņ ĐŋŅ€Đ°ĐŗĐģŅĐ´Ņƒ ĐŊĐĩ ĐˇĐ°Ņ…ĐžŅžĐ˛Đ°ĐĩŅ†Ņ†Đ°.&lt;br&gt;&lt;br&gt;Đ“ŅŅ‚Đ°, Ņ…ŅƒŅ‚Ņ‡ŅĐš Са ŅžŅŅ‘, Đ˛Ņ‹ĐēĐģŅ–ĐēаĐŊа DNS-ĐąĐģаĐēŅ–Ņ€ĐžŅžŅˆŅ‡Ņ‹ĐēаĐŧ Ņ€ŅĐēĐģаĐŧŅ‹ айО ҁĐĩŅ‚ĐēĐ°Đ˛Ņ‹Đŧ ĐŋŅ€Đ°ĐēҁҖ.&lt;br&gt;&lt;br&gt;Каб Đ˛Ņ‹ĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ĐŗŅŅ‚Đ°, Đ´Đ°Đ´Đ°ĐšŅ†Đĩ &lt;b&gt;s.youtube.com&lt;/b&gt; ҃ ĐąĐĩĐģŅ‹ ҁĐŋҖҁ айО адĐēĐģŅŽŅ‡Ņ‹Ņ†Đĩ ŅžŅĐĩ DNS-ĐąĐģаĐēŅ–Ņ€ĐžŅžŅˆŅ‡Ņ‹ĐēŅ– Ņ– ĐŋŅ€Đ°ĐēҁҖ.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">БоĐģҌ҈ ĐŊĐĩ ĐŋаĐēĐ°ĐˇĐ˛Đ°Ņ†ŅŒ</string>
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
<string name="revanced_loop_video_title">ĐŖĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ĐˇĐ°Ņ†Ņ‹ĐēĐģĐĩĐŊаĐĩ Đ˛Ņ–Đ´ŅĐ°</string>
<string name="revanced_loop_video_summary_on">Đ’Ņ–Đ´ŅĐ° ĐąŅƒĐ´ĐˇĐĩ ĐˇĐ°Ņ†Ņ‹ĐēĐģĐĩĐŊа</string>
@@ -1562,10 +1563,22 @@ Second \"item\" text"</string>
<string name="revanced_playback_speed_default_title">ĐĄŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚ĐŊĐ°Ņ Ņ…ŅƒŅ‚ĐēĐ°ŅŅ†ŅŒ ĐŋŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊŅ</string>
<string name="revanced_remember_playback_speed_toast">ĐĨŅƒŅ‚ĐēĐ°ŅŅ†ŅŒ Đŋа СĐŧĐ°ŅžŅ‡Đ°ĐŊĐŊŅ– СĐŧĐĩĐŊĐĩĐŊа ĐŊа: %s</string>
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
<string name="revanced_disable_hdr_video_title">АдĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ Đ˛Ņ–Đ´ŅĐ° Ņž Ņ„Đ°Ņ€ĐŧĐ°Ņ†Đĩ HDR</string>
<string name="revanced_disable_hdr_video_summary_on">Đ’Ņ–Đ´ŅĐ° Ņž Ņ„Đ°Ņ€ĐŧĐ°Ņ†Đĩ HDR адĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_disable_hdr_video_summary_off">Đ’Ņ–Đ´ŅĐ° Ņž Ņ„Đ°Ņ€ĐŧĐ°Ņ†Đĩ HDR ҃ĐēĐģŅŽŅ‡Đ°ĐŊа</string>
<string name="revanced_force_avc_codec_title">ĐŸŅ€Ņ‹ĐŧŅƒŅŅ–Ņ†ŅŒ AVC (H.264)</string>
<string name="revanced_force_avc_codec_summary_on">Đ’Ņ–Đ´ŅĐ°ĐēĐžĐ´ŅĐē ĐŋҀҋĐŧŅƒŅĐžĐ˛Đ° ŅžŅŅ‚Đ°ĐģŅĐ˛Đ°ĐŊŅ‹ ĐŊа AVC (H.264)</string>
<string name="revanced_force_avc_codec_summary_off">Đ’Ņ–Đ´ŅĐ°ĐēĐžĐ´ŅĐē Đ˛Ņ‹ĐˇĐŊĐ°Ņ‡Đ°ĐĩŅ†Ņ†Đ° Đ°ŅžŅ‚Đ°ĐŧĐ°Ņ‚Ņ‹Ņ‡ĐŊа</string>
<string name="revanced_force_avc_codec_user_dialog_message">"ПĐĩŅ€Đ°Đ˛Đ°ĐŗŅ–:
â€ĸ МоĐļа ĐŋаĐģĐĩĐŋŅˆŅ‹Ņ†ŅŒ Ņ‡Đ°Ņ ĐŋŅ€Đ°Ņ†Ņ‹ ĐąĐ°Ņ‚Đ°Ņ€ŅŅ–
â€ĸ МоĐļа адĐŊĐ°Đ˛Ņ–Ņ†ŅŒ Đ°Đ´ŅŅƒŅ‚ĐŊŅ‹Ņ Ņ€Đ°ĐˇŅ€ĐžĐˇĐŊĐĩĐŊĐŊŅ– Đ˛Ņ–Đ´ŅĐ° ĐŊа ŅŅ‚Đ°Ņ€ĐžĐš ĐŋҀҋĐģадСĐĩ
АйĐŧĐĩĐļаваĐŊĐŊŅ–:
â€ĸ МаĐēҁҖĐŧаĐģҌĐŊаĐĩ Ņ€Đ°ĐˇŅ€ĐžĐˇĐŊĐĩĐŊĐŊĐĩ - 1080p
â€ĸ ĐŸŅ€Đ°ĐšĐŗŅ€Đ°Đ˛Đ°ĐŊĐŊĐĩ Đ˛Ņ–Đ´ŅĐ° ĐąŅƒĐ´ĐˇĐĩ Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚ĐžŅžĐ˛Đ°Ņ†ŅŒ йОĐģҌ҈ Ņ–ĐŊŅ‚ŅŅ€ĐŊŅŅ‚-дадСĐĩĐŊҋ҅, ҇ҋĐŧ VP9 айО AV1
â€ĸ HDR-Đ˛Ņ–Đ´ŅĐ° ĐŊĐĩ ĐąŅƒĐ´ŅƒŅ†ŅŒ Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚ĐžŅžĐ˛Đ°Ņ†ŅŒ AVC
â€ĸ НĐĩĐēĐ°Ņ‚ĐžŅ€Ņ‹Ņ ĐŋҀҋĐģĐ°Đ´Ņ‹ ĐŊĐĩ ĐŧĐžĐŗŅƒŅ†ŅŒ ĐŋҀҋĐŧŅƒŅĐžĐ˛Đ° Đ˛Ņ‹ĐēĐ°Ņ€Ņ‹ŅŅ‚ĐžŅžĐ˛Đ°Ņ†ŅŒ AVC"</string>
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
<string name="revanced_advanced_video_quality_menu_title">ПаĐēĐ°ĐˇĐ°Ņ†ŅŒ ĐŋĐ°ŅˆŅ‹Ņ€Đ°ĐŊаĐĩ ĐŧĐĩĐŊŅŽ ŅĐēĐ°ŅŅ†Ņ– Đ˛Ņ–Đ´ŅĐ°</string>

View File

@@ -31,6 +31,11 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_days">ĐšĐžŅ€Đ¸ĐŗĐ¸Ņ€Đ°ĐŊĐž ĐŋŅ€Đĩди %s Đ´ĐŊи</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Đ”Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐēĐžĐŧĐŋиĐģĐ°Ņ†Đ¸Ņ ĐŊа APK Đĩ ĐŋĐžĐ˛Ņ€ĐĩĐ´ĐĩĐŊа</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">ĐŸŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиĐĩ</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Đ˜ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ви ĐŊа ĐŗĐģĐĩдаĐŊĐĩ ĐŊĐĩ ҁĐĩ СаĐŋаСва.&lt;br&gt;&lt;br&gt;ĐĸОва ĐŊаК-вĐĩŅ€ĐžŅŅ‚ĐŊĐž Đĩ ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊĐĩĐŊĐž ĐžŅ‚ DNS ĐąĐģĐžĐēĐ¸Ņ€Đ°Ņ‰ Ņ€ĐĩĐēĐģаĐŧи иĐģи ĐŧŅ€ĐĩĐļОв ĐŋŅ€ĐžĐēŅĐ¸.&lt;br&gt;&lt;br&gt;За да ĐēĐžŅ€Đ¸ĐŗĐ¸Ņ€Đ°Ņ‚Đĩ Ņ‚ĐžĐ˛Đ°, ĐŋĐžŅŅ‚Đ°Đ˛ĐĩŅ‚Đĩ &lt;b&gt;s.youtube в ĐąĐĩĐģĐ¸Ņ ҁĐŋĐ¸ŅŅŠĐē.com&lt;/b&gt; иĐģи иСĐēĐģŅŽŅ‡ĐĩŅ‚Đĩ Đ˛ŅĐ¸Ņ‡Đēи DNS ĐąĐģĐžĐēĐĩŅ€Đ¸ и ĐŋŅ€ĐžĐēŅĐ¸Ņ‚Đ°.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">НĐĩ ĐŋĐžĐēаСваК ĐžŅ‚ĐŊОвО</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи</string>
<string name="revanced_settings_confirm_user_dialog_title">ĐĄĐ¸ĐŗŅƒŅ€ĐŊи Đģи ҁ҂Đĩ, ҇Đĩ Đ¸ŅĐēĐ°Ņ‚Đĩ да ĐŋŅ€ĐžĐ´ŅŠĐģĐļĐ¸Ņ‚Đĩ?</string>
@@ -1266,8 +1271,9 @@ Second \"item\" text"</string>
АĐēĐž ĐŋĐž-ĐēҊҁĐŊĐž ĐąŅŠĐ´Đĩ иСĐēĐģŅŽŅ‡ĐĩĐŊĐž, ĐŋŅ€ĐĩĐŋĐžŅ€ŅŠŅ‡Đ¸Ņ‚ĐĩĐģĐŊĐž Đĩ да Đ¸ĐˇŅ‡Đ¸ŅŅ‚Đ¸Ņ‚Đĩ даĐŊĐŊĐ¸Ņ‚Đĩ ĐŊа ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž, Са да ĐŋŅ€ĐĩĐ´ĐžŅ‚Đ˛Ņ€Đ°Ņ‚Đ¸Ņ‚Đĩ ĐŗŅ€Đĩ҈Đēи в ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģҁĐēĐ¸Ņ иĐŊŅ‚ĐĩҀ҄ĐĩĐšŅ."</string>
<string name="revanced_spoof_app_version_target_title">ПодĐģŅŠĐŗĐ˛Đ°ĐŊĐĩ Са вĐĩŅ€ŅĐ¸ŅŅ‚Đ° ĐŊа</string>
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐĩŅĐŗŅŠĐ˛Đ°ĐĩĐŧа ĐģĐĩĐŊŅ‚Đ° ҁ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ Са видĐĩĐž</string>
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОвĐĩŅ‚Đĩ ŅŅ‚Đ°Ņ€Đ¸Ņ‚Đĩ иĐēĐžĐŊи ĐŊа Shorts в ĐŋĐģĐĩĐšŅŠŅ€Đ°</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ŅŅ‚Đ°Ņ€Đ¸ иĐēĐžĐŊи Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ</string>
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа Ņ„ŅƒĐŊĐēŅ†Đ¸ĐžĐŊаĐģĐŊĐžŅŅ‚Ņ‚Đ° ĐŊа ĐŋŅ€ĐĩĐŋĐ¸ŅĐ°</string>
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОвĐĩŅ‚Đĩ ŅŅ‚Đ°Ņ€Đ¸Ņ‚Đĩ иĐēĐžĐŊи ĐŊа Shorts в ĐŋĐģĐĩĐšŅŠŅ€Đ°</string>
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ŅŅ‚Đ°Ņ€Đ¸ иĐēĐžĐŊи Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°Ņ†Đ¸Ņ</string>
</patch>
<patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">ĐŸŅ€ĐžĐŧŅĐŊа ĐŊа ĐŊĐ°Ņ‡Đ°ĐģĐŊĐ°Ņ‚Đ° ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°</string>
@@ -1442,11 +1448,6 @@ Second \"item\" text"</string>
<string name="revanced_announcements_connection_failed">НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž ŅĐ˛ŅŠŅ€ĐˇĐ˛Đ°ĐŊĐĩ ҁ Đ´ĐžŅŅ‚Đ°Đ˛Ņ‡Đ¸Đē ĐŊа ŅŅŠĐžĐąŅ‰ĐĩĐŊĐ¸Ņ</string>
<string name="revanced_announcements_dialog_dismiss">ĐžŅ‚Ņ…Đ˛ŅŠŅ€Đģи</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">ĐŸŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиĐĩ</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Đ˜ŅŅ‚ĐžŅ€Đ¸ŅŅ‚Đ° ви ĐŊа ĐŗĐģĐĩдаĐŊĐĩ ĐŊĐĩ ҁĐĩ СаĐŋаСва.&lt;br&gt;&lt;br&gt;ĐĸОва ĐŊаК-вĐĩŅ€ĐžŅŅ‚ĐŊĐž Đĩ ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊĐĩĐŊĐž ĐžŅ‚ DNS ĐąĐģĐžĐēĐ¸Ņ€Đ°Ņ‰ Ņ€ĐĩĐēĐģаĐŧи иĐģи ĐŧŅ€ĐĩĐļОв ĐŋŅ€ĐžĐēŅĐ¸.&lt;br&gt;&lt;br&gt;За да ĐēĐžŅ€Đ¸ĐŗĐ¸Ņ€Đ°Ņ‚Đĩ Ņ‚ĐžĐ˛Đ°, ĐŋĐžŅŅ‚Đ°Đ˛ĐĩŅ‚Đĩ &lt;b&gt;s.youtube в ĐąĐĩĐģĐ¸Ņ ҁĐŋĐ¸ŅŅŠĐē.com&lt;/b&gt; иĐģи иСĐēĐģŅŽŅ‡ĐĩŅ‚Đĩ Đ˛ŅĐ¸Ņ‡Đēи DNS ĐąĐģĐžĐēĐĩŅ€Đ¸ и ĐŋŅ€ĐžĐēŅĐ¸Ņ‚Đ°.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">НĐĩ ĐŋĐžĐēаСваК ĐžŅ‚ĐŊОвО</string>
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
<string name="revanced_loop_video_title">АĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐŋĐžĐ˛Ņ‚ĐžŅ€ĐĩĐŊиĐĩ ĐŊа видĐĩĐžŅ‚Đž</string>
<string name="revanced_loop_video_summary_on">ВидĐĩĐžĐēĐģиĐŋŅŠŅ‚ ҉Đĩ ҁĐĩ ĐŋĐžĐ˛Ņ‚Đ°Ņ€Ņ</string>
@@ -1561,10 +1562,22 @@ Second \"item\" text"</string>
<string name="revanced_playback_speed_default_title">ĐĄĐēĐžŅ€ĐžŅŅ‚ ĐŊа Đ˛ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩ ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ</string>
<string name="revanced_remember_playback_speed_toast">ĐĄĐēĐžŅ€ĐžŅŅ‚Ņ‚Đ° ĐŋĐž ĐŋĐžĐ´Ņ€Đ°ĐˇĐąĐ¸Ņ€Đ°ĐŊĐĩ Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊа ĐŊа: %s</string>
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
<string name="revanced_disable_hdr_video_title">ДĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа HDR видĐĩĐž</string>
<string name="revanced_disable_hdr_video_summary_on">HDR видĐĩĐžŅ‚Đž Đĩ Đ´ĐĩаĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_disable_hdr_video_summary_off">HDR видĐĩĐžŅ‚Đž Đĩ аĐēŅ‚Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐž</string>
<string name="revanced_force_avc_codec_title">ĐŸŅ€Đ¸ĐŊŅƒĐ´Đ¸ AVC (H.264)</string>
<string name="revanced_force_avc_codec_summary_on">ВидĐĩĐž ĐēОдĐĩĐēŅŠŅ‚ Đĩ ĐŋŅ€Đ¸ĐŊŅƒĐ´ĐĩĐŊ да ĐąŅŠĐ´Đĩ AVC (H.264)</string>
<string name="revanced_force_avc_codec_summary_off">ВидĐĩĐž ĐēОдĐĩĐēŅŠŅ‚ ҁĐĩ ĐžĐŋŅ€ĐĩĐ´ĐĩĐģŅ Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐŊĐž</string>
<string name="revanced_force_avc_codec_user_dialog_message">"ĐŸŅ€ĐĩдиĐŧŅŅ‚Đ˛Đ°:
â€ĸ МоĐļĐĩ да ĐŋĐžĐ´ĐžĐąŅ€Đ¸ ĐļĐ¸Đ˛ĐžŅ‚Đ° ĐŊа ĐąĐ°Ņ‚ĐĩŅ€Đ¸ŅŅ‚Đ°
â€ĸ МоĐļĐĩ да Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊОви ĐģиĐŋŅĐ˛Đ°Ņ‰Đ¸ видĐĩĐž Ņ€ĐĩСОĐģŅŽŅ†Đ¸Đ¸ ĐŊа ĐŋĐž-ŅŅ‚Đ°Ņ€Đ¸ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛Đ°
ĐžĐŗŅ€Đ°ĐŊĐ¸Ņ‡ĐĩĐŊĐ¸Ņ:
â€ĸ МаĐēŅĐ¸ĐŧаĐģĐŊĐ°Ņ‚Đ° Ņ€ĐĩСОĐģŅŽŅ†Đ¸Ņ Đĩ 1080p
â€ĸ Đ’ŅŠĐˇĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐļдаĐŊĐĩŅ‚Đž ĐŊа видĐĩĐž ҉Đĩ иСĐŋĐžĐģСва ĐŋОвĐĩ҇Đĩ иĐŊŅ‚ĐĩŅ€ĐŊĐĩŅ‚ даĐŊĐŊи ĐžŅ‚ VP9 иĐģи AV1
â€ĸ HDR видĐĩĐžĐēĐģиĐŋОвĐĩŅ‚Đĩ ĐŊŅĐŧа да иСĐŋĐžĐģĐˇĐ˛Đ°Ņ‚ AVC
â€ĸ ĐŅĐēОи ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚Đ˛Đ° ĐŊĐĩ ĐŧĐžĐŗĐ°Ņ‚ да ĐŋŅ€Đ¸ĐŊŅƒĐ´ŅŅ‚ AVC"</string>
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
<string name="revanced_advanced_video_quality_menu_title">ПоĐēаСваĐŊĐĩ ĐŊа ĐŧĐĩĐŊŅŽŅ‚Đž Са Ņ€Đ°ĐˇŅˆĐ¸Ņ€ĐĩĐŊĐž ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đž ĐŊа видĐĩĐžŅ‚Đž</string>

View File

@@ -31,6 +31,11 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_days">%s āĻĻāĻŋāύ āφāϗ⧇ āĻĒā§āϝāĻžāϚ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK āϤ⧈āϰāĻŋāϰ āϤāĻžāϰāĻŋāĻ– āĻ¤ā§āϰ⧁āϟāĻŋāĻĒā§‚āĻ°ā§āĻŖ</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">āϏāϤāĻ°ā§āϕ⧀āĻ•āϰāĻŖ</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">āφāĻĒāύāĻžāϰ āĻĻ⧇āĻ–āĻžāϰ āχāϤāĻŋāĻšāĻžāϏ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāĻšā§āϛ⧇ āύāĻžāĨ¤&lt;br&gt;&lt;br&gt;āĻāϟāĻŋ āϏāĻŽā§āĻ­āĻŦāϤ DNS āĻ…ā§āϝāĻžāĻĄ āĻŦā§āϞāĻ•āĻžāϰ āĻ…āĻĨāĻŦāĻž āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻ•āĻžāϰāϪ⧇āĨ¤&lt;br&gt;&lt;br&gt;āĻāϟāĻŋ āĻ āĻŋāĻ• āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, &lt;b&gt;s.youtube.com&lt;/b&gt; āϏāĻžāĻĻāĻž āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ āĻ…āĻĨāĻŦāĻž āϏāĻ•āϞ DNS āĻŦā§āϞāĻ•āĻžāϰ āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύāĨ¤</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">āφāĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāĻŦ⧇āύ āύāĻž</string>
</patch>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">āϏ⧇āϟāĻŋāĻ‚āϏ</string>
<string name="revanced_settings_confirm_user_dialog_title">āφāĻĒāύāĻŋ āĻ•āĻŋ āĻāĻ—āĻŋāϝāĻŧ⧇ āϝ⧇āϤ⧇ āϚāĻžāύ?</string>
@@ -1262,8 +1267,9 @@ YouTube āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āĻ…āĻŸā§‹ āĻĒā§āϞ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ
āĻĒāϰ⧇ āϝāĻĻāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻšāϝāĻŧ, UI āĻŦāĻžāĻ— āĻāĻĄāĻŧāĻžāϤ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤"</string>
<string name="revanced_spoof_app_version_target_title">āĻ¸ā§āĻĒ⧁āĻĢ āĻ…ā§āϝāĻžāĻĒ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϞāĻ•ā§āĻˇā§āϝ</string>
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āύ⧟ āĻāĻŽāύ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻŦāĻžāϰ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - āĻĒ⧁āϰāύ⧋ Shorts āĻĒā§āϞ⧇āϝāĻŧāĻžāϰ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - āĻĒ⧁āϰāύ⧋ āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - āĻĒ⧁āϰāύ⧋ Shorts āĻĒā§āϞ⧇āϝāĻŧāĻžāϰ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - āĻĒ⧁āϰāύ⧋ āύ⧇āĻ­āĻŋāϗ⧇āĻļāύ āφāχāĻ•āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧁āύ</string>
</patch>
<patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">āĻļ⧁āϰ⧁āϰ āĻĒ⧃āĻˇā§āĻ āĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ</string>
@@ -1438,11 +1444,6 @@ DeArrow āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āĻāĻ–āĻžāύ⧇ āϟ
<string name="revanced_announcements_connection_failed">āĻ˜ā§‹āώāύāĻžāĻĻāĻžāϤāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻŽā§āĻĒāĻ°ā§āĻ• āĻ¸ā§āĻĨāĻžāĻĒāύ āĻŦā§āϝāĻ°ā§āĻĨ āĻšā§Ÿā§‡āϛ⧇</string>
<string name="revanced_announcements_dialog_dismiss">āĻŦāĻžāϤāĻŋāϞ āĻ•āϰ⧁āύ</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">āϏāϤāĻ°ā§āϕ⧀āĻ•āϰāĻŖ</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">āφāĻĒāύāĻžāϰ āĻĻ⧇āĻ–āĻžāϰ āχāϤāĻŋāĻšāĻžāϏ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāĻšā§āϛ⧇ āύāĻžāĨ¤&lt;br&gt;&lt;br&gt;āĻāϟāĻŋ āϏāĻŽā§āĻ­āĻŦāϤ DNS āĻ…ā§āϝāĻžāĻĄ āĻŦā§āϞāĻ•āĻžāϰ āĻ…āĻĨāĻŦāĻž āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻ•āĻžāϰāϪ⧇āĨ¤&lt;br&gt;&lt;br&gt;āĻāϟāĻŋ āĻ āĻŋāĻ• āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, &lt;b&gt;s.youtube.com&lt;/b&gt; āϏāĻžāĻĻāĻž āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ āĻ…āĻĨāĻŦāĻž āϏāĻ•āϞ DNS āĻŦā§āϞāĻ•āĻžāϰ āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύāĨ¤</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">āφāĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāĻŦ⧇āύ āύāĻž</string>
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
<string name="revanced_loop_video_title">āϞ⧁āĻĒ āĻ­āĻŋāĻĄāĻŋāĻ“ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ</string>
<string name="revanced_loop_video_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āϞ⧁āĻĒ āĻšāĻŦ⧇</string>
@@ -1557,10 +1558,22 @@ DeArrow āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āĻāĻ–āĻžāύ⧇ āϟ
<string name="revanced_playback_speed_default_title">āĻĒā§āϞ⧇āĻŦā§āϝāĻžāϕ⧇āϰ āĻŽā§‚āϞ āĻ¸ā§āĻĒāĻŋāĻĄ</string>
<string name="revanced_remember_playback_speed_toast">āĻŽā§‚āϞ āĻ¸ā§āĻĒāĻŋāĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāĻšā§āϛ⧇: %s</string>
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
<string name="revanced_disable_hdr_video_title">HDR āĻ­āĻŋāĻĄāĻŋāĻ“ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧁āύ</string>
<string name="revanced_disable_hdr_video_summary_on">HDR āĻ­āĻŋāĻĄāĻŋāĻ“ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_disable_hdr_video_summary_off">HDR āĻ­āĻŋāĻĄāĻŋāĻ“ āϏāĻ•ā§āϰāĻŋ⧟ āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_force_avc_codec_title">AVC (H.264) āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧁āύ</string>
<string name="revanced_force_avc_codec_summary_on">āĻ­āĻŋāĻĄāĻŋāĻ“ āϕ⧋āĻĄā§‡āĻ• AVC (H.264) āϤ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇</string>
<string name="revanced_force_avc_codec_summary_off">āĻ­āĻŋāĻĄāĻŋāĻ“ āϕ⧋āĻĄā§‡āĻ• āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻšāϝāĻŧ</string>
<string name="revanced_force_avc_codec_user_dialog_message">"āϏ⧁āĻŦāĻŋāϧāĻž:
â€ĸ āĻŦā§āϝāĻžāϟāĻžāϰāĻŋāϰ āφāϝāĻŧ⧁ āωāĻ¨ā§āύāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇
â€ĸ āĻĒ⧁āϰāύ⧋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰ⧇āĻœā§‹āϞāĻŋāωāĻļāύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇
āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž:
â€ĸ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āϰ⧇āĻœā§‹āϞāĻŋāωāĻļāύ 1080p
â€ĸ VP9 āĻŦāĻž AV1 āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĒā§āϞ⧇āĻŦā§āϝāĻžāϕ⧇ āĻŦ⧇āĻļāĻŋ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻĄā§‡āϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻŦ⧇
â€ĸ HDR āĻ­āĻŋāĻĄāĻŋāĻ“ AVC āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇ āύāĻž
â€ĸ āĻ•āĻŋāϛ⧁ āĻĄāĻŋāĻ­āĻžāχāϏ AVC āĻœā§‹āϰ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻž"</string>
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
<string name="revanced_advanced_video_quality_menu_title">āωāĻ¨ā§āύāϤ āĻ­āĻŋāĻĄāĻŋāĻ“ āϗ⧁āĻŖāĻŽāĻžāύ āĻŽā§‡āύ⧁ āĻĻ⧇āĻ–āĻžāύ</string>

View File

@@ -22,6 +22,8 @@ Second \"item\" text"</string>
<app id="shared">
<patch id="misc.checks.checkEnvironmentPatch">
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
</patch>
<patch id="misc.settings.settingsResourcePatch">
<!-- Settings about dialog. -->
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
@@ -209,8 +211,6 @@ Second \"item\" text"</string>
</patch>
<patch id="misc.announcements.announcementsPatch">
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
</patch>
<patch id="misc.loopvideo.loopVideoPatch">
</patch>
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
@@ -239,7 +239,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
</patch>
<patch id="video.hdr.disableHdrPatch">
<patch id="video.codecs.disableVideoCodecsPatch">
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
</patch>

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