@@ -93,6 +101,8 @@ public final class ChangeStartPagePatch {
private static final StartPage START_PAGE = Settings.CHANGE_START_PAGE.get();
+ private static final boolean CHANGE_START_PAGE_ALWAYS = Settings.CHANGE_START_PAGE_ALWAYS.get();
+
/**
* There is an issue where the back button on the toolbar doesn't work properly.
* As a workaround for this issue, instead of overriding the browserId multiple times, just override it once.
@@ -104,13 +114,13 @@ public final class ChangeStartPagePatch {
return original;
}
- if (appLaunched) {
+ if (!CHANGE_START_PAGE_ALWAYS && appLaunched) {
Logger.printDebug(() -> "Ignore override browseId as the app already launched");
return original;
}
appLaunched = true;
- Logger.printDebug(() -> "Changing browseId to " + START_PAGE.id);
+ Logger.printDebug(() -> "Changing browseId to: " + START_PAGE.id);
return START_PAGE.id;
}
@@ -125,14 +135,14 @@ public final class ChangeStartPagePatch {
return;
}
- if (appLaunched) {
+ if (!CHANGE_START_PAGE_ALWAYS && appLaunched) {
Logger.printDebug(() -> "Ignore override intent action as the app already launched");
return;
}
appLaunched = true;
String intentAction = START_PAGE.id;
- Logger.printDebug(() -> "Changing intent action to " + intentAction);
+ Logger.printDebug(() -> "Changing intent action to: " + intentAction);
intent.setAction(intentAction);
}
}
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/CustomPlayerOverlayOpacityPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/CustomPlayerOverlayOpacityPatch.java
index 4f13deaac..50133579d 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/CustomPlayerOverlayOpacityPatch.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/CustomPlayerOverlayOpacityPatch.java
@@ -17,8 +17,7 @@ public class CustomPlayerOverlayOpacityPatch {
if (opacity < 0 || opacity > 100) {
Utils.showToastLong(str("revanced_player_overlay_opacity_invalid_toast"));
- Settings.PLAYER_OVERLAY_OPACITY.resetToDefault();
- opacity = Settings.PLAYER_OVERLAY_OPACITY.defaultValue;
+ opacity = Settings.PLAYER_OVERLAY_OPACITY.resetToDefault();
}
PLAYER_OVERLAY_OPACITY_LEVEL = (opacity * 255) / 100;
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableAutoCaptionsPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableAutoCaptionsPatch.java
index 38cbf00a0..12fac4946 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableAutoCaptionsPatch.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableAutoCaptionsPatch.java
@@ -1,20 +1,23 @@
package app.revanced.extension.youtube.patches;
import app.revanced.extension.youtube.settings.Settings;
-import app.revanced.extension.youtube.shared.ShortsPlayerState;
@SuppressWarnings("unused")
public class DisableAutoCaptionsPatch {
- /**
- * Used by injected code. Do not delete.
- */
- public static boolean captionsButtonDisabled;
+ private static volatile boolean captionsButtonStatus;
- public static boolean autoCaptionsEnabled() {
- return Settings.AUTO_CAPTIONS.get()
- // Do not use auto captions for Shorts.
- && ShortsPlayerState.isOpen();
+ /**
+ * Injection point.
+ */
+ public static boolean disableAutoCaptions() {
+ return Settings.DISABLE_AUTO_CAPTIONS.get() && !captionsButtonStatus;
}
+ /**
+ * Injection point.
+ */
+ public static void setCaptionsButtonStatus(boolean status) {
+ captionsButtonStatus = status;
+ }
}
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java
index 1b41e44c6..7a7571162 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java
@@ -162,8 +162,7 @@ public final class MiniplayerPatch {
if (opacity < 0 || opacity > 100) {
Utils.showToastLong(str("revanced_miniplayer_opacity_invalid_toast"));
- Settings.MINIPLAYER_OPACITY.resetToDefault();
- opacity = Settings.MINIPLAYER_OPACITY.defaultValue;
+ opacity = Settings.MINIPLAYER_OPACITY.resetToDefault();
}
OPACITY_LEVEL = (opacity * 255) / 100;
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/WideSearchbarPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/WideSearchbarPatch.java
index 57ec7442f..aeff4ac26 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/WideSearchbarPatch.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/WideSearchbarPatch.java
@@ -1,11 +1,48 @@
package app.revanced.extension.youtube.patches;
+import android.content.res.Resources;
+import android.util.TypedValue;
+import android.view.View;
+
+import app.revanced.extension.shared.Logger;
+import app.revanced.extension.shared.Utils;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public final class WideSearchbarPatch {
+ private static final Boolean WIDE_SEARCHBAR_ENABLED = Settings.WIDE_SEARCHBAR.get();
+
+ /**
+ * Injection point.
+ */
public static boolean enableWideSearchbar(boolean original) {
- return Settings.WIDE_SEARCHBAR.get() || original;
+ return WIDE_SEARCHBAR_ENABLED || original;
+ }
+
+ /**
+ * Injection point.
+ */
+ public static void setActionBar(View view) {
+ try {
+ if (!WIDE_SEARCHBAR_ENABLED) return;
+
+ View searchBarView = Utils.getChildViewByResourceName(view, "search_bar");
+
+ final int paddingLeft = searchBarView.getPaddingLeft();
+ final int paddingRight = searchBarView.getPaddingRight();
+ final int paddingTop = searchBarView.getPaddingTop();
+ final int paddingBottom = searchBarView.getPaddingBottom();
+ final int paddingStart = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ 8, Resources.getSystem().getDisplayMetrics());
+
+ if (Utils.isRightToLeftTextLayout()) {
+ searchBarView.setPadding(paddingLeft, paddingTop, paddingStart, paddingBottom);
+ } else {
+ searchBarView.setPadding(paddingStart, paddingTop, paddingRight, paddingBottom);
+ }
+ } catch (Exception ex) {
+ Logger.printException(() -> "setActionBar failure", ex);
+ }
}
}
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java
index ce8ac8474..308be8ce8 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java
@@ -31,7 +31,7 @@ final class ButtonsFilter extends Filter {
bufferFilterPathGroup = new StringFilterGroup(
null,
- "|ContainerType|button.eml|"
+ "|ContainerType|button.eml"
);
addPathCallbacks(
@@ -43,7 +43,7 @@ final class ButtonsFilter extends Filter {
),
new StringFilterGroup(
Settings.HIDE_DOWNLOAD_BUTTON,
- "|download_button.eml|"
+ "|download_button.eml"
),
new StringFilterGroup(
Settings.HIDE_PLAYLIST_BUTTON,
@@ -51,7 +51,7 @@ final class ButtonsFilter extends Filter {
),
new StringFilterGroup(
Settings.HIDE_CLIP_BUTTON,
- "|clip_button.eml|"
+ "|clip_button.eml"
)
);
@@ -68,15 +68,19 @@ final class ButtonsFilter extends Filter {
Settings.HIDE_REMIX_BUTTON,
"yt_outline_youtube_shorts_plus"
),
+ new ByteArrayFilterGroup(
+ Settings.HIDE_THANKS_BUTTON,
+ "yt_outline_dollar_sign_heart"
+ ),
+ new ByteArrayFilterGroup(
+ Settings.HIDE_ASK_BUTTON,
+ "yt_fill_spark"
+ ),
// Check for clip button both here and using a path filter,
// as there's a chance the path is a generic action button and won't contain 'clip_button'
new ByteArrayFilterGroup(
Settings.HIDE_CLIP_BUTTON,
"yt_outline_scissors"
- ),
- new ByteArrayFilterGroup(
- Settings.HIDE_THANKS_BUTTON,
- "yt_outline_dollar_sign_heart"
)
);
}
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java
index 4f6c1366c..a82459c28 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java
@@ -211,7 +211,7 @@ public final class LayoutComponentsFilter extends Filter {
compactChannelBarInnerButton = new StringFilterGroup(
null,
- "|button.eml|"
+ "|button.eml"
);
joinMembershipButton = new ByteArrayFilterGroup(
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java
index b200017ab..d7c8e6caa 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java
@@ -40,7 +40,7 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
addPathCallbacks(
videoQualityMenuFooter,
- new StringFilterGroup(null, "overflow_menu_item.eml|")
+ new StringFilterGroup(null, "overflow_menu_item.eml")
);
flyoutFilterGroupList.addAll(
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java
index ae2a09f92..8cde513bd 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java
@@ -54,12 +54,12 @@ public class CustomPlaybackSpeedPatch {
static {
final float holdSpeed = Settings.SPEED_TAP_AND_HOLD.get();
+
if (holdSpeed > 0 && holdSpeed <= PLAYBACK_SPEED_MAXIMUM) {
TAP_AND_HOLD_SPEED = holdSpeed;
} else {
showInvalidCustomSpeedToast();
- Settings.SPEED_TAP_AND_HOLD.resetToDefault();
- TAP_AND_HOLD_SPEED = Settings.SPEED_TAP_AND_HOLD.get();
+ TAP_AND_HOLD_SPEED = Settings.SPEED_TAP_AND_HOLD.resetToDefault();
}
loadCustomSpeeds();
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java
index dfc727bda..29debf67e 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java
@@ -7,6 +7,7 @@ import static app.revanced.extension.shared.settings.Setting.migrateOldSettingTo
import static app.revanced.extension.shared.settings.Setting.parent;
import static app.revanced.extension.shared.settings.Setting.parentsAny;
import static app.revanced.extension.youtube.patches.ChangeFormFactorPatch.FormFactor;
+import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.ChangeStartPageTypeAvailability;
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
import static app.revanced.extension.youtube.patches.ExitFullscreenPatch.FullscreenMode;
import static app.revanced.extension.youtube.patches.ForceOriginalAudioPatch.ForceOriginalAudioAvailability;
@@ -24,6 +25,7 @@ import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehavi
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.MANUAL_SKIP;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY_ONCE;
+import app.revanced.extension.youtube.swipecontrols.SwipeControlsConfigurationProvider.SwipeOverlayStyle;
import android.graphics.Color;
@@ -124,6 +126,7 @@ public class Settings extends BaseSettings {
// Player
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
public static final BooleanSetting COPY_VIDEO_URL_TIMESTAMP = new BooleanSetting("revanced_copy_video_url_timestamp", TRUE);
+ public static final BooleanSetting DISABLE_AUTO_CAPTIONS = new BooleanSetting("revanced_disable_auto_captions", FALSE, true);
public static final BooleanSetting DISABLE_FULLSCREEN_AMBIENT_MODE = new BooleanSetting("revanced_disable_fullscreen_ambient_mode", TRUE, true);
public static final BooleanSetting DISABLE_ROLLING_NUMBER_ANIMATIONS = new BooleanSetting("revanced_disable_rolling_number_animations", FALSE);
public static final EnumSetting