mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-07 18:03:55 +01:00
Compare commits
24 Commits
v5.41.0-de
...
v5.41.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee4755646b | ||
|
|
d1a12930c3 | ||
|
|
dfac836a8c | ||
|
|
6fa404331b | ||
|
|
8bcb95adcd | ||
|
|
8af70fe2d1 | ||
|
|
191b9169ff | ||
|
|
212418b8db | ||
|
|
7dbc744be0 | ||
|
|
150a3e7c60 | ||
|
|
5027943470 | ||
|
|
fa9e590b3a | ||
|
|
5823f0e982 | ||
|
|
f506a67e4a | ||
|
|
ed6e1155f2 | ||
|
|
8c229954d7 | ||
|
|
c5eb88bbf6 | ||
|
|
ef514017f4 | ||
|
|
c72d99518c | ||
|
|
772df6eb73 | ||
|
|
dfb5407e67 | ||
|
|
6d5f6ecdd2 | ||
|
|
a0a62ddad2 | ||
|
|
512e50e892 |
63
CHANGELOG.md
63
CHANGELOG.md
@@ -1,3 +1,66 @@
|
||||
# [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)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Instagram - Limit feed to followed profiles:** Preserve favorites feed ([#5963](https://github.com/ReVanced/revanced-patches/issues/5963)) ([ef51401](https://github.com/ReVanced/revanced-patches/commit/ef514017f46025d9aef6884424caeb0670514e7a))
|
||||
|
||||
# [5.41.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.2...v5.41.0-dev.3) (2025-09-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Loop video:** Add player button to change loop video state ([#5961](https://github.com/ReVanced/revanced-patches/issues/5961)) ([dfb5407](https://github.com/ReVanced/revanced-patches/commit/dfb5407e67222e80e23c8935e04b6dbf1a43d757))
|
||||
|
||||
# [5.41.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.1...v5.41.0-dev.2) (2025-09-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Update client side effects summary text ([a0a62dd](https://github.com/ReVanced/revanced-patches/commit/a0a62ddad26cfab3e04907fae5532e1ba1fdf710))
|
||||
|
||||
# [5.41.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.40.1-dev.1...v5.41.0-dev.1) (2025-09-21)
|
||||
|
||||
|
||||
|
||||
@@ -10,9 +10,17 @@ public class LimitFeedToFollowedProfiles {
|
||||
* Injection point.
|
||||
*/
|
||||
public static Map<String, String> setFollowingHeader(Map<String, String> requestHeaderMap) {
|
||||
String paginationHeaderName = "pagination_source";
|
||||
|
||||
// Patch the header only if it's trying to fetch the default feed
|
||||
String currentHeader = requestHeaderMap.get(paginationHeaderName);
|
||||
if (currentHeader != null && !currentHeader.equals("feed_recs")) {
|
||||
return requestHeaderMap;
|
||||
}
|
||||
|
||||
// Create new map as original is unmodifiable.
|
||||
Map<String, String> patchedRequestHeaderMap = new HashMap<>(requestHeaderMap);
|
||||
patchedRequestHeaderMap.put("pagination_source", "following");
|
||||
patchedRequestHeaderMap.put(paginationHeaderName, "following");
|
||||
return patchedRequestHeaderMap;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 String restartDialogTitle, restartDialogMessage, restartDialogButtonText, confirmDialogTitle;
|
||||
|
||||
private final SharedPreferences.OnSharedPreferenceChangeListener listener = (sharedPreferences, str) -> {
|
||||
try {
|
||||
@@ -152,6 +152,7 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
||||
);
|
||||
|
||||
dialogPair.first.setOnDismissListener(d -> showingUserDialogMessage = false);
|
||||
dialogPair.first.setCancelable(false);
|
||||
|
||||
// Show the dialog.
|
||||
dialogPair.first.show();
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class AutoRepeatPatch {
|
||||
//Used by app.revanced.patches.youtube.layout.autorepeat.patch.AutoRepeatPatch
|
||||
public static boolean shouldAutoRepeat() {
|
||||
return Settings.AUTO_REPEAT.get();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class LoopVideoPatch {
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static boolean shouldLoopVideo() {
|
||||
return Settings.LOOP_VIDEO.get();
|
||||
}
|
||||
}
|
||||
@@ -341,9 +341,9 @@ public class Settings extends BaseSettings {
|
||||
// Miscellaneous
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
|
||||
public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false);
|
||||
public static final BooleanSetting AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
|
||||
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);
|
||||
@@ -444,28 +444,30 @@ public class Settings extends BaseSettings {
|
||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFFFF", false, false);
|
||||
|
||||
// Deprecated migrations
|
||||
private static final BooleanSetting DEPRECATED_AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
|
||||
private static final IntegerSetting DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127);
|
||||
private static final StringSetting DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033");
|
||||
private static final StringSetting DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033");
|
||||
private static final BooleanSetting DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE);
|
||||
private static final BooleanSetting DEPRECATED_RESTORE_OLD_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_restore_old_video_quality_menu", TRUE);
|
||||
private static final BooleanSetting DEPRECATED_AUTO_CAPTIONS = new BooleanSetting("revanced_auto_captions", FALSE);
|
||||
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_SPONSOR_OPACITY = new FloatSetting("sb_sponsor_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_SELF_PROMO_OPACITY = new FloatSetting("sb_selfpromo_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_INTERACTION_OPACITY = new FloatSetting("sb_interaction_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_HIGHLIGHT_OPACITY = new FloatSetting("sb_highlight_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_HOOK_OPACITY = new FloatSetting("sb_hook_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_INTRO_OPACITY = new FloatSetting("sb_intro_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_OUTRO_OPACITY = new FloatSetting("sb_outro_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_PREVIEW_OPACITY = new FloatSetting("sb_preview_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_FILLER_OPACITY = new FloatSetting("sb_filler_opacity", 0.8f, false, false);
|
||||
public static final FloatSetting DEPRECATED_SB_CATEGORY_MUSIC_OFFTOPIC_OPACITY = new FloatSetting("sb_music_offtopic_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_SPONSOR_OPACITY = new FloatSetting("sb_sponsor_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_SELF_PROMO_OPACITY = new FloatSetting("sb_selfpromo_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_INTERACTION_OPACITY = new FloatSetting("sb_interaction_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_HIGHLIGHT_OPACITY = new FloatSetting("sb_highlight_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_HOOK_OPACITY = new FloatSetting("sb_hook_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_INTRO_OPACITY = new FloatSetting("sb_intro_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_OUTRO_OPACITY = new FloatSetting("sb_outro_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_PREVIEW_OPACITY = new FloatSetting("sb_preview_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_FILLER_OPACITY = new FloatSetting("sb_filler_opacity", 0.8f, false, false);
|
||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_MUSIC_OFFTOPIC_OPACITY = new FloatSetting("sb_music_offtopic_opacity", 0.8f, false, false);
|
||||
|
||||
static {
|
||||
// region Migration
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_AUTO_REPEAT, LOOP_VIDEO);
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
||||
migrateOldSettingToNew(DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN, HIDE_END_SCREEN_SUGGESTED_VIDEO);
|
||||
|
||||
@@ -80,24 +80,29 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
||||
Logger.printDebug(() -> "Updating spoof stream side effects preference");
|
||||
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
|
||||
|
||||
setTitle(str("revanced_spoof_video_streams_about_title"));
|
||||
String summary = str("revanced_spoof_video_streams_about_no_audio_tracks");
|
||||
|
||||
String summary = str(clientType == ClientType.IPADOS
|
||||
? "revanced_spoof_video_streams_about_ipados_summary"
|
||||
// Same base side effects for Android VR, Android Studio, and visionOS.
|
||||
: "revanced_spoof_video_streams_about_android_summary");
|
||||
switch (clientType) {
|
||||
case ANDROID_VR_1_61_48 ->
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
|
||||
case ANDROID_CREATOR ->
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_av1")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio");
|
||||
case IPADOS ->
|
||||
summary = str("revanced_spoof_video_streams_about_playback_failure")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||
case VISIONOS ->
|
||||
summary = str("revanced_spoof_video_streams_about_experimental")
|
||||
+ '\n' + summary
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||
}
|
||||
|
||||
if (clientType == ClientType.IPADOS) {
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||
} else if (clientType == ClientType.VISIONOS) {
|
||||
summary = str("revanced_spoof_video_streams_about_experimental")
|
||||
+ '\n' + summary
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_kids_videos");
|
||||
} else if (clientType == ClientType.ANDROID_CREATOR) {
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_av1")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_kids_videos");
|
||||
// Only iPadOS can play children videos in incognito, but it commonly fails at 1 minute
|
||||
// or doesn't even start playback at all. List the side effect for other clients
|
||||
// since they will fall over to iPadOS.
|
||||
if (clientType != ClientType.IPADOS) {
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_kids_videos");
|
||||
}
|
||||
|
||||
// Use better formatting for bullet points.
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package app.revanced.extension.youtube.videoplayer;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class LoopVideoButton {
|
||||
@Nullable
|
||||
private static PlayerControlButton instance;
|
||||
|
||||
private static final int LOOP_VIDEO_ON = Utils.getResourceIdentifierOrThrow(
|
||||
"revanced_loop_video_button_on", "drawable");
|
||||
private static final int LOOP_VIDEO_OFF = Utils.getResourceIdentifierOrThrow(
|
||||
"revanced_loop_video_button_off", "drawable");
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void initializeButton(View controlsView) {
|
||||
try {
|
||||
instance = new PlayerControlButton(
|
||||
controlsView,
|
||||
"revanced_loop_video_button",
|
||||
null,
|
||||
Settings.LOOP_VIDEO_BUTTON::get,
|
||||
v -> updateButtonAppearance(),
|
||||
null
|
||||
);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initializeButton failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point.
|
||||
*/
|
||||
public static void setVisibilityNegatedImmediate() {
|
||||
if (instance != null) instance.setVisibilityNegatedImmediate();
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point.
|
||||
*/
|
||||
public static void setVisibilityImmediate(boolean visible) {
|
||||
if (instance != null) instance.setVisibilityImmediate(visible);
|
||||
}
|
||||
|
||||
/**
|
||||
* injection point.
|
||||
*/
|
||||
public static void setVisibility(boolean visible, boolean animated) {
|
||||
if (instance != null) instance.setVisibility(visible, animated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the button's appearance.
|
||||
*/
|
||||
private static void updateButtonAppearance() {
|
||||
if (instance == null) return;
|
||||
|
||||
try {
|
||||
Utils.verifyOnMainThread();
|
||||
|
||||
final boolean currentState = Settings.LOOP_VIDEO.get();
|
||||
final boolean newState = !currentState;
|
||||
Settings.LOOP_VIDEO.save(newState);
|
||||
|
||||
instance.setIcon(newState
|
||||
? LOOP_VIDEO_ON
|
||||
: LOOP_VIDEO_OFF);
|
||||
Utils.showToastShort(str(newState
|
||||
? "revanced_loop_video_button_toast_on"
|
||||
: "revanced_loop_video_button_toast_off"));
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "updateButtonAppearance failure", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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.1
|
||||
version = 5.41.0-dev.10
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -1610,6 +1618,10 @@ public final class app/revanced/patches/youtube/misc/litho/filter/LithoFilterPat
|
||||
public static final fun getLithoFilterPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/misc/loopvideo/LoopVideoPatchKt {
|
||||
public static final fun getLoopVideoPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/misc/navigation/NavigationBarHookPatchKt {
|
||||
public static field hookNavigationButtonCreated Lkotlin/jvm/functions/Function1;
|
||||
public static final fun getHookNavigationButtonCreated ()Lkotlin/jvm/functions/Function1;
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -9,8 +9,8 @@ import app.revanced.patches.youtube.misc.playercontrols.playerControlsPatch
|
||||
import app.revanced.patches.youtube.misc.playertype.playerTypeHookPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.shared.autoRepeatFingerprint
|
||||
import app.revanced.patches.youtube.shared.autoRepeatParentFingerprint
|
||||
import app.revanced.patches.youtube.shared.loopVideoFingerprint
|
||||
import app.revanced.patches.youtube.shared.loopVideoParentFingerprint
|
||||
import app.revanced.util.addInstructionsAtControlFlowLabel
|
||||
|
||||
@Suppress("unused")
|
||||
@@ -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",
|
||||
@@ -50,7 +49,7 @@ internal val exitFullscreenPatch = bytecodePatch(
|
||||
ListPreference("revanced_exit_fullscreen")
|
||||
)
|
||||
|
||||
autoRepeatFingerprint.match(autoRepeatParentFingerprint.originalClassDef).method.apply {
|
||||
loopVideoFingerprint.match(loopVideoParentFingerprint.originalClassDef).method.apply {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
implementation!!.instructions.lastIndex,
|
||||
"invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->endOfVideoReached()V",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,62 +1,9 @@
|
||||
package app.revanced.patches.youtube.misc.autorepeat
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.instructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
|
||||
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.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.shared.autoRepeatFingerprint
|
||||
import app.revanced.patches.youtube.shared.autoRepeatParentFingerprint
|
||||
import app.revanced.patches.youtube.misc.loopvideo.loopVideoPatch
|
||||
|
||||
// TODO: Rename this patch to AlwaysRepeatPatch (as well as strings and references in the extension).
|
||||
val autoRepeatPatch = bytecodePatch(
|
||||
name = "Always repeat",
|
||||
description = "Adds an option to always repeat videos when they end.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"20.07.39",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "misc.autorepeat.autoRepeatPatch")
|
||||
|
||||
PreferenceScreen.MISC.addPreferences(
|
||||
SwitchPreference("revanced_auto_repeat"),
|
||||
)
|
||||
|
||||
autoRepeatFingerprint.match(autoRepeatParentFingerprint.originalClassDef).method.apply {
|
||||
val playMethod = autoRepeatParentFingerprint.method
|
||||
val index = instructions.lastIndex
|
||||
|
||||
// Remove return-void.
|
||||
removeInstruction(index)
|
||||
// Add own instructions there.
|
||||
addInstructionsWithLabels(
|
||||
index,
|
||||
"""
|
||||
invoke-static {}, Lapp/revanced/extension/youtube/patches/AutoRepeatPatch;->shouldAutoRepeat()Z
|
||||
move-result v0
|
||||
if-eqz v0, :noautorepeat
|
||||
invoke-virtual { p0 }, $playMethod
|
||||
:noautorepeat
|
||||
return-void
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
@Deprecated("Patch was renamed", ReplaceWith("looVideoPatch"))
|
||||
val autoRepeatPatch = bytecodePatch {
|
||||
dependsOn(loopVideoPatch)
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
package app.revanced.patches.youtube.misc.loopvideo
|
||||
|
||||
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.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.loopvideo.button.loopVideoButtonPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.shared.loopVideoFingerprint
|
||||
import app.revanced.patches.youtube.shared.loopVideoParentFingerprint
|
||||
import app.revanced.util.addInstructionsAtControlFlowLabel
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/LoopVideoPatch;"
|
||||
|
||||
val loopVideoPatch = bytecodePatch(
|
||||
name = "Loop video",
|
||||
description = "Adds an option to loop videos and display loop video button in the video player.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
addResourcesPatch,
|
||||
loopVideoButtonPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"20.07.39",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "misc.loopvideo.loopVideoPatch")
|
||||
|
||||
PreferenceScreen.MISC.addPreferences(
|
||||
SwitchPreference("revanced_loop_video"),
|
||||
)
|
||||
|
||||
loopVideoFingerprint.match(loopVideoParentFingerprint.originalClassDef).method.apply {
|
||||
val playMethod = loopVideoParentFingerprint.method
|
||||
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.RETURN_VOID)
|
||||
|
||||
addInstructionsAtControlFlowLabel(
|
||||
insertIndex,
|
||||
"""
|
||||
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->shouldLoopVideo()Z
|
||||
move-result v0
|
||||
if-eqz v0, :do_not_loop
|
||||
invoke-virtual { p0 }, $playMethod
|
||||
:do_not_loop
|
||||
nop
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package app.revanced.patches.youtube.misc.loopvideo.button
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.playercontrols.*
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.ResourceGroup
|
||||
import app.revanced.util.copyResources
|
||||
|
||||
private val loopVideoButtonResourcePatch = resourcePatch {
|
||||
dependsOn(playerControlsResourcePatch)
|
||||
|
||||
execute {
|
||||
copyResources(
|
||||
"loopvideobutton",
|
||||
ResourceGroup(
|
||||
"drawable",
|
||||
"revanced_loop_video_button_on.xml",
|
||||
"revanced_loop_video_button_off.xml"
|
||||
)
|
||||
)
|
||||
|
||||
addBottomControl("loopvideobutton")
|
||||
}
|
||||
}
|
||||
|
||||
private const val LOOP_VIDEO_BUTTON_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/videoplayer/LoopVideoButton;"
|
||||
|
||||
internal val loopVideoButtonPatch = bytecodePatch(
|
||||
description = "Adds the option to display loop video button in the video player.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
loopVideoButtonResourcePatch,
|
||||
playerControlsPatch,
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "misc.loopvideo.button.loopVideoButtonPatch")
|
||||
|
||||
PreferenceScreen.PLAYER.addPreferences(
|
||||
SwitchPreference("revanced_loop_video_button"),
|
||||
)
|
||||
|
||||
// Initialize the button using standard approach.
|
||||
initializeBottomControl(LOOP_VIDEO_BUTTON_CLASS_DESCRIPTOR)
|
||||
injectVisibilityCheckCall(LOOP_VIDEO_BUTTON_CLASS_DESCRIPTOR)
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
@@ -58,7 +57,8 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
ListPreference("revanced_spoof_video_streams_client_type"),
|
||||
NonInteractivePreference(
|
||||
// Requires a key and title but the actual text is chosen at runtime.
|
||||
key = "revanced_spoof_video_streams_about_android",
|
||||
key = "revanced_spoof_video_streams_about",
|
||||
summaryKey = null,
|
||||
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
|
||||
),
|
||||
ListPreference(
|
||||
|
||||
@@ -21,7 +21,10 @@ internal val conversionContextFingerprintToString = fingerprint {
|
||||
}
|
||||
}
|
||||
|
||||
internal val autoRepeatFingerprint = fingerprint {
|
||||
/**
|
||||
* Resolves to class found in [loopVideoParentFingerprint].
|
||||
*/
|
||||
internal val loopVideoFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters()
|
||||
@@ -30,7 +33,7 @@ internal val autoRepeatFingerprint = fingerprint {
|
||||
}
|
||||
}
|
||||
|
||||
internal val autoRepeatParentFingerprint = fingerprint {
|
||||
internal val loopVideoParentFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
strings(
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -55,7 +55,6 @@ val disableHdrPatch = 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 videoQualityPatch = bytecodePatch(
|
||||
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",
|
||||
|
||||
@@ -34,6 +34,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -209,7 +211,9 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
</patch>
|
||||
@@ -221,8 +225,6 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
</patch>
|
||||
|
||||
@@ -34,6 +34,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -209,7 +211,9 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
</patch>
|
||||
@@ -221,8 +225,6 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
</patch>
|
||||
|
||||
@@ -140,6 +140,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">يمسح جميع سجلات تصحيح أخطاء ReVanced المخزنة</string>
|
||||
<string name="revanced_debug_logs_clear_toast">تم مسح السجلات</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">إزالة معلمة تتبع الاستعلام</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">يتم إزالة معلمة استعلام التتبع من الروابط</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">لا يتم إزالة معلمة استعلام التتبع من الروابط</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">تغيير روابط المشاركة إلى youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">تستخدم الروابط المشتركة youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">تستخدم الروابط المشتركة music.youtube.com</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -1258,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>
|
||||
@@ -1439,10 +1448,17 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">لم يتم حفظ سجل المشاهدة الخاص بك.<br><br>من المرجح أن يكون السبب في ذلك هو مانع إعلانات DNS أو وكيل الشبكة.<br><br>لإصلاح هذه المشكلة، قم بإضافة <b>s.youtube.com</b> إلى القائمة البيضاء أو قم بإيقاف تشغيل جميع أدوات حظر DNS ووكلاء البروكسي.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">لا تعرض مرة أخرى</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">تمكين التكرار التلقائي</string>
|
||||
<string name="revanced_auto_repeat_summary_on">تم تمكين التكرار التلقائي</string>
|
||||
<string name="revanced_auto_repeat_summary_off">تم تعطيل التكرار التلقائي</string>
|
||||
<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_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_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>
|
||||
@@ -1483,11 +1499,6 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_external_browser_summary_on">فتح الروابط في متصفح خارجي</string>
|
||||
<string name="revanced_external_browser_summary_off">فتح الروابط في متصفح داخل التطبيق</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">إزالة معلمة تتبع الاستعلام</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">يتم إزالة معلمة استعلام التتبع من الروابط</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">لا يتم إزالة معلمة استعلام التتبع من الروابط</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">فرض لغة الصوت الأصلية</string>
|
||||
<string name="revanced_force_original_audio_summary_on">استخدام لغة الصوت الأصلية</string>
|
||||
@@ -1568,12 +1579,11 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">الآثار الجانبية للتزوير</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">الآثار الجانبية لمحاكاة هوية Android</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• قائمة المسارات الصوتية مفقودة
|
||||
• مستوى الصوت المستقر غير متاح"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ipados_summary">• قد يتوقف الفيديو عند 1:00، أو قد لا يكون متاحًا في بعض المناطق</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_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>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• قد لا يتم تشغيل الفيديوهات المخصصة للأطفال عند تسجيل الخروج أو عند استخدام وضع التصفح المتخفي</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• فرض الصوت الأصلي غير متاح</string>
|
||||
|
||||
@@ -34,6 +34,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -211,7 +213,9 @@ Second \"item\" text"</string>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">সকীয়নি</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
</patch>
|
||||
@@ -223,8 +227,6 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
</patch>
|
||||
|
||||
@@ -140,6 +140,14 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Saxlanılan bütün ReVanced sazlama qeydlərini təmizləyir</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Qeydlər silindi</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">İzləmə sorğusu faktorun sil</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">İzləmə sorğusu faktoru bağlantılardan silinir</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">İzləmə sorğusu faktoru bağlantılardan silinmir</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">Paylaşma keçidlərini youtube.com-a dəyişdir</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">Paylaşılan keçidlər youtube.com istifadə edir</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">Paylaşılan keçidlər music.youtube.com istifadə edir</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -1257,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>
|
||||
@@ -1438,10 +1447,17 @@ DeArrow haqqında ətraflı öyrənmək üçün bura toxun"</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Baxış tarixçəniz saxlanmır.<br><br>Bu çox güman ki, DNS reklam bloklayıcı və ya şəbəkə proksisinə görədir.<br><br>.Bunu düzəltmək üçün s.youtube.com-u</b> <b>ağ siyahıya salın və ya bütün DNS bloklayıcıları və proksiləri bağlayın.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Təkrar göstərmə</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">Avto-təkrarlamanı aktivləşdir</string>
|
||||
<string name="revanced_auto_repeat_summary_on">Avtomatik təkrar aktivləşdirilib</string>
|
||||
<string name="revanced_auto_repeat_summary_off">Avtomatik təkrarlama qeyri-aktiv edilib</string>
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
<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">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 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>
|
||||
@@ -1482,11 +1498,6 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
|
||||
<string name="revanced_external_browser_summary_on">Xarici brauzerdə bağlantıların açılması</string>
|
||||
<string name="revanced_external_browser_summary_off">Tətbiqdaxili brauzerdə bağlantıların açılması</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">İzləmə sorğusu faktorun sil</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">İzləmə sorğusu faktoru bağlantılardan silinir</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">İzləmə sorğusu faktoru bağlantılardan silinmir</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Orijinal səs dilini zorla</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Orijinal səs dilini istifadə</string>
|
||||
@@ -1567,12 +1578,11 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">Saxtakarlıq yan təsirləri</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">Android saxtalaşdırma yan təsirləri</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• Səs treki menyusu əlçatmazdır
|
||||
• Sabit səs səviyyəsi yoxdur"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ipados_summary">• Video 01:00-da dayana bilər və ya bəzi bölgələrdə mövcud olmaya bilər</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Təcrübi qəbuledici və hər vaxt işləməyi dayandıra bilər</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video 01:00-da dayana bilər və ya bəzi bölgələrdə mövcud olmaya bilər</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• Səs treki menyusu çatışmır</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• AV1 video kodlayıcı yoxdur</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_stable_volume">• Sabit səs yoxdur</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Giriş edilməyəndə və ya gizli rejimdə uşaq videoları oynadıla bilməz</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• \"Orijinal səsi zorla\" əlçatmazdır</string>
|
||||
|
||||
@@ -67,7 +67,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_show_menu_icons_summary_on">Значкі налад паказваюцца</string>
|
||||
<string name="revanced_show_menu_icons_summary_off">Значкі налад не паказваюцца</string>
|
||||
<string name="revanced_language_title">Мова ReVanced</string>
|
||||
<string name="revanced_language_user_dialog_message">"Пераклады для некаторых моў могуць адсутнічаць або быць няпоўнымі.\n\nКаб перакласці новыя мовы або палепшыць існуючыя пераклады, наведайце translate.revanced.app"</string>
|
||||
<string name="revanced_language_user_dialog_message">"Пераклады для некаторых моў могуць адсутнічаць або быць няпоўнымі.
|
||||
|
||||
Каб перакласці новыя мовы або палепшыць існуючыя пераклады, наведайце translate.revanced.app"</string>
|
||||
<string name="revanced_language_DEFAULT">Мова праграмы</string>
|
||||
<string name="revanced_pref_import_export_title">Імпарт / Экспарт</string>
|
||||
<string name="revanced_pref_import_export_summary">Імпарт / Экспарт налад ReVanced</string>
|
||||
@@ -138,6 +140,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Ачышчае ўсе захаваныя адладачныя лагі ReVanced</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Лагі ачышчаны</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Выдаліць параметр запыту адсочвання</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Параметр запыту адсочвання выдалены са спасылак</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Параметр адсочвання запыту не выдаляецца са спасылак</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">Змяніць спасылкі для абагульвання на youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">Агульныя спасылкі выкарыстоўваюць youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">Агульныя спасылкі выкарыстоўваюць music.youtube.com</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -1257,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>
|
||||
@@ -1438,10 +1449,17 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Ваша гісторыя прагляду не захоўваецца.<br><br>Гэта, хутчэй за ўсё, выклікана DNS-блакіроўшчыкам рэкламы або сеткавым праксі.<br><br>Каб выправіць гэта, дадайце <b>s.youtube.com</b> у белы спіс або адключыце ўсе DNS-блакіроўшчыкі і праксі.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Больш не паказваць</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">Уключыць аўтаматычны паўтор</string>
|
||||
<string name="revanced_auto_repeat_summary_on">Аўтаматычны паўтор уключаны</string>
|
||||
<string name="revanced_auto_repeat_summary_off">Аўтаматычны паўтор адключаны</string>
|
||||
<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_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_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>
|
||||
@@ -1482,11 +1500,6 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_external_browser_summary_on">Адкрыццё спасылак у знешнім браўзеры</string>
|
||||
<string name="revanced_external_browser_summary_off">Адкрыццё спасылак ва ўбудаваным браўзеры</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Выдаліць параметр запыту адсочвання</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Параметр запыту адсочвання выдалены са спасылак</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Параметр адсочвання запыту не выдаляецца са спасылак</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Вымушаная арыгінальная мова аўдыё</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Выкарыстоўваць арыгінальную мову аўдыя</string>
|
||||
@@ -1567,12 +1580,11 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">Пабочныя эфекты падробкі</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">Побічныя эфекты падробкі Android</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• Меню гукавой дарожкі адсутнічае
|
||||
• Стабільная гучнасць недаступна"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ipados_summary">• Відэа можа спыніцца на 1:00, ці можа быць недаступным у некаторых рэгіёнах</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_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>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Дзіцячыя відэа могуць не прайгравацца ў стане выхаду з акаўнта або ў рэжыме інкогніта</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• Прымусовы арыгінальны аўдыё недаступны</string>
|
||||
|
||||
@@ -140,6 +140,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Изчиства всички съхранени логове за отстраняване на грешки на ReVanced</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Логовете са изчистени</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Премахнете параметъра на заявката за проследяване</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Параметърът на заявката за проследяване е премахнат от връзките</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Параметърът на заявката за проследяване не е премахнат от връзките</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">Промяна на връзките за споделяне към youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">Споделените връзки използват youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">Споделените връзки използват music.youtube.com</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -1258,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>
|
||||
@@ -1439,10 +1448,17 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Историята ви на гледане не се запазва.<br><br>Това най-вероятно е причинено от DNS блокиращ реклами или мрежов прокси.<br><br>За да коригирате това, поставете <b>s.youtube в белия списък.com</b> или изключете всички DNS блокери и проксита.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Не показвай отново</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">Автоматично повтаряне на текущия видеоклип</string>
|
||||
<string name="revanced_auto_repeat_summary_on">Включено автоматично повтаряне на текущия видеоклип</string>
|
||||
<string name="revanced_auto_repeat_summary_off">Изключено автоматично повтаряне на текущия видеоклип</string>
|
||||
<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_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_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>
|
||||
@@ -1483,11 +1499,6 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_external_browser_summary_on">Отваряне на връзки във външен браузър</string>
|
||||
<string name="revanced_external_browser_summary_off">Отваряне на връзки във вграден браузър</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Премахнете параметъра на заявката за проследяване</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Параметърът на заявката за проследяване е премахнат от връзките</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Параметърът на заявката за проследяване не е премахнат от връзките</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Принудително оригинално аудио език</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Използване на оригиналния език на аудиото</string>
|
||||
@@ -1568,12 +1579,11 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">Странични ефекти от подменянето</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">Strani4ni efekti na fal6ivoto predstavqne na Android</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• Липсва менюто за аудиозаписи
|
||||
• Стабилен звук не е наличен"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ipados_summary">• Видеото може да спре на 1:00 или може да не е налично в някои региони</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_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>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Детските видеоклипове може да не се възпроизвеждат, когато сте излезли от профила си или в режим \"инкогнито\"</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• Принудителният оригинален звук не е наличен</string>
|
||||
|
||||
@@ -140,6 +140,14 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">সমস্ত সঞ্চিত ReVanced ডিবাগ লগ সাফ করে</string>
|
||||
<string name="revanced_debug_logs_clear_toast">লগ সাফ করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">ট্র্যাকিং করার প্যারামিটার মুছুন</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">লিংক থেকে ট্র্যাকিং করার প্যারামিটার মুছে ফেলা হয়েছে</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">লিংক থেকে ট্র্যাকিং করার প্যারামিটার মুছে ফেলা হয়নি</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">শেয়ার লিঙ্কগুলি youtube.com-এ পরিবর্তন করুন</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">শেয়ার করা লিঙ্কগুলি youtube.com ব্যবহার করে</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">শেয়ার করা লিঙ্কগুলি music.youtube.com ব্যবহার করে</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -1254,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>
|
||||
@@ -1435,10 +1444,17 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">আপনার দেখার ইতিহাস সংরক্ষিত হচ্ছে না।<br><br>এটি সম্ভবত DNS অ্যাড ব্লকার অথবা নেটওয়ার্ক প্রক্সির কারণে।<br><br>এটি ঠিক করার জন্য, <b>s.youtube.com</b> সাদা তালিকাভুক্ত করুন অথবা সকল DNS ব্লকার এবং প্রক্সি বন্ধ করুন।</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">আবার দেখাবেন না</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">স্বয়ংক্রিয়ভাবে-আবার দেখানো সক্রিয় করুন</string>
|
||||
<string name="revanced_auto_repeat_summary_on">স্বয়ংক্রিয়ভাবে-আবার দেখানো সক্রিয় হয়েছে</string>
|
||||
<string name="revanced_auto_repeat_summary_off">স্বয়ংক্রিয়ভাবে-আবার দেখানো সক্রিয় নিষ্ক্রিয় হয়েছে</string>
|
||||
<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_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_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>
|
||||
@@ -1479,11 +1495,6 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
<string name="revanced_external_browser_summary_on">বাহ্যিক ব্রাউজারে লিঙ্ক খোলা হচ্ছে</string>
|
||||
<string name="revanced_external_browser_summary_off">ইন-অ্যাপ ব্রাউজারে লিঙ্ক খোলা হচ্ছে</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">ট্র্যাকিং করার প্যারামিটার মুছুন</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">লিংক থেকে ট্র্যাকিং করার প্যারামিটার মুছে ফেলা হয়েছে</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">লিংক থেকে ট্র্যাকিং করার প্যারামিটার মুছে ফেলা হয়নি</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">মূল অডিও ভাষা বলপূর্বক চালু করুন</string>
|
||||
<string name="revanced_force_original_audio_summary_on">মূল অডিও ভাষা ব্যবহার করা হচ্ছে</string>
|
||||
@@ -1564,12 +1575,11 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">স্পুফিংয়ের পার্শ্বপ্রতিক্রিয়া</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">Android স্পুফিংয়ের পার্শ্বপ্রতিক্রিয়া</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• অডিও ট্র্যাক মেনু অনুপস্থিত
|
||||
• স্থিতিশীল ভলিউম উপলব্ধ নেই"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ipados_summary">• ভিডিও ১:০০ মিনিটে বন্ধ হতে পারে, অথবা কিছু অঞ্চলে উপলব্ধ নাও হতে পারে</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• পরীক্ষামূলক ক্লায়েন্ট এবং যেকোনো সময় কাজ করা বন্ধ করতে পারে</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• ভিডিও ১:০০ মিনিটে বন্ধ হতে পারে, অথবা কিছু অঞ্চলে উপলব্ধ নাও হতে পারে</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>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• লগআউট করা হলে বা ছদ্মবেশী মোডে বাচ্চাদের ভিডিও চলতে নাও পারে</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• মূল অডিও জোরপূর্বক উপলব্ধ নেই</string>
|
||||
|
||||
@@ -34,6 +34,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -209,7 +211,9 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
</patch>
|
||||
@@ -221,8 +225,6 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
</patch>
|
||||
|
||||
@@ -34,6 +34,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -209,7 +211,9 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
</patch>
|
||||
@@ -221,8 +225,6 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
</patch>
|
||||
|
||||
@@ -140,6 +140,14 @@ Nebudete informováni o žádné neočekávané události."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Vymaže všechny uložené ladicí protokoly ReVanced</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Protokoly vymazány</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Odstranit sledovací parametr dotazu</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Sledovací parametr dotazu je odstraněn z odkazů</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Sledovací parametr dotazu není odstraněn z odkazů</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">Změnit odkazy pro sdílení na youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">Sdílené odkazy používají youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">Sdílené odkazy používají music.youtube.com</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -1258,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>
|
||||
@@ -1439,10 +1448,17 @@ Klepnutím sem se dozvíte více o DeArrow"</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Vaše historie sledování není ukládána.<br><br>Příčinou je s největší pravděpodobností DNS blokátor reklam nebo síťový proxy server.<br><br>Chcete-li to opravit, přidejte<b>s.youtube.com</b> na whitelist nebo vypněte všechny DNS blokátory a proxy servery.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Už nezobrazovat</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">Povolit automatické opakování</string>
|
||||
<string name="revanced_auto_repeat_summary_on">Automatické opakování je povoleno</string>
|
||||
<string name="revanced_auto_repeat_summary_off">Automatické opakování je zakázáno</string>
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
<string name="revanced_loop_video_title">Povolit smyčku videa</string>
|
||||
<string name="revanced_loop_video_summary_on">Video se bude přehrávat ve smyčce</string>
|
||||
<string name="revanced_loop_video_summary_off">Video se nebude přehrávat ve smyčce</string>
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
<string name="revanced_loop_video_button_title">Zobrazit tlačítko pro smyčku videa</string>
|
||||
<string name="revanced_loop_video_button_summary_on">Tlačítko je zobrazeno</string>
|
||||
<string name="revanced_loop_video_button_summary_off">Tlačítko není zobrazeno</string>
|
||||
<string name="revanced_loop_video_button_toast_on">Smyčka videa je zapnuta</string>
|
||||
<string name="revanced_loop_video_button_toast_off">Smyčka videa je vypnuta</string>
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Napodobovat rozměry zařízení</string>
|
||||
@@ -1483,11 +1499,6 @@ Povolením této funkce lze odemknout vyšší kvality videa"</string>
|
||||
<string name="revanced_external_browser_summary_on">Otevírání odkazů v externím prohlížeči</string>
|
||||
<string name="revanced_external_browser_summary_off">Otevírání odkazů v prohlížeči v aplikaci</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Odstranit sledovací parametr dotazu</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Sledovací parametr dotazu je odstraněn z odkazů</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Sledovací parametr dotazu není odstraněn z odkazů</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Vynutit původní jazyk zvuku</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Použít původní jazyk zvuku</string>
|
||||
@@ -1568,12 +1579,11 @@ Povolením této funkce lze odemknout vyšší kvality videa"</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">Vedlejší účinky maskování</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">Vedlejší účinky spoofingu Androidu</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• Chybí nabídka zvukové stopy
|
||||
• Stabilní hlasitost není k dispozici"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ipados_summary">• Video se může zastavit v 1:00 nebo nemusí být dostupné v některých oblastech</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Experimentální klient a může kdykoli přestat fungovat</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video se může zastavit v 1:00 nebo nemusí být dostupné v některých oblastech</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• Chybí nabídka zvukových stop</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• Žádný video kodek AV1</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_stable_volume">• Stabilní hlasitost není k dispozici</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Dětská videa se nemusí přehrávat, když jste odhlášení nebo v anonymním režimu</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• Vynutit původní zvuk není k dispozici</string>
|
||||
|
||||
@@ -140,6 +140,14 @@ Du modtager ikke notifikationer om uventede hændelser."</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">
|
||||
<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">
|
||||
@@ -1260,8 +1268,9 @@ 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>
|
||||
<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>
|
||||
@@ -1441,10 +1450,17 @@ Tryk her for at lære mere om DeArrow"</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.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">Aktivér auto-gentag</string>
|
||||
<string name="revanced_auto_repeat_summary_on">Auto-gentag er aktiveret</string>
|
||||
<string name="revanced_auto_repeat_summary_off">Auto-gentag er deaktiveret</string>
|
||||
<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">
|
||||
<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">
|
||||
<string name="revanced_spoof_device_dimensions_title">Spoof enhedens dimensioner</string>
|
||||
@@ -1485,11 +1501,6 @@ Aktivering af dette kan låse op for højere videokvalitet"</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="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<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>
|
||||
</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>
|
||||
@@ -1570,12 +1581,11 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
</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_android_title">Bivirkninger ved Android-spoofing</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• Lydsporsmenuen mangler
|
||||
• Stabil lydstyrke er ikke tilgængelig"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ipados_summary">• Videoen kan stoppe ved 1:00, eller er muligvis ikke tilgængelig i visse regioner</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>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• Lydspormenu mangler</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• Intet AV1-videokodek</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_stable_volume">• Stabil lydstyrke er ikke tilgængelig</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Videoer til børn afspilles muligvis ikke, når du er logget ud eller i inkognitotilstand</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• Tving original lyd er ikke tilgængelig</string>
|
||||
|
||||
@@ -140,6 +140,14 @@ Sie werden nicht über unerwartete Ereignisse informiert."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Löscht alle gespeicherten ReVanced-Debug-Protokolle</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Protokolle gelöscht</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Tracking-Abfrageparameter entfernen</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Tracking-Abfrageparameter wird von Links entfernt</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Tracking-Abfrageparameter wird nicht von Links entfernt</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">Teilen-Links zu youtube.com ändern</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">Geteilte Links verwenden youtube.com</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">Geteilte Links verwenden music.youtube.com</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
@@ -1255,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>
|
||||
@@ -1436,10 +1445,17 @@ Tippen Sie hier, um mehr über DeArrow zu erfahren"</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Ihr Verlauf wird nicht gespeichert.<br><br>Dies wird höchstwahrscheinlich durch einen DNS-Werbeblocker oder einen Netzwerkproxy verursacht.<br><br>Um dies zu beheben, setze <b>s.youtube.com</b> auf die Whitelist oder schalten Sie alle DNS-Blocker und Proxies aus.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Nicht wieder anzeigen</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">Auto-Wiederholung aktivieren</string>
|
||||
<string name="revanced_auto_repeat_summary_on">Auto-Wiederholung ist aktiviert</string>
|
||||
<string name="revanced_auto_repeat_summary_off">Auto-Wiederholung ist deaktiviert</string>
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
<string name="revanced_loop_video_title">Loop-Video aktivieren</string>
|
||||
<string name="revanced_loop_video_summary_on">Video wird wiederholt</string>
|
||||
<string name="revanced_loop_video_summary_off">Video wird nicht wiederholt</string>
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
<string name="revanced_loop_video_button_title">Loop-Video-Schaltfläche anzeigen</string>
|
||||
<string name="revanced_loop_video_button_summary_on">Schaltfläche wird angezeigt</string>
|
||||
<string name="revanced_loop_video_button_summary_off">Schaltfläche wird nicht angezeigt</string>
|
||||
<string name="revanced_loop_video_button_toast_on">Loop-Video ist aktiviert</string>
|
||||
<string name="revanced_loop_video_button_toast_off">Loop-Video ist deaktiviert</string>
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Spoof-Gerätegröße</string>
|
||||
@@ -1480,11 +1496,6 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w
|
||||
<string name="revanced_external_browser_summary_on">Links im externen Browser öffnen</string>
|
||||
<string name="revanced_external_browser_summary_off">Links im In-App-Browser öffnen</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Tracking-Abfrageparameter entfernen</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Tracking-Abfrageparameter wird von Links entfernt</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Tracking-Abfrageparameter wird nicht von Links entfernt</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Original Audio erzwingen</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Original-Audiosprache verwenden</string>
|
||||
@@ -1565,12 +1576,11 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">Nebenwirkungen des Spoofings</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_title">Android-Spoofing-Nebenwirkungen</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_summary">"• Audiotrack-Menü fehlt
|
||||
• Stabile Lautstärke ist nicht verfügbar"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ipados_summary">• Video kann um 1:00 Uhr stoppen oder ist möglicherweise in einigen Regionen nicht verfügbar</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Experimenteller Client und kann jederzeit aufhören zu funktionieren</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video kann um 1:00 Uhr stoppen oder ist möglicherweise in einigen Regionen nicht verfügbar</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• Audiotrack-Menü fehlt</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• Kein AV1-Videocodec</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_stable_volume">• Stabile Lautstärke ist nicht verfügbar</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Kinder-Videos werden möglicherweise nicht abgespielt, wenn du abgemeldet bist oder den Inkognito-Modus verwendest.</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• Originalton erzwingen ist nicht verfügbar</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user