mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-25 10:24:08 +01:00
Compare commits
18 Commits
v5.41.0-de
...
v5.41.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b83d41ca88 | ||
|
|
bfbffbd1f5 | ||
|
|
ee4755646b | ||
|
|
d1a12930c3 | ||
|
|
dfac836a8c | ||
|
|
6fa404331b | ||
|
|
8bcb95adcd | ||
|
|
8af70fe2d1 | ||
|
|
191b9169ff | ||
|
|
212418b8db | ||
|
|
7dbc744be0 | ||
|
|
150a3e7c60 | ||
|
|
5027943470 | ||
|
|
fa9e590b3a | ||
|
|
5823f0e982 | ||
|
|
f506a67e4a | ||
|
|
ed6e1155f2 | ||
|
|
8c229954d7 |
49
CHANGELOG.md
49
CHANGELOG.md
@@ -1,3 +1,52 @@
|
||||
# [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)
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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.11
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -26,7 +26,6 @@ internal val videoQualityItemOnClickFingerprint = fingerprint {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal val videoQualityMenuOptionsFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.STATIC)
|
||||
returns("[L")
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1266,8 +1266,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>
|
||||
|
||||
@@ -1265,8 +1265,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 funksionallığını bərpa edin</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>
|
||||
@@ -1447,16 +1448,16 @@ DeArrow haqqında ətraflı öyrənmək üçün bura toxun"</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>
|
||||
|
||||
@@ -1267,8 +1267,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>
|
||||
|
||||
@@ -1266,8 +1266,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>
|
||||
|
||||
@@ -1262,8 +1262,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>
|
||||
|
||||
@@ -1266,8 +1266,9 @@ To změní vzhled a funkce aplikace, ale mohou se objevit neznámé vedlejší e
|
||||
Pokud bude později vypnuta, doporučujeme vymazat data aplikace, aby se zabránilo chybám uživatelského rozhraní."</string>
|
||||
<string name="revanced_spoof_app_version_target_title">Cíl napodobení verze aplikace</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Obnovit nerozbalený panel akcí videa</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Obnovuje staré ikony Shorts přehrávače</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 – Obnovit staré ikony navigace</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Obnovit funkci přepisu</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Obnovuje staré ikony Shorts přehrávače</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 – Obnovit staré ikony navigace</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Změnit úvodní stránku</string>
|
||||
|
||||
@@ -19,8 +19,8 @@ Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<!-- <app id="shared"> -->
|
||||
<!-- <patch id="misc.checks.checkEnvironmentPatch"> -->
|
||||
<app id="shared">
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Kontrol mislykkedes</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Åbn officiel hjemmeside</string>
|
||||
<string name="revanced_check_environment_dialog_ignore_button">Ignorer</string>
|
||||
@@ -30,8 +30,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">Patched mere end 10 minutter siden</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_days">Patched for %s dage siden</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK byggedato er ødelagt</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.settings.settingsResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Indstillinger</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Er du sikker på, at du vil fortsætte?</string>
|
||||
<string name="revanced_settings_reset">Nulstil</string>
|
||||
@@ -80,8 +80,8 @@ For at oversætte nye sprog eller forbedre de eksisterende oversættelser, besø
|
||||
<string name="revanced_settings_about_links_header">Officielle links</string>
|
||||
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
|
||||
and changes made here must also be made there. -->
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.gms.gmsCoreSupportResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
<string name="microg_settings_title">GmsCore Indstillinger</string>
|
||||
<string name="microg_settings_summary">Indstillinger for GmsCore</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
@@ -99,8 +99,8 @@ Deaktivering af batterioptimeringer for MicroG vil ikke påvirke batteriforbruge
|
||||
|
||||
Tap på knappen Fortsæt, og tillad optimeringsændringer."</string>
|
||||
<string name="gms_core_dialog_continue_text">Fortsæt</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.fix.playback.spoofVideoStreamsPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_screen_title">Spoof videostreams</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Spoof klienten video streams for at forhindre afspilning problemer</string>
|
||||
<string name="revanced_spoof_video_streams_screen_title">Simuler videostreams</string>
|
||||
@@ -114,8 +114,8 @@ Hvis du er en YouTube Premium-bruger, er denne indstilling muligvis ikke påkræ
|
||||
Afspilning fungerer muligvis ikke"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Deaktivering af denne indstilling kan forårsage afspilningsproblemer.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">Standard klient</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.debugging.enableDebuggingPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">Fejlfinding</string>
|
||||
<string name="revanced_debug_screen_summary">Aktivér eller deaktiver fejlfindingsindstillinger</string>
|
||||
<string name="revanced_debug_title">Fejlfindingslogning</string>
|
||||
@@ -139,18 +139,18 @@ Du modtager ikke notifikationer om uventede hændelser."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Ryd fejlsøgningslogfiler</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Rydder alle gemte ReVanced-fejlsøgningslogfiler</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Logfiler ryddet</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.privacy.sanitizeSharingLinksPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Fjern sporingsforespørgselsparameter</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Sporingsparameteren er fjernet fra links</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Sporingsforespørgselsparameteren er ikke fjernet fra links</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">Skift delingslinks til youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">Delte links bruger youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">Delte links bruger music.youtube.com</string>
|
||||
<!-- </patch> -->
|
||||
<!-- </app> -->
|
||||
<!-- <app id="youtube"> -->
|
||||
<!-- <patch id="misc.settings.settingsPatch"> -->
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_screen_00_about_title">Om</string>
|
||||
<string name="revanced_settings_screen_01_ads_title">Annoncer</string>
|
||||
<string name="revanced_settings_screen_02_alt_thumbnails_title">Alternative miniaturebilleder</string>
|
||||
@@ -164,13 +164,13 @@ Du modtager ikke notifikationer om uventede hændelser."</string>
|
||||
<string name="revanced_restore_old_settings_menus_title">Gendan gamle indstillingsmenuer</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_on">Gamle indstillingsmenuer er vist</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_off">Gamle indstillingsmenuer er ikke vist</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.backgroundplayback.backgroundPlaybackPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Deaktiver baggrundsafspilning af Shorts</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Baggrundsafspilning af Shorts er deaktiveret</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Baggrundsafspilning af Shorts er aktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.debugging.enableDebuggingPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_protobuffer_title">Logprotokolbuffer</string>
|
||||
<string name="revanced_debug_protobuffer_summary_on">Fejlfindingslogge inkluderer protobuffer</string>
|
||||
<string name="revanced_debug_protobuffer_summary_off">Fejlfindingslogge inkluderer ikke protobuffer</string>
|
||||
@@ -179,8 +179,8 @@ Du modtager ikke notifikationer om uventede hændelser."</string>
|
||||
Dette kan hjælpe med at identificere komponenter, når der oprettes brugerdefinerede filtre.
|
||||
|
||||
Aktivering af dette vil dog også logge nogle brugerdata, såsom din IP-adresse."</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.general.hideLayoutComponentsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_hide_album_cards_title">Skjul albumkort</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Albumkort er skjult</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Albumkort vises</string>
|
||||
@@ -427,8 +427,8 @@ Begrænsninger
|
||||
<string name="revanced_hide_keyword_toast_invalid_conflicting">Nøgleord har modstridende erklæringer: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_length">Søgeordet er for kort og kræver anførselstegn: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_broad">Nøgleord vil skjule alle videoer: %s</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="ad.general.hideAdsResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="ad.general.hideAdsResourcePatch">
|
||||
<string name="revanced_hide_creator_store_shelf_title">Skjul butikshylde for skabere</string>
|
||||
<string name="revanced_hide_creator_store_shelf_summary_on">Opretterbutikshylde under videoafspiller er skjult</string>
|
||||
<string name="revanced_hide_creator_store_shelf_summary_off">Butikshylde for skaber under videoafspiller vises</string>
|
||||
@@ -463,18 +463,18 @@ Denne funktion er kun tilgængelig for ældre enheder"</string>
|
||||
<string name="revanced_hide_web_search_results_title">Skjul søgeresultater</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Websøgeresultater er skjult</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Websøgeresultater vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="ad.getpremium.hideGetPremiumPatch"> -->
|
||||
</patch>
|
||||
<patch id="ad.getpremium.hideGetPremiumPatch">
|
||||
<string name="revanced_hide_get_premium_title">Skjul YouTube Premium kampagner</string>
|
||||
<string name="revanced_hide_get_premium_summary_on">YouTube Premium kampagner under videoafspiller er skjult</string>
|
||||
<string name="revanced_hide_get_premium_summary_off">YouTube Premium kampagner under videoafspiller vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="ad.video.videoAdsPatch"> -->
|
||||
</patch>
|
||||
<patch id="ad.video.videoAdsPatch">
|
||||
<string name="revanced_hide_video_ads_title">Skjul videoannoncer</string>
|
||||
<string name="revanced_hide_video_ads_summary_on">Videoannoncer er skjult</string>
|
||||
<string name="revanced_hide_video_ads_summary_off">Videoannoncer vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.copyvideourl.copyVideoUrlResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
|
||||
<string name="revanced_share_copy_url_success">URL kopieret til udklipsholder</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL med tidsstempel kopieret</string>
|
||||
<string name="revanced_copy_video_url_title">Vis kopiér video URL knap</string>
|
||||
@@ -483,24 +483,24 @@ Denne funktion er kun tilgængelig for ældre enheder"</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Vis kopi tidsstempel URL knap</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Knappen vises. Tryk for at kopiere videoens URL med tidsstempel. Tryk og hold for at kopiere uden tidsstempel</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Knap vises ikke</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.dialog.removeViewerDiscretionDialogPatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Fjern visningsdialog</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_on">Dialog vil blive fjernet</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Dialog vil blive vist</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Dette går ikke uden om aldersbegrænsningen. Det accepterer bare det automatisk.</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.signintotv.disableSignInToTvPopupPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Deaktiver log ind på TV-pop op</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">Log ind på TV-pop op er deaktiveret</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">Log ind på TV-pop op er aktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.doubletap.disableDoubleTapActionsPatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
|
||||
<string name="revanced_disable_chapter_skip_double_tap_title">Deaktiver dobbeltklik kapitelspring</string>
|
||||
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Dobbeltklik kan aldrig udløse et spring til næste/forrige kapitel</string>
|
||||
<string name="revanced_disable_chapter_skip_double_tap_summary_off">Dobbeltklik kan lejlighedsvis udløse et spring til næste/forrige kapitel</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.downloads.downloadsResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.downloads.downloadsResourcePatch">
|
||||
<string name="revanced_external_downloader_screen_title">Eksterne downloads</string>
|
||||
<string name="revanced_external_downloader_screen_summary">Indstillinger for brug af en ekstern downloader</string>
|
||||
<string name="revanced_external_downloader_title">Vis ekstern download-knap</string>
|
||||
@@ -520,18 +520,18 @@ Denne funktion er kun tilgængelig for ældre enheder"</string>
|
||||
|
||||
Kontrollér, at pakkenavnet er korrekt, og at appen er installeret"</string>
|
||||
<string name="revanced_external_downloader_empty_warning">Pakkenavnet må ikke være tomt</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.seekbar.disablePreciseSeekingGesturePatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.disablePreciseSeekingGesturePatch">
|
||||
<string name="revanced_disable_precise_seeking_gesture_title">Deaktivér præcis søgemåde</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_on">Bevægelse er deaktiveret</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_off">Bevægelse er aktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.seekbar.enableSeekbarTappingPatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.enableSeekbarTappingPatch">
|
||||
<string name="revanced_seekbar_tapping_title">Aktivér tryk for at søge</string>
|
||||
<string name="revanced_seekbar_tapping_summary_on">Tryk for at søge er aktiveret</string>
|
||||
<string name="revanced_seekbar_tapping_summary_off">Tryk for at søge er deaktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.swipecontrols.swipeControlsResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">Aktivér lysstyrke-bevægelse</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">"Fuldskaermens lysstyrke-swipe er aktiveret
|
||||
|
||||
@@ -582,13 +582,13 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen"</string>
|
||||
<string name="revanced_swipe_change_video_title">Aktivér swipe for at skifte videoer</string>
|
||||
<string name="revanced_swipe_change_video_summary_on">Strygning i fuldskærmstilstand vil ændre til den næste/forrige video</string>
|
||||
<string name="revanced_swipe_change_video_summary_off">Strygning i fuldskærmstilstand vil ikke ændre til den næste/forrige video</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.autocaptions.autoCaptionsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.autocaptions.autoCaptionsPatch">
|
||||
<string name="revanced_disable_auto_captions_title">Deaktivér auto-billedtekster</string>
|
||||
<string name="revanced_disable_auto_captions_summary_on">Automatiske billedtekster er deaktiveret</string>
|
||||
<string name="revanced_disable_auto_captions_summary_off">Automatiske billedtekster er aktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.buttons.action.hideButtonsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">Handlingsknapper</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">Skjul eller vis knapper under videoer</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Deaktiver Like og Abonner-knappen glød</string>
|
||||
@@ -652,8 +652,8 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen"</string>
|
||||
<string name="revanced_hide_save_button_title">Skjul Gem</string>
|
||||
<string name="revanced_hide_save_button_summary_on">Knappen \"Gem\" er skjult</string>
|
||||
<string name="revanced_hide_save_button_summary_off">Knappen \"Gem\" vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.buttons.navigation.navigationButtonsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.navigation.navigationButtonsPatch">
|
||||
<string name="revanced_navigation_buttons_screen_title">Navigationsknapper</string>
|
||||
<string name="revanced_navigation_buttons_screen_summary">Skjul eller skift knapper i navigationsbjælken</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
|
||||
@@ -697,8 +697,8 @@ Hvis ændring af denne indstilling ikke træder i kraft, kan du prøve at skifte
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_title">Deaktiver mørk gennemsigtig linje</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">Navigationslinjen i mørk tilstand er ikke gennemsigtig</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">Mørk tilstand navigationslinjen er opak eller gennemsigtig</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">Udfyldningsmenu</string>
|
||||
<string name="revanced_hide_player_flyout_summary">Skjul eller vis spiller flyout menupunkter</string>
|
||||
<!-- 'Captions' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
@@ -759,8 +759,8 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">Skjul sidefod til videokvalitet</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Videokvalitetsmenuens sidefod er skjult</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Videokvalitet menu footer er vist</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<string name="revanced_hide_autoplay_button_title">Skjul knappen Automatisk afspilning</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_on">Automatisk spil-knap er skjult</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_off">Automatisk afspilningsknap vises</string>
|
||||
@@ -777,28 +777,28 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_title">Skjul Forrige & Næste knapper</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Knapper er skjult</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Knapper vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Skjul slutskærmkort</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Slutskærmskortene er skjult</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Kort til slutskærm vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
<string name="revanced_disable_fullscreen_ambient_mode_title">Deaktiver Ambient-tilstand i fuldskærm</string>
|
||||
<string name="revanced_disable_fullscreen_ambient_mode_summary_on">Omgivelsestilstand deaktiveret</string>
|
||||
<string name="revanced_disable_fullscreen_ambient_mode_summary_off">Omgivelsestilstand aktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.infocards.hideInfocardsResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.infocards.hideInfocardsResourcePatch">
|
||||
<string name="revanced_hide_info_cards_title">Skjul informationskort</string>
|
||||
<string name="revanced_hide_info_cards_summary_on">Info kort er skjult</string>
|
||||
<string name="revanced_hide_info_cards_summary_off">Info kort er vist</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.rollingnumber.disableRollingNumberAnimationPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.rollingnumber.disableRollingNumberAnimationPatch">
|
||||
<string name="revanced_disable_rolling_number_animations_title">Deaktivér animationer med rullenummer</string>
|
||||
<string name="revanced_disable_rolling_number_animations_summary_on">Rullende numre er ikke animeret</string>
|
||||
<string name="revanced_disable_rolling_number_animations_summary_off">Rullende numre er animeret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.seekbar.hideSeekbarPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.seekbar.hideSeekbarPatch">
|
||||
<string name="revanced_hide_seekbar_title">Skjul videoafspillerens søgelinje</string>
|
||||
<string name="revanced_hide_seekbar_summary_on">Videoafspillerens søgelinje er skjult</string>
|
||||
<string name="revanced_hide_seekbar_summary_off">Videoafspillerens søgelinje vises</string>
|
||||
@@ -806,8 +806,8 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_title">Skjul video-miniaturebilledernes søgelinje</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_on">Video-miniaturebilledernes søgelinje er skjult</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">Video-miniaturebilledernes søgelinje vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.shorts.hideShortsComponentsResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||
<string name="revanced_shorts_player_screen_title">Shorts-afspiller</string>
|
||||
<string name="revanced_shorts_player_screen_summary">Skjul eller vis Shorts-afspillerkomponenter</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
|
||||
@@ -920,48 +920,48 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_title">Skjul navigationslinje</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Navigationsbjælken er skjult</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Navigationsbjælken vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
<string name="revanced_end_screen_suggested_video_title">Skjul foreslået video på slutskærmen</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_on">"Foreslået video på slutskærmen er skjult, når automatisk afspilning er slået fra
|
||||
|
||||
Automatisk afspilning kan ændres i YouTube-indstillinger:
|
||||
Indstillinger → Afspilning → Afspil næste video automatisk"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">Foreslået video på slutskærmen vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||
<string name="revanced_hide_related_videos_overlay_title">Skjul overlay for relaterede videoer</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_on">Overlay for relaterede videoer i fuldskærm er skjult</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_off">Overlay for relaterede videoer i fuldskærm vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.hide.time.hideTimestampPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">Skjul tidsstempel på video</string>
|
||||
<string name="revanced_hide_timestamp_summary_on">Tidsstempel er skjult</string>
|
||||
<string name="revanced_hide_timestamp_summary_off">Tidsstempel er vist</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.panels.popup.playerPopupPanelsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||
<string name="revanced_hide_player_popup_panels_title">Skjul pop op- paneler</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Spiller popup paneler er skjult</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Spiller popup paneler vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.player.fullscreen.exitFullscreenPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.exitFullscreenPatch">
|
||||
<string name="revanced_exit_fullscreen_title">Afslut fuldskærmstilstand ved videoens afslutning</string>
|
||||
<string name="revanced_exit_fullscreen_entry_1">Deaktiveret</string>
|
||||
<string name="revanced_exit_fullscreen_entry_2">Portræt</string>
|
||||
<string name="revanced_exit_fullscreen_entry_3">Landskab</string>
|
||||
<string name="revanced_exit_fullscreen_entry_4">Portræt og landskab</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.player.fullscreen.openVideosFullscreen"> -->
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">Åbn videoer i fuldskærm portræt</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videoer åbne fuld skærm</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Videoer åbner ikke fuld skærm</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Spiller overlay gennemsigtighed</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">Gennemsigtighedsværdi mellem 0-100, hvor 0 er gennemsigtig</string>
|
||||
<string name="revanced_player_overlay_opacity_invalid_toast">Spiller overlay gennemsigtighed skal være mellem 0-100</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_ryd_failure_connection_timeout">Dislikerer midlertidigt ikke tilgængelig (API-timeout ud)</string>
|
||||
<string name="revanced_ryd_failure_connection_status_code">Dislikationer er ikke tilgængelige (status %d)</string>
|
||||
@@ -1009,13 +1009,13 @@ Begrænsning: Synes ikke godt om vises muligvis ikke i inkognitotilstand"</strin
|
||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary">Ingen klientrategrænser stødt på</string>
|
||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_non_zero_summary">Klient sats grænse stødt %d gange</string>
|
||||
<string name="revanced_ryd_statistics_millisecond_text">%d millisekunder</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.searchbar.wideSearchbarPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.searchbar.wideSearchbarPatch">
|
||||
<string name="revanced_wide_searchbar_title">Aktiver bred søgelinje</string>
|
||||
<string name="revanced_wide_searchbar_summary_on">Bred søgelinje er aktiveret</string>
|
||||
<string name="revanced_wide_searchbar_summary_off">Bred søgelinje er deaktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.seekbar.seekbarThumbnailsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.seekbar.seekbarThumbnailsPatch">
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_title">Aktiver miniaturer af høj kvalitet</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">Seekbar miniaturer er af høj kvalitet</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Seekbar miniaturer er af middel kvalitet</string>
|
||||
@@ -1029,8 +1029,8 @@ Denne funktion fungerer bedst med en videokvalitet på 720p eller lavere og ved
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Gendan gamle miniaturer på søgelinjen</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Seekbar miniaturer vises over søgelinjen</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Seekbar miniaturer vises i fuld skærm</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.sponsorblock.sponsorBlockResourcePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
|
||||
<string name="revanced_sb_enable_sb">Aktiver SponsorBloker</string>
|
||||
<string name="revanced_sb_enable_sb_sum">SponsorBlock er et crowdsourcet system, der springer irriterende dele af YouTube-videoer over</string>
|
||||
<string name="revanced_sb_appearance_category">Udseende</string>
|
||||
@@ -1241,8 +1241,8 @@ Er du klar til at indsende?"</string>
|
||||
<string name="revanced_sb_color_dot_label">Farve:</string>
|
||||
<string name="revanced_sb_about_title">Om</string>
|
||||
<string name="revanced_sb_about_api_summary">Data leveres af SponsorBlock API. Tryk her for at få flere oplysninger og se downloads til andre platforme</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.formfactor.changeFormFactorPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||
<string name="revanced_change_form_factor_title">Layout-formfaktor</string>
|
||||
<string name="revanced_change_form_factor_entry_1">Standard</string>
|
||||
<string name="revanced_change_form_factor_entry_2">Telefon</string>
|
||||
@@ -1256,8 +1256,8 @@ Tabletlayout
|
||||
Automotive-layout
|
||||
• Shorts åbnes i den almindelige afspiller
|
||||
• Feed er organiseret efter emner og kanaler"</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.spoofappversion.spoofAppVersionPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||
<string name="revanced_spoof_app_version_title">Spoof app-version</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Version-manipulering</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Version ikke spoofed</string>
|
||||
@@ -1268,10 +1268,11 @@ Dette ændrer appens udseende og funktioner, men ukendte bivirkninger kan foreko
|
||||
Hvis det senere slås fra, anbefales det at rydde app-dataene for at forhindre UI-fejl."</string>
|
||||
<string name="revanced_spoof_app_version_target_title">Spoof app version mål</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Gendan ikke-kollapset videohandlingslinje</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Gendan gamle Shorts player ikoner</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - Gendan gamle navigationsikoner</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.startpage.changeStartPagePatch"> -->
|
||||
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Gendan transkriptionsfunktionalitet</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Gendan gamle Shorts player ikoner</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - Gendan gamle navigationsikoner</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Skift startside</string>
|
||||
<string name="revanced_change_start_page_entry_default">Standard</string>
|
||||
<string name="revanced_change_start_page_entry_all_subscriptions">Alle abonnementer</string>
|
||||
@@ -1302,27 +1303,27 @@ Hvis det senere slås fra, anbefales det at rydde app-dataene for at forhindre U
|
||||
|
||||
Begrænsning: Brug af tilbage-knappen på værktøjslinjen fungerer muligvis ikke"</string>
|
||||
<string name="revanced_change_start_page_always_summary_off">Startsiden ændres kun ved appstart</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">Deaktivér genoptagelse af Shorts spiller</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts-afspilleren genoptages ikke ved app-start</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Kortspilleren vil genoptage ved app-opstart</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.shortsplayer.shortsPlayerTypePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||
<string name="revanced_shorts_player_type_title">Åbne Shorts med</string>
|
||||
<string name="revanced_shorts_player_type_shorts">Shorts-afspiller</string>
|
||||
<string name="revanced_shorts_player_type_regular_player">Standardafspiller</string>
|
||||
<string name="revanced_shorts_player_type_regular_player_fullscreen">Standardafspiller i fuld skærm</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.shortsautoplay.shortsAutoplayPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||
<string name="revanced_shorts_autoplay_title">Automatisk afspilning af Shorts</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shorts afspilles automatisk</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shorts gentages</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">Automatisk afspilning af Shorts i baggrunden</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_on">Shorts i baggrunden afspilles automatisk</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_off">Shorts i baggrunden gentages</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.miniplayer.miniplayerPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_screen_title">Mini-afspiller</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Skift stilen på den minimerede afspiller i appen</string>
|
||||
<string name="revanced_miniplayer_type_title">Type af miniplayer</string>
|
||||
@@ -1368,8 +1369,8 @@ Miniafspiller kan trækkes ud over skærmen til venstre eller højre"</string>
|
||||
<string name="revanced_miniplayer_opacity_title">Overlay uigennemsigtighed</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">Gennemsigtighedsværdi mellem 0-100, hvor 0 er gennemsigtig</string>
|
||||
<string name="revanced_miniplayer_opacity_invalid_toast">Miniplayer overlay gennemsigtighed skal være mellem 0-100</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.theme.themePatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
<string name="revanced_gradient_loading_screen_title">Aktiver gradient indlæsning af skærmen</string>
|
||||
<string name="revanced_gradient_loading_screen_summary_on">Indlæser skærmen vil have en gradient baggrund</string>
|
||||
<string name="revanced_gradient_loading_screen_summary_off">Indlæser skærmen vil have en solid baggrund</string>
|
||||
@@ -1384,23 +1385,23 @@ Miniafspiller kan trækkes ud over skærmen til venstre eller højre"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_title">Brugerdefineret accentfarve på søgelinje</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Søgelinjens accentfarve</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Ugyldig søgelinje farveværdi</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.branding.changeHeaderPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Sidehovedlogo</string>
|
||||
<string name="revanced_header_logo_entry_1">Standard</string>
|
||||
<string name="revanced_header_logo_entry_2">Normal</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimal</string>
|
||||
<string name="revanced_header_logo_entry_6">Brugerdefineret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Bypass billede region restriktioner</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Bruger billedvært yt4.ggpht.com</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Bruger original billedevært
|
||||
|
||||
Aktivering af dette kan løse manglende billeder, der er blokeret i nogle regioner"</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.thumbnails.alternativeThumbnailsPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
|
||||
<string name="revanced_alt_thumbnail_home_title">Hjem fane</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
|
||||
@@ -1435,33 +1436,33 @@ Tryk her for at lære mere om DeArrow"</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow er midlertidigt ikke tilgængelig (statuskode: %s)</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow er midlertidigt ikke tilgængelig</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.announcements.announcementsPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">Vis ReVanced meddelelser</string>
|
||||
<string name="revanced_announcements_summary_on">Meddelelser ved opstart vises</string>
|
||||
<string name="revanced_announcements_summary_off">Meddelelser ved opstart vises ikke</string>
|
||||
<string name="revanced_announcements_enabled_summary">Vis meddelelser ved opstart</string>
|
||||
<string name="revanced_announcements_connection_failed">Kunne ikke forbinde til udbyder af annonceringer</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">Luk</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Advarsel</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Din urhistorik gemmes ikke.<br><br>Dette skyldes sandsynligvis en DNS-annonceblokker eller netværksproxy.<br><br>For at løse dette, whitelist <b>s.youtube.com</b> eller slå alle DNS-blokkere og fuldmagter fra.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Vis ikke igen</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.loopvideo.loopVideoPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
<string name="revanced_loop_video_title">Aktiver loop-video</string>
|
||||
<string name="revanced_loop_video_summary_on">Videoen vil loope</string>
|
||||
<string name="revanced_loop_video_summary_off">Videoen vil ikke loope</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.loopvideo.button.loopVideoButtonPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
<string name="revanced_loop_video_button_title">Vis knap for loop-video</string>
|
||||
<string name="revanced_loop_video_button_summary_on">Knappen vises</string>
|
||||
<string name="revanced_loop_video_button_summary_off">Knappen vises ikke</string>
|
||||
<string name="revanced_loop_video_button_toast_on">Loop-video er slået til</string>
|
||||
<string name="revanced_loop_video_button_toast_off">Loop-video er slået fra</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Spoof enhedens dimensioner</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Enhedens dimensioner er forfalsket
|
||||
|
||||
@@ -1470,8 +1471,8 @@ Højere videokvalitet kan låses op, men du kan opleve videoafspilningshakkethed
|
||||
|
||||
Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Aktivering af dette kan forårsage videoafspilning stuttering, værre batterilevetid og ukendte bivirkninger.</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.hapticfeedback.disableHapticFeedbackPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.hapticfeedback.disableHapticFeedbackPatch">
|
||||
<string name="revanced_disable_haptic_feedback_title">Haptisk feedback</string>
|
||||
<string name="revanced_disable_haptic_feedback_summary">Skift haptisk feedback</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_title">Deaktivér haptics for kapitler</string>
|
||||
@@ -1486,28 +1487,28 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_title">Deaktivér zoom haptics</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_summary_on">Zoom haptics er deaktiveret</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_summary_off">Zoom haptics er aktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.gms.accountCredentialsInvalidTextPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Hvis du for nylig har ændret dine kontooplysninger, skal du afinstallere og geninstallere MicroG.</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.links.bypassURLRedirectsPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Bypass URL omdirigeringer</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">URL omdirigeringer er omgået</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_off">URL omdirigeringer er ikke omgået</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.links.openLinksExternallyPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
<string name="revanced_external_browser_title">Åbn links i browser</string>
|
||||
<string name="revanced_external_browser_summary_on">Åbner links i ekstern browser</string>
|
||||
<string name="revanced_external_browser_summary_off">Åbner links i browser i appen</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="video.audio.forceOriginalAudioPatch"> -->
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Tving originalt lydsprog</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Bruger originalt lydsprog</string>
|
||||
<string name="revanced_force_original_audio_summary_off">Brug standard lyd</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<string name="revanced_force_original_audio_not_available">For at bruge denne funktion skal du ændre \"Forfalsk videostreams\" til en hvilken som helst klient undtagen Android Studio</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="video.quality.rememberVideoQualityPatch"> -->
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as 'revanced_custom_playback_speeds_auto'. -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisk</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Husk ændringer i videokvalitet</string>
|
||||
@@ -1527,18 +1528,18 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="revanced_remember_video_quality_wifi">Wi-Fi</string>
|
||||
<string name="revanced_remember_video_quality_toast">Ændrede standard %1$s kvalitet til: %2$s</string>
|
||||
<string name="revanced_remember_video_quality_toast_shorts">Ændrede Shorts %1$s kvalitet til: %2$s</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="video.speed.button.playbackSpeedButtonPatch"> -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Vis hastigheds dialogknap</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Knappen vises. Tryk og hold for at nulstille afspilningshastigheden til standard.</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Knap vises ikke</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="video.quality.button.videoQualityDialogButtonPatch"> -->
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Vis videokvalitetsknap</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Knap vises. Tryk og hold nede for at nulstille kvaliteten til standard</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Knappen vises ikke</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="video.speed.custom.customPlaybackSpeedPatch"> -->
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Tilpasset afspilningshastighed menu</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">Tilpasset hastighed menu er vist</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">Brugerdefineret hastighedsmenu vises ikke</string>
|
||||
@@ -1552,8 +1553,8 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Automatisk</string>
|
||||
<string name="revanced_speed_tap_and_hold_title">Brugerdefineret hastighed, når du holder den nede</string>
|
||||
<string name="revanced_speed_tap_and_hold_summary">Afspilningshastighed mellem 0-8</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="video.speed.remember.rememberPlaybackSpeedPatch"> -->
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
<string name="revanced_remember_playback_speed_last_selected_title">Husk ændringer i afspilningshastighed</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_on">Ændring af afspilningshastighed gælder for alle videoer</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_off">Ændringerne i afspilningshastighed gælder kun for den aktuelle video</string>
|
||||
@@ -1562,23 +1563,23 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">Meddelelse vises ikke, når standardafspilningshastigheden ændres</string>
|
||||
<string name="revanced_playback_speed_default_title">Standard afspilningshastighed</string>
|
||||
<string name="revanced_remember_playback_speed_toast">Ændrede standardhastighed til: %s</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="video.hdr.disableHdrPatch"> -->
|
||||
</patch>
|
||||
<patch id="video.hdr.disableHdrPatch">
|
||||
<string name="revanced_disable_hdr_video_title">Deaktiver HDR-video</string>
|
||||
<string name="revanced_disable_hdr_video_summary_on">HDR-video er deaktiveret</string>
|
||||
<string name="revanced_disable_hdr_video_summary_off">HDR-video er aktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="video.quality.advancedVideoQualityMenuPatch"> -->
|
||||
</patch>
|
||||
<patch id="video.quality.advancedVideoQualityMenuPatch">
|
||||
<string name="revanced_advanced_video_quality_menu_title">Vis avanceret menu for videokvalitet</string>
|
||||
<string name="revanced_advanced_video_quality_menu_summary_on">Avanceret menu for videokvalitet vises</string>
|
||||
<string name="revanced_advanced_video_quality_menu_summary_off">Avanceret menu for videokvalitet vises ikke</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.seekbar.enableSlideToSeekPatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
<string name="revanced_slide_to_seek_title">Aktivér dias for at søge</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">Dias for at søge er aktiveret</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Dias til søgning er ikke aktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.fix.playback.spoofVideoStreamsPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">Bivirkninger ved spoofing</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Eksperimentel klient og kan stoppe med at fungere når som helst</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Videoen kan stoppe ved 1:00, eller er muligvis ikke tilgængelig i visse regioner</string>
|
||||
@@ -1595,37 +1596,37 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_language_not_available">For at vælge et specifikt lydsprog, slå \'Gennemtving originalt lydsprog\' fra</string>
|
||||
<string name="revanced_spoof_video_streams_language_android_studio">Valg af streaming-sprog er ikke tilgængeligt med Android Studio</string>
|
||||
<!-- </patch> -->
|
||||
<!-- </app> -->
|
||||
<!-- <app id="music"> -->
|
||||
<!-- <patch id="misc.settings.settingsPatch"> -->
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Om</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Annoncer</string>
|
||||
<string name="revanced_settings_music_screen_2_general_title">Generelt</string>
|
||||
<string name="revanced_settings_music_screen_3_player_title">Afspiller</string>
|
||||
<string name="revanced_settings_music_screen_4_misc_title">Diverse</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="ad.video.hideVideoAdsPatch"> -->
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
<string name="revanced_music_hide_video_ads_title">Skjul videoannoncer</string>
|
||||
<string name="revanced_music_hide_video_ads_summary_on">Videoannoncer er skjult</string>
|
||||
<string name="revanced_music_hide_video_ads_summary_off">Videoannoncer vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="interaction.permanentrepeat.permanentRepeatPatch"> -->
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
<string name="revanced_music_play_permanent_repeat_title">Aktiver permanent gentagelse</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Permanent gentagelse er aktiveret</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Permanent gentagelse er deaktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.castbutton.hideCastButton"> -->
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<string name="revanced_music_hide_cast_button_title">Skjul cast-knap</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Cast-knappen er skjult</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Cast-knappen vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.compactheader.hideCategoryBar"> -->
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Skjul kategorilinje</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Kategorilinjen er skjult</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kategorilinjen vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.navigationbar.navigationBarPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Navigationslinje</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Skjul eller skift navigationslinjeknapper</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
@@ -1654,56 +1655,56 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_title">Skjul etiketter for navigationsknapper</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_summary_on">Etiketter er skjult</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_summary_off">Etiketter vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.premium.hideGetPremiumPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.premium.hideGetPremiumPatch">
|
||||
<string name="revanced_music_hide_get_premium_label_title">Skjul \'Få Music Premium\'-etiket</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_on">Etiketten er skjult</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_off">Etiketten vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="layout.upgradebutton.hideUpgradeButtonPatch"> -->
|
||||
</patch>
|
||||
<patch id="layout.upgradebutton.hideUpgradeButtonPatch">
|
||||
<string name="revanced_music_hide_upgrade_button_title">Skjul opgraderingsknap</string>
|
||||
<string name="revanced_music_hide_upgrade_button_summary_on">Knappen er skjult</string>
|
||||
<string name="revanced_music_hide_upgrade_button_summary_off">Knappen vises</string>
|
||||
<!-- </patch> -->
|
||||
<!-- </app> -->
|
||||
<!-- <app id="twitch"> -->
|
||||
<!-- <patch id="ad.audio.audioAdsPatch"> -->
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
<patch id="ad.audio.audioAdsPatch">
|
||||
<string name="revanced_block_audio_ads_title">Blokér lydannoncer</string>
|
||||
<string name="revanced_block_audio_ads_summary_on">Lydannoncer er blokeret</string>
|
||||
<string name="revanced_block_audio_ads_summary_off">Lydannoncer er ublokeret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="ad.embedded.embeddedAdsPatch"> -->
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s er ikke tilgængelig, annoncer vises muligvis. Prøv at skifte annonceblokeringstjeneste i indstillinger.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s returnerede en fejl, annoncer vises muligvis. Prøv at skifte annonceblokeringstjeneste i indstillinger.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Bloker indlejrede videoannoncer</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Deaktiveret</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Lysende proxy</string>
|
||||
<string name="revanced_block_embedded_ads_entry_3">PurpleAdBlock-proxy</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="ad.video.videoAdsPatch"> -->
|
||||
</patch>
|
||||
<patch id="ad.video.videoAdsPatch">
|
||||
<string name="revanced_block_video_ads_title">Blokér videoannoncer</string>
|
||||
<string name="revanced_block_video_ads_summary_on">Videoreklamer er blokeret</string>
|
||||
<string name="revanced_block_video_ads_summary_off">Videoannoncer er ublokerede</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="chat.antidelete.showDeletedMessagesPatch"> -->
|
||||
</patch>
|
||||
<patch id="chat.antidelete.showDeletedMessagesPatch">
|
||||
<string name="revanced_deleted_msg">Meddelelse slettet</string>
|
||||
<string name="revanced_show_deleted_messages_title">Vis slettede beskeder</string>
|
||||
<string name="revanced_show_deleted_messages_entry_1">Vis ikke slettede beskeder</string>
|
||||
<string name="revanced_show_deleted_messages_entry_2">Skjul slettede beskeder bag en spoiler</string>
|
||||
<string name="revanced_show_deleted_messages_entry_3">Vis slettede beskeder som krydset tekst</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="chat.autoclaim.autoClaimChannelPointsPatch"> -->
|
||||
</patch>
|
||||
<patch id="chat.autoclaim.autoClaimChannelPointsPatch">
|
||||
<string name="revanced_auto_claim_channel_points_title">Auto-hævde Kanalpunkter</string>
|
||||
<string name="revanced_auto_claim_channel_points_summary_on">Kanalpunkter afhentes automatisk</string>
|
||||
<string name="revanced_auto_claim_channel_points_summary_off">Kanalpunkter afhentes ikke automatisk</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="debug.debugModePatch"> -->
|
||||
</patch>
|
||||
<patch id="debug.debugModePatch">
|
||||
<!-- Twitch specific internal debug mode, and not the same as 'revanced_debug_title'. -->
|
||||
<string name="revanced_twitch_debug_mode_title">Aktiver Twitch-fejlfindingstilstand</string>
|
||||
<string name="revanced_twitch_debug_mode_summary_on">Twitch-fejlfindingstilstand er aktiveret (ikke anbefalet)</string>
|
||||
<string name="revanced_twitch_debug_mode_summary_off">Twitch-fejlfindingstilstand er deaktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- <patch id="misc.settings.settingsPatch"> -->
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings">Vigtigste Indstillinger</string>
|
||||
<string name="revanced_about_title">Om</string>
|
||||
<string name="revanced_about_summary">Om ReVanced</string>
|
||||
@@ -1720,6 +1721,6 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="revanced_twitch_debug_title">Debug logning</string>
|
||||
<string name="revanced_twitch_debug_summary_on">Debug logs er aktiveret</string>
|
||||
<string name="revanced_twitch_debug_summary_off">Debug logs er deaktiveret</string>
|
||||
<!-- </patch> -->
|
||||
<!-- </app> -->
|
||||
</patch>
|
||||
</app>
|
||||
</resources>
|
||||
|
||||
@@ -1263,8 +1263,9 @@ Dadurch ändert sich das Erscheinungsbild und die Funktionen der App, es können
|
||||
Wenn Sie die Funktion später deaktivieren, wird empfohlen, die App-Daten zu löschen, um UI-Fehler zu vermeiden."</string>
|
||||
<string name="revanced_spoof_app_version_target_title">Spoof-App-Versionsziel</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Nicht eingeklappte Video-Aktionsleiste wiederherstellen</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Alte Shorts Spielersymbole wiederherstellen</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - Alte Navigations-Symbole wiederherstellen</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Funktionalität der Transkription wiederherstellen</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Alte Shorts Spielersymbole wiederherstellen</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - Alte Navigations-Symbole wiederherstellen</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Startseite ändern</string>
|
||||
|
||||
@@ -1267,8 +1267,9 @@ Second \"item\" text"</string>
|
||||
Αν αργότερα απενεργοποιηθεί, συνιστάται η εκκαθάριση δεδομένων της εφαρμογής για την αποφυγή σφαλμάτων 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>
|
||||
@@ -1447,16 +1448,16 @@ Second \"item\" text"</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>
|
||||
<string name="revanced_loop_video_title">Αυτόματη επανάληψη βίντεο</string>
|
||||
<string name="revanced_loop_video_summary_on">Το βίντεο θα αναπαράγεται σε επανάληψη</string>
|
||||
<string name="revanced_loop_video_summary_off">Το βίντεο δεν θα επαναληφθεί</string>
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
<string name="revanced_loop_video_button_title">Εμφάνιση κουμπιού επανάληψης βίντεο</string>
|
||||
<string name="revanced_loop_video_button_summary_on">Εμφανίζεται</string>
|
||||
<string name="revanced_loop_video_button_summary_on">Το κουμπί εμφανίζεται</string>
|
||||
<string name="revanced_loop_video_button_summary_off">Το κουμπί δεν εμφανίζεται</string>
|
||||
<string name="revanced_loop_video_button_toast_on">Η επανάληψη βίντεο είναι ενεργή</string>
|
||||
<string name="revanced_loop_video_button_toast_off">Η επανάληψη βίντεο είναι ανενεργή}]}],</string>
|
||||
<string name="revanced_loop_video_button_toast_on">Η επανάληψη βίντεο είναι ενεργοποιημένη</string>
|
||||
<string name="revanced_loop_video_button_toast_off">Η επανάληψη βίντεο είναι απενεργοποιημένη</string>
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Παραποίηση διαστάσεων συσκευής</string>
|
||||
@@ -1578,7 +1579,7 @@ Second \"item\" text"</string>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">Παρενέργειες παραποίησης</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Πειραματικός πελάτης και μπορεί να σταματήσει να λειτουργεί ανά πάσα στιγμή</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Το βίντεο ενδέχεται να σταματήσει στο 1:00 ή να μην είναι διαθέσιμο σε ορισμένες περιοχές</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Το βίντεο μπορεί να σταματήσει στο 1:00 ή να μην είναι διαθέσιμο σε ορισμένες περιοχές</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• Το μενού «Κομμάτι ήχου» λείπει</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• Δεν υπάρχει ο κωδικοποιητής βίντεο AV1</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_stable_volume">• Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη</string>
|
||||
|
||||
@@ -1257,8 +1257,9 @@ Esto cambiará la apariencia y las características de la aplicación, pero pued
|
||||
Si se desactiva posteriormente, se recomienda borrar los datos de la aplicación para evitar errores en la interfaz de usuario."</string>
|
||||
<string name="revanced_spoof_app_version_target_title">Versión objetiva de aplicación falsificada</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Restaurar barra de acciones de vídeo no colapsada</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Restaurar iconos antiguos del reproductor de Shorts</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - Restaurar iconos de navegación antiguos</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Restaurar la funcionalidad de la transcripción</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Restaurar iconos antiguos del reproductor de Shorts</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - Restaurar iconos de navegación antiguos</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Cambiar página de inicio</string>
|
||||
|
||||
@@ -1266,8 +1266,9 @@ See muudab rakenduse välimust ja funktsioone, kuid võivad esineda tundmatud k
|
||||
Kui see hiljem välja lülitatakse, on soovitatav rakenduse andmed kustutada, et vältida kasutajaliidese vigu."</string>
|
||||
<string name="revanced_spoof_app_version_target_title">Võltsitud rakenduse versiooni siht</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Taasta mittekokkuvarisenud video tegevusriba</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Taastage vanad Shortsi esitajaikoonid</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 – Taasta vanad navigeerimisikoonid</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Taasta transkriptsioonifunktsionaalsus</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Taastage vanad Shortsi esitajaikoonid</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 – Taasta vanad navigeerimisikoonid</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Muuda alguslehte</string>
|
||||
|
||||
@@ -1266,8 +1266,9 @@ Tämä muuttaa sovelluksen ulkoasua ja ominaisuuksia, mutta tuntemattomia sivuva
|
||||
Jos tämä poistetaan myöhemmin käytöstä, on suositeltavaa tyhjentää sovelluksen tiedot käyttöliittymävirheiden välttämiseksi."</string>
|
||||
<string name="revanced_spoof_app_version_target_title">Naamioitava kohdeversio</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Palauta laajennettu videon toimintopalkki</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">19.35.36 - Palauta vanhat Shorts-soittimen kuvakkeet</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.01.34 - Palauta vanhat navigointikuvakkeet</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Palauta transkription toiminnallisuus</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Palauta vanhat Shorts-soittimen kuvakkeet</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - Palauta vanhat navigointikuvakkeet</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Vaihda aloitussivua</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user