mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-06-13 05:37:40 +02:00
feat(YouTube): Add Snack bar components
patch
This commit is contained in:
@ -61,7 +61,7 @@ public abstract class Filter {
|
||||
*/
|
||||
public boolean skip(String conversionContext, SpannableString spannableString, Object span, int start, int end,
|
||||
int flags, boolean isWord, SpanType spanType, StringFilterGroup matchedGroup) {
|
||||
if (BaseSettings.ENABLE_DEBUG_LOGGING.get()) {
|
||||
if (BaseSettings.ENABLE_DEBUG_BUFFER_LOGGING.get()) {
|
||||
String filterSimpleName = getClass().getSimpleName();
|
||||
Logger.printDebug(() -> filterSimpleName + " Removed setSpan: " + spanType.type);
|
||||
}
|
||||
|
@ -188,10 +188,6 @@ public class GeneralPatch {
|
||||
return Settings.HIDE_FLOATING_MICROPHONE.get() || original;
|
||||
}
|
||||
|
||||
public static boolean hideSnackBar() {
|
||||
return Settings.HIDE_SNACK_BAR.get();
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region [Hide navigation bar components] patch
|
||||
|
@ -0,0 +1,115 @@
|
||||
package app.revanced.extension.youtube.patches.general;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import app.revanced.extension.shared.utils.ResourceUtils;
|
||||
import app.revanced.extension.shared.utils.Utils;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.utils.ThemeUtils;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class SnackBarPatch {
|
||||
private static final boolean HIDE_SNACK_BAR =
|
||||
Settings.HIDE_SNACK_BAR.get();
|
||||
private static final boolean HIDE_SERVER_SIDE_SNACK_BAR =
|
||||
Settings.HIDE_SERVER_SIDE_SNACK_BAR.get();
|
||||
private static final boolean CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND =
|
||||
!HIDE_SNACK_BAR && !HIDE_SERVER_SIDE_SNACK_BAR && Settings.CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND.get();
|
||||
private static final boolean INVERT_SNACK_BAR_THEME =
|
||||
!HIDE_SNACK_BAR && Settings.INVERT_SNACK_BAR_THEME.get();
|
||||
private static final boolean INVERT_SERVER_SIDE_SNACK_BAR_THEME =
|
||||
!HIDE_SERVER_SIDE_SNACK_BAR && INVERT_SNACK_BAR_THEME;
|
||||
private static final int SNACK_BAR_BLACK_COLOR = 0xFF0F0F0F;
|
||||
private static final int SNACK_BAR_WHITE_COLOR = 0xFFF1F1F1;
|
||||
private static final AtomicBoolean lithoSnackBarLoaded = new AtomicBoolean(false);
|
||||
private static int blackColor = 0;
|
||||
private static int whiteColor = 0;
|
||||
|
||||
public static boolean hideSnackBar() {
|
||||
return HIDE_SNACK_BAR;
|
||||
}
|
||||
|
||||
public static void hideLithoSnackBar(FrameLayout frameLayout) {
|
||||
if (HIDE_SERVER_SIDE_SNACK_BAR) {
|
||||
Utils.hideViewByLayoutParams(frameLayout);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLithoSnackBarBackground(View view) {
|
||||
if (CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND) {
|
||||
int snackBarRoundedCornersBackgroundIdentifier =
|
||||
ResourceUtils.getDrawableIdentifier("snackbar_rounded_corners_background");
|
||||
Context mContext = invertSnackBarTheme(view.getContext());
|
||||
Drawable snackBarRoundedCornersBackground = mContext.getDrawable(snackBarRoundedCornersBackgroundIdentifier);
|
||||
if (snackBarRoundedCornersBackground != null) {
|
||||
view.setBackground(snackBarRoundedCornersBackground);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLithoSnackBarBackgroundColor(FrameLayout frameLayout, int color) {
|
||||
if (CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND) {
|
||||
return;
|
||||
}
|
||||
frameLayout.setBackgroundColor(color);
|
||||
}
|
||||
|
||||
public static Context invertSnackBarTheme(Context mContext) {
|
||||
if (INVERT_SERVER_SIDE_SNACK_BAR_THEME) {
|
||||
String styleId = ThemeUtils.isDarkTheme()
|
||||
? "Base.Theme.YouTube.Light"
|
||||
: "Base.Theme.YouTube.Dark";
|
||||
int styleIdentifier = ResourceUtils.getStyleIdentifier(styleId);
|
||||
mContext = new ContextThemeWrapper(mContext, styleIdentifier);
|
||||
}
|
||||
|
||||
return mContext;
|
||||
}
|
||||
|
||||
public static Enum<?> invertSnackBarTheme(Enum<?> appTheme, Enum<?> darkTheme) {
|
||||
if (INVERT_SNACK_BAR_THEME) {
|
||||
return appTheme == darkTheme
|
||||
? null
|
||||
: darkTheme;
|
||||
}
|
||||
|
||||
return appTheme;
|
||||
}
|
||||
|
||||
public static void lithoSnackBarLoaded() {
|
||||
lithoSnackBarLoaded.compareAndSet(false, true);
|
||||
}
|
||||
|
||||
public static int getLithoColor(int originalValue) {
|
||||
if (CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND &&
|
||||
lithoSnackBarLoaded.compareAndSet(true, false)) {
|
||||
if (originalValue == SNACK_BAR_BLACK_COLOR) {
|
||||
return INVERT_SERVER_SIDE_SNACK_BAR_THEME
|
||||
? getWhiteColor()
|
||||
: getBlackColor();
|
||||
} else if (originalValue == SNACK_BAR_WHITE_COLOR) {
|
||||
return INVERT_SERVER_SIDE_SNACK_BAR_THEME
|
||||
? getBlackColor()
|
||||
: getWhiteColor();
|
||||
}
|
||||
}
|
||||
|
||||
return originalValue;
|
||||
}
|
||||
|
||||
private static int getBlackColor() {
|
||||
if (blackColor == 0) blackColor = ResourceUtils.getColor("revanced_snack_bar_color_dark");
|
||||
return blackColor;
|
||||
}
|
||||
|
||||
private static int getWhiteColor() {
|
||||
if (whiteColor == 0) whiteColor = ResourceUtils.getColor("revanced_snack_bar_color_light");
|
||||
return whiteColor;
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package app.revanced.extension.youtube.patches.spans;
|
||||
|
||||
import android.text.SpannableString;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
|
||||
import app.revanced.extension.shared.patches.spans.Filter;
|
||||
import app.revanced.extension.shared.patches.spans.SpanType;
|
||||
import app.revanced.extension.shared.patches.spans.StringFilterGroup;
|
||||
import app.revanced.extension.shared.utils.ResourceUtils;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.utils.ThemeUtils;
|
||||
|
||||
@SuppressWarnings({"unused", "FieldCanBeLocal"})
|
||||
public final class SnackBarFilter extends Filter {
|
||||
private static final boolean HIDE_SNACK_BAR =
|
||||
Settings.HIDE_SNACK_BAR.get() || Settings.HIDE_SERVER_SIDE_SNACK_BAR.get();
|
||||
private static final boolean CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND =
|
||||
!HIDE_SNACK_BAR && Settings.CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND.get();
|
||||
private static final boolean INVERT_SNACK_BAR_THEME =
|
||||
!HIDE_SNACK_BAR && Settings.INVERT_SNACK_BAR_THEME.get();
|
||||
|
||||
private final ForegroundColorSpan foregroundColorSpanBlack =
|
||||
new ForegroundColorSpan(ResourceUtils.getColor("yt_black1"));
|
||||
private final ForegroundColorSpan foregroundColorSpanWhite =
|
||||
new ForegroundColorSpan(ResourceUtils.getColor("yt_white1"));
|
||||
|
||||
public SnackBarFilter() {
|
||||
addCallbacks(
|
||||
new StringFilterGroup(
|
||||
Settings.CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND,
|
||||
"snackbar.eml|"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
private ForegroundColorSpan getForegroundColorSpan() {
|
||||
if (INVERT_SNACK_BAR_THEME) {
|
||||
return ThemeUtils.isDarkTheme()
|
||||
? foregroundColorSpanWhite
|
||||
: foregroundColorSpanBlack;
|
||||
}
|
||||
return ThemeUtils.isDarkTheme()
|
||||
? foregroundColorSpanBlack
|
||||
: foregroundColorSpanWhite;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean skip(String conversionContext, SpannableString spannableString, Object span,
|
||||
int start, int end, int flags, boolean isWord, SpanType spanType, StringFilterGroup matchedGroup) {
|
||||
if (CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND && spanType == SpanType.FOREGROUND_COLOR) {
|
||||
spannableString.setSpan(
|
||||
getForegroundColorSpan(),
|
||||
start,
|
||||
end,
|
||||
flags
|
||||
);
|
||||
return super.skip(conversionContext, spannableString, span, start, end, flags, isWord, spanType, matchedGroup);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -93,7 +93,6 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_FEED_SURVEY = new BooleanSetting("revanced_hide_feed_survey", TRUE);
|
||||
public static final BooleanSetting HIDE_TICKET_SHELF = new BooleanSetting("revanced_hide_ticket_shelf", TRUE);
|
||||
|
||||
|
||||
// PreferenceScreen: Feed - Category bar
|
||||
public static final BooleanSetting HIDE_CATEGORY_BAR_IN_FEED = new BooleanSetting("revanced_hide_category_bar_in_feed", FALSE, true);
|
||||
public static final BooleanSetting HIDE_CATEGORY_BAR_IN_SEARCH = new BooleanSetting("revanced_hide_category_bar_in_search", FALSE, true);
|
||||
@ -152,7 +151,6 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting ENABLE_GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_enable_gradient_loading_screen", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FLOATING_MICROPHONE = new BooleanSetting("revanced_hide_floating_microphone", TRUE, true);
|
||||
public static final BooleanSetting HIDE_GRAY_SEPARATOR = new BooleanSetting("revanced_hide_gray_separator", TRUE);
|
||||
public static final BooleanSetting HIDE_SNACK_BAR = new BooleanSetting("revanced_hide_snack_bar", FALSE);
|
||||
public static final BooleanSetting REMOVE_VIEWER_DISCRETION_DIALOG = new BooleanSetting("revanced_remove_viewer_discretion_dialog", FALSE);
|
||||
|
||||
public static final EnumSetting<FormFactor> CHANGE_LAYOUT = new EnumSetting<>("revanced_change_layout", FormFactor.ORIGINAL, true);
|
||||
@ -232,6 +230,12 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_SETTINGS_MENU_POST_PURCHASE = new BooleanSetting("revanced_hide_settings_menu_post_purchase", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SETTINGS_MENU_THIRD_PARTY = new BooleanSetting("revanced_hide_settings_menu_third_party", FALSE, true);
|
||||
|
||||
// PreferenceScreen: General - Snack bar
|
||||
public static final BooleanSetting HIDE_SNACK_BAR = new BooleanSetting("revanced_hide_snack_bar", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SERVER_SIDE_SNACK_BAR = new BooleanSetting("revanced_hide_server_side_snack_bar", FALSE, true);
|
||||
public static final BooleanSetting CHANGE_SERVER_SIDE_SNACK_BAR_BACKGROUND = new BooleanSetting("revanced_change_server_side_snack_bar_background", FALSE, true, "revanced_change_server_side_snack_bar_background_user_dialog_message");
|
||||
public static final BooleanSetting INVERT_SNACK_BAR_THEME = new BooleanSetting("revanced_invert_snack_bar_theme", FALSE, true);
|
||||
|
||||
// PreferenceScreen: General - Toolbar
|
||||
public static final BooleanSetting CHANGE_YOUTUBE_HEADER = new BooleanSetting("revanced_change_youtube_header", TRUE, true);
|
||||
public static final BooleanSetting ENABLE_WIDE_SEARCH_BAR = new BooleanSetting("revanced_enable_wide_search_bar", FALSE, true);
|
||||
|
Reference in New Issue
Block a user