Add ReVanced bold icons

This commit is contained in:
LisoUseInAIKyrios
2025-10-20 21:48:15 +04:00
parent 64334b4f79
commit c37527f182
47 changed files with 745 additions and 108 deletions

View File

@@ -25,6 +25,7 @@ public class BaseSettings {
* Use the icons declared in the preferences created during patching. If no icons or styles are declared then this setting does nothing.
*/
public static final BooleanSetting SHOW_MENU_ICONS = new BooleanSetting("revanced_show_menu_icons", TRUE, true);
public static final BooleanSetting SETTINGS_DISABLE_BOLD_ICONS = new BooleanSetting("revanced_settings_disable_bold_icons", TRUE, true, parent(SHOW_MENU_ICONS));
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", "");

View File

@@ -104,9 +104,15 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
* so all app specific {@link Setting} instances are loaded before this method returns.
*/
protected void initialize() {
String preferenceResourceName = BaseSettings.SHOW_MENU_ICONS.get()
? "revanced_prefs_icons"
: "revanced_prefs";
String preferenceResourceName;
if (BaseSettings.SHOW_MENU_ICONS.get()) {
preferenceResourceName = BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get()
? "revanced_prefs_icons"
: "revanced_prefs_icons_bold";
} else {
preferenceResourceName = "revanced_prefs";
}
final var identifier = Utils.getResourceIdentifier(ResourceType.XML, preferenceResourceName);
if (identifier == 0) return;
addPreferencesFromResource(identifier);

View File

@@ -21,6 +21,7 @@ import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.ResourceType;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseActivityHook;
import app.revanced.extension.shared.settings.BaseSettings;
@SuppressWarnings({"deprecation", "NewApi"})
public class ToolbarPreferenceFragment extends AbstractPreferenceFragment {
@@ -135,8 +136,10 @@ public class ToolbarPreferenceFragment extends AbstractPreferenceFragment {
*/
@SuppressLint("UseCompatLoadingForDrawables")
public static Drawable getBackButtonDrawable() {
final int backButtonResource = Utils.getResourceIdentifierOrThrow(
ResourceType.DRAWABLE, "revanced_settings_toolbar_arrow_left");
final int backButtonResource = Utils.getResourceIdentifierOrThrow(ResourceType.DRAWABLE,
BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get()
? "revanced_settings_toolbar_arrow_left"
: "revanced_settings_toolbar_arrow_left_bold");
Drawable drawable = Utils.getContext().getResources().getDrawable(backButtonResource);
customizeBackButtonDrawable(drawable);
return drawable;

View File

@@ -1,7 +1,6 @@
package app.revanced.extension.shared.settings.search;
import static app.revanced.extension.shared.Utils.getResourceIdentifierOrThrow;
import static app.revanced.extension.shared.settings.search.BaseSearchViewController.DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON;
import android.animation.AnimatorSet;
import android.animation.ArgbEvaluator;
@@ -276,7 +275,7 @@ public abstract class BaseSearchResultsAdapter extends ArrayAdapter<BaseSearchRe
holder.titleView.setText(item.highlightedTitle);
holder.summaryView.setText(item.highlightedSummary);
holder.summaryView.setVisibility(TextUtils.isEmpty(item.highlightedSummary) ? View.GONE : View.VISIBLE);
holder.iconView.setImageResource(DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON);
holder.iconView.setImageResource(BaseSearchViewController.getSearchIcon());
}
/**

View File

@@ -79,11 +79,22 @@ public abstract class BaseSearchViewController {
ResourceType.ID, "action_search");
protected static final int ID_REVANCED_SETTINGS_FRAGMENTS = getResourceIdentifierOrThrow(
ResourceType.ID, "revanced_settings_fragments");
public static final int DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON = getResourceIdentifierOrThrow(
private static final int DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON = getResourceIdentifierOrThrow(
ResourceType.DRAWABLE, "revanced_settings_search_icon");
private static final int DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON_BOLD = getResourceIdentifierOrThrow(
ResourceType.DRAWABLE, "revanced_settings_search_icon_bold");
protected static final int MENU_REVANCED_SEARCH_MENU = getResourceIdentifierOrThrow(
ResourceType.MENU, "revanced_search_menu");
/**
* @return The search icon, either bold or not bold, depending on the ReVanced UI setting.
*/
public static int getSearchIcon() {
return BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get()
? DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON
: DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON_BOLD;
}
/**
* Constructs a new BaseSearchViewController instance.
*
@@ -529,7 +540,7 @@ public abstract class BaseSearchViewController {
noResultsPreference.setTitle(str("revanced_settings_search_no_results_title", query));
noResultsPreference.setSummary(str("revanced_settings_search_no_results_summary"));
noResultsPreference.setSelectable(false);
noResultsPreference.setIcon(DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON);
noResultsPreference.setIcon(getSearchIcon());
filteredSearchItems.add(new BaseSearchResultItem.PreferenceSearchItem(noResultsPreference, "", Collections.emptyList()));
}

View File

@@ -25,6 +25,7 @@ import java.util.LinkedList;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.ResourceType;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.settings.preference.BulletPointPreference;
import app.revanced.extension.shared.ui.CustomDialog;
@@ -57,6 +58,10 @@ public class SearchHistoryManager {
ResourceType.LAYOUT, "revanced_preference_search_history_item");
private static final int ID_SEARCH_HISTORY_LIST = getResourceIdentifierOrThrow(
ResourceType.ID, "search_history_list");
private static final int ID_SEARCH_REMOVE_ICON = getResourceIdentifierOrThrow(
ResourceType.DRAWABLE, "revanced_settings_search_remove");
private static final int ID_SEARCH_REMOVE_ICON_BOLD = getResourceIdentifierOrThrow(
ResourceType.DRAWABLE, "revanced_settings_search_remove_bold");
private final Deque<String> searchHistory;
private final Activity activity;
@@ -324,14 +329,20 @@ public class SearchHistoryManager {
View view = inflater.inflate(LAYOUT_REVANCED_PREFERENCE_SEARCH_HISTORY_ITEM, container, false);
TextView historyText = view.findViewById(ID_HISTORY_TEXT);
ImageView deleteIcon = view.findViewById(ID_DELETE_ICON);
historyText.setText(query);
// Set click listener for main item (select query).
view.setOnClickListener(v -> onSelectHistoryItemListener.onSelectHistoryItem(query));
// Set click listener for delete icon.
ImageView deleteIcon = view.findViewById(ID_DELETE_ICON);
deleteIcon.setImageResource(
BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get()
? ID_SEARCH_REMOVE_ICON
: ID_SEARCH_REMOVE_ICON_BOLD
);
deleteIcon.setOnClickListener(v -> createAndShowDialog(
query,
str("revanced_settings_search_remove_message"),

View File

@@ -38,9 +38,6 @@ public final class NavigationButtonsPatch {
private static final boolean DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK
= Settings.DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK.get();
private static final boolean NAVIGATION_BAR_DISABLE_BOLD_ICONS
= Settings.NAVIGATION_BAR_DISABLE_BOLD_ICONS.get();
/**
* Injection point.
*/
@@ -71,13 +68,6 @@ public final class NavigationButtonsPatch {
return Settings.NAVIGATION_BAR_ANIMATIONS.get();
}
/**
* Injection point.
*/
public static boolean useBoldIcons(boolean original) {
return !NAVIGATION_BAR_DISABLE_BOLD_ICONS;
}
/**
* Injection point.
*/

View File

@@ -0,0 +1,85 @@
package app.revanced.extension.youtube.patches.theme;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.revanced.extension.shared.ResourceType;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseSettings;
/**
* Dynamic drawable that is either the regular or bolded ReVanced preference icon.
*
* This is needed because the YouTube ReVanced preference intent is an AndroidX preference,
* and AndroidX classes are not built into Android which makes programmatically changing
* the preference thru patching overly complex. This solves the problem by using a drawable
* wrapper to dynamically pick which icon drawable to use at runtime.
*/
@SuppressWarnings("unused")
public class ReVancedSettingsIconDynamicDrawable extends Drawable {
private final Drawable icon;
public ReVancedSettingsIconDynamicDrawable() {
final int resId = Utils.getResourceIdentifier(ResourceType.DRAWABLE,
BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get()
? "revanced_settings_icon"
: "revanced_settings_icon_bold"
);
icon = Utils.getContext().getDrawable(resId);
}
@Override
public void draw(@NonNull Canvas canvas) {
icon.draw(canvas);
}
@Override
public void setAlpha(int alpha) {
icon.setAlpha(alpha);
}
@Override
public void setColorFilter(@Nullable ColorFilter colorFilter) {
icon.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return icon.getOpacity();
}
@Override
public int getIntrinsicWidth() {
return icon.getIntrinsicWidth();
}
@Override
public int getIntrinsicHeight() {
return icon.getIntrinsicHeight();
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
icon.setBounds(left, top, right, bottom);
}
@Override
public void setBounds(@NonNull Rect bounds) {
super.setBounds(bounds);
icon.setBounds(bounds);
}
@Override
public void onBoundsChange(@NonNull Rect bounds) {
super.onBoundsChange(bounds);
icon.setBounds(bounds);
}
}

View File

@@ -285,7 +285,6 @@ public class Settings extends BaseSettings {
public static final BooleanSetting SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON = new BooleanSetting("revanced_switch_create_with_notifications_button", TRUE, true,
"revanced_switch_create_with_notifications_button_user_dialog_message");
public static final BooleanSetting NAVIGATION_BAR_ANIMATIONS = new BooleanSetting("revanced_navigation_bar_animations", FALSE);
public static final BooleanSetting NAVIGATION_BAR_DISABLE_BOLD_ICONS = new BooleanSetting("revanced_navigation_bar_disable_bold_icons", TRUE, true);
public static final BooleanSetting DISABLE_TRANSLUCENT_STATUS_BAR = new BooleanSetting("revanced_disable_translucent_status_bar", FALSE, true,
"revanced_disable_translucent_status_bar_user_dialog_message");
public static final BooleanSetting DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT = new BooleanSetting("revanced_disable_translucent_navigation_bar_light", FALSE, true);

View File

@@ -21,6 +21,9 @@ import app.revanced.extension.youtube.settings.search.YouTubeSearchViewControlle
@SuppressWarnings("deprecation")
public class YouTubeActivityHook extends BaseActivityHook {
private static final boolean SETTINGS_DISABLE_BOLD_ICONS
= Settings.SETTINGS_DISABLE_BOLD_ICONS.get();
private static int currentThemeValueOrdinal = -1; // Must initially be a non-valid enum ordinal value.
/**
@@ -148,4 +151,12 @@ public class YouTubeActivityHook extends BaseActivityHook {
public static boolean handleBackPress() {
return YouTubeSearchViewController.handleFinish(searchViewController);
}
/**
* Injection point.
*/
@SuppressWarnings("unused")
public static boolean useBoldIcons(boolean original) {
return !SETTINGS_DISABLE_BOLD_ICONS;
}
}

View File

@@ -284,7 +284,7 @@ public final class NavigationBar {
private static final int fillBellCairoBlack = Utils.getResourceIdentifier(ResourceType.DRAWABLE,
// The bold cairo notification filled icon is present,
// but YT still has not fixed the icon not associated to the enum.
VersionCheckPatch.IS_20_31_OR_GREATER && !Settings.NAVIGATION_BAR_DISABLE_BOLD_ICONS.get()
VersionCheckPatch.IS_20_31_OR_GREATER && !Settings.SETTINGS_DISABLE_BOLD_ICONS.get()
? "yt_fill_experimental_bell_vd_theme_24"
: "revanced_fill_bell_cairo_black_24");

View File

@@ -860,9 +860,10 @@ public final class app/revanced/patches/shared/misc/settings/SettingsPatchKt {
public abstract class app/revanced/patches/shared/misc/settings/preference/BasePreference {
public static final field Companion Lapp/revanced/patches/shared/misc/settings/preference/BasePreference$Companion;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getIcon ()Ljava/lang/String;
public final fun getIconBold ()Ljava/lang/String;
public final fun getKey ()Ljava/lang/String;
public final fun getLayout ()Ljava/lang/String;
public final fun getSummaryKey ()Ljava/lang/String;
@@ -886,9 +887,10 @@ public abstract class app/revanced/patches/shared/misc/settings/preference/BaseP
public abstract class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection {
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getIcon ()Ljava/lang/String;
public final fun getIconBold ()Ljava/lang/String;
public final fun getKey ()Ljava/lang/String;
public final fun getLayout ()Ljava/lang/String;
public final fun getPreferences ()Ljava/util/Set;
@@ -897,8 +899,8 @@ public abstract class app/revanced/patches/shared/misc/settings/preference/BaseP
}
public class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen : app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection {
public fun <init> (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;)V
public synthetic fun <init> (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;)V
public synthetic fun <init> (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun addPreferences ([Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;)V
public final fun getCategories ()Ljava/util/Set;
public synthetic fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;
@@ -906,8 +908,8 @@ public class app/revanced/patches/shared/misc/settings/preference/BasePreference
}
public class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen$Category : app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection {
public fun <init> (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
public synthetic fun <init> (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
public synthetic fun <init> (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun addPreferences ([Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;)V
public synthetic fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;
public fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/PreferenceCategory;
@@ -926,8 +928,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/InputTyp
}
public final class app/revanced/patches/shared/misc/settings/preference/IntentPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference {
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun equals (Ljava/lang/Object;)Z
public final fun getIntent ()Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;
public fun hashCode ()I
@@ -947,8 +949,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/ListPref
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/util/resource/ArrayResource;Lapp/revanced/util/resource/ArrayResource;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/util/resource/ArrayResource;Lapp/revanced/util/resource/ArrayResource;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getEntries ()Lapp/revanced/util/resource/ArrayResource;
public final fun getEntriesKey ()Ljava/lang/String;
public final fun getEntryValues ()Lapp/revanced/util/resource/ArrayResource;
@@ -957,22 +959,22 @@ public final class app/revanced/patches/shared/misc/settings/preference/ListPref
}
public final class app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference : app/revanced/patches/shared/misc/settings/preference/BasePreference {
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getSelectable ()Z
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
}
public class app/revanced/patches/shared/misc/settings/preference/PreferenceCategory : app/revanced/patches/shared/misc/settings/preference/BasePreference {
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getPreferences ()Ljava/util/Set;
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
}
public class app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference {
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getPreferences ()Ljava/util/Set;
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
}
@@ -1000,8 +1002,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/SummaryT
public final class app/revanced/patches/shared/misc/settings/preference/SwitchPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference {
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getSummaryOffKey ()Ljava/lang/String;
public final fun getSummaryOnKey ()Ljava/lang/String;
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
@@ -1009,8 +1011,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/SwitchPr
public final class app/revanced/patches/shared/misc/settings/preference/TextPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference {
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getInputType ()Lapp/revanced/patches/shared/misc/settings/preference/InputType;
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
}

View File

@@ -56,8 +56,14 @@ fun settingsPatch (
execute {
copyResources(
"settings",
ResourceGroup("xml", "revanced_prefs.xml", "revanced_prefs_icons.xml"),
ResourceGroup("menu", "revanced_search_menu.xml"),
ResourceGroup("xml",
"revanced_prefs.xml",
"revanced_prefs_icons.xml",
"revanced_prefs_icons_bold.xml"
),
ResourceGroup("menu",
"revanced_search_menu.xml"
),
ResourceGroup("drawable",
// CustomListPreference resources.
"revanced_ic_dialog_alert.xml",
@@ -65,8 +71,11 @@ fun settingsPatch (
"revanced_settings_arrow_time.xml",
"revanced_settings_custom_checkmark.xml",
"revanced_settings_search_icon.xml",
"revanced_settings_search_icon_bold.xml",
"revanced_settings_search_remove.xml",
"revanced_settings_search_remove_bold.xml",
"revanced_settings_toolbar_arrow_left.xml",
"revanced_settings_toolbar_arrow_left_bold.xml",
),
ResourceGroup("layout",
"revanced_custom_list_item_checked.xml",
@@ -127,19 +136,30 @@ fun settingsPatch (
// there is no easy way to change to the Android default preference layout
// after the preference is inflated.
// Using two different preference files is the simplest and most robust solution.
fun removeIconsAndLayout(preferences: Collection<BasePreference>) {
fun removeIconsAndLayout(preferences: Collection<BasePreference>, removeAllIconsAndLayout: Boolean) {
preferences.forEach { preference ->
preference.icon = null
preference.layout = null
if (removeAllIconsAndLayout) {
preference.iconBold = null
preference.layout = null
}
if (preference is PreferenceCategory) {
removeIconsAndLayout(preference.preferences)
removeIconsAndLayout(preference.preferences, removeAllIconsAndLayout)
} else if (preference is PreferenceScreenPreference) {
removeIconsAndLayout(preference.preferences)
removeIconsAndLayout(preference.preferences, removeAllIconsAndLayout)
}
}
}
removeIconsAndLayout(preferences)
// Bold icons.
removeIconsAndLayout(preferences, false)
document("res/xml/revanced_prefs_icons_bold.xml").use { document ->
val revancedPreferenceScreenNode = document.getNode("PreferenceScreen")
preferences.forEach { revancedPreferenceScreenNode.addPreference(it) }
}
removeIconsAndLayout(preferences, true)
document("res/xml/revanced_prefs.xml").use { document ->
val revancedPreferenceScreenNode = document.getNode("PreferenceScreen")

View File

@@ -20,6 +20,7 @@ abstract class BasePreference(
val titleKey: String? = "${key}_title",
val summaryKey: String? = "${key}_summary",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
val tag: String
) {
@@ -27,6 +28,9 @@ abstract class BasePreference(
var icon: String? = icon
internal set
var iconBold: String? = iconBold
internal set
var layout: String? = layout
internal set
@@ -44,8 +48,9 @@ abstract class BasePreference(
key?.let { setAttribute("android:key", it) }
titleKey?.let { setAttribute("android:title", "@string/${titleKey}") }
summaryKey?.let { addSummary(it) }
icon?.let {
setAttribute("android:icon", it)
if (icon != null || iconBold != null) {
setAttribute("android:icon", icon ?: iconBold)
setAttribute("app:iconSpaceReserved", "true")
}
layout?.let { setAttribute("android:layout", layout) }

View File

@@ -25,11 +25,12 @@ abstract class BasePreferenceScreen(
titleKey: String = "${key}_title",
private val summaryKey: String? = "${key}_summary",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
preferences: MutableSet<BasePreference> = mutableSetOf(),
val categories: MutableSet<Category> = mutableSetOf(),
private val sorting: Sorting = Sorting.BY_TITLE,
) : BasePreferenceCollection(key, titleKey, icon, layout, preferences) {
) : BasePreferenceCollection(key, titleKey, icon, iconBold, layout, preferences) {
override fun transform(): PreferenceScreenPreference {
return PreferenceScreenPreference(
@@ -37,6 +38,7 @@ abstract class BasePreferenceScreen(
titleKey,
summaryKey,
icon,
iconBold,
layout,
sorting,
// Screens and preferences are sorted at runtime by extension code,
@@ -61,16 +63,18 @@ abstract class BasePreferenceScreen(
key: String? = null,
titleKey: String = "${key}_title",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
preferences: MutableSet<BasePreference> = mutableSetOf(),
) : BasePreferenceCollection(key, titleKey, icon, layout, preferences) {
) : BasePreferenceCollection(key, titleKey, icon, iconBold, layout, preferences) {
override fun transform(): PreferenceCategory {
return PreferenceCategory(
key,
titleKey,
icon,
layout,
sorting,
key = key,
titleKey = titleKey,
icon = icon,
iconBold = iconBold,
layout = layout,
sorting = sorting,
preferences = preferences,
)
}
@@ -92,6 +96,7 @@ abstract class BasePreferenceScreen(
val key: String? = null,
val titleKey: String = "${key}_title",
val icon: String? = null,
val iconBold: String? = null,
val layout: String? = null,
val preferences: MutableSet<BasePreference> = mutableSetOf(),
) {

View File

@@ -19,10 +19,11 @@ class IntentPreference(
titleKey: String = "${key}_title",
summaryKey: String? = "${key}_summary",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
tag: String = "Preference",
val intent: Intent,
) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) {
) : BasePreference(key, titleKey, summaryKey, icon, iconBold, layout, tag) {
override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) =
super.serialize(ownerDocument, resourceCallback).apply {

View File

@@ -20,11 +20,12 @@ class ListPreference(
key: String? = null,
titleKey: String = "${key}_title",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
tag: String = "app.revanced.extension.shared.settings.preference.CustomDialogListPreference",
val entriesKey: String? = "${key}_entries",
val entryValuesKey: String? = "${key}_entry_values"
) : BasePreference(key, titleKey, null, icon, layout, tag) {
) : BasePreference(key, titleKey, null, icon, iconBold, layout, tag) {
var entries: ArrayResource? = null
private set
var entryValues: ArrayResource? = null

View File

@@ -21,10 +21,11 @@ class NonInteractivePreference(
titleKey: String = "${key}_title",
summaryKey: String? = "${key}_summary",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
tag: String = "Preference",
val selectable: Boolean = false,
) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) {
) : BasePreference(key, titleKey, summaryKey, icon, iconBold, layout, tag) {
override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) =
super.serialize(ownerDocument, resourceCallback).apply {
setAttribute("android:selectable", selectable.toString())

View File

@@ -19,11 +19,12 @@ open class PreferenceCategory(
key: String? = null,
titleKey: String? = "${key}_title",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
sorting: Sorting = Sorting.BY_TITLE,
tag: String = "PreferenceCategory",
val preferences: Set<BasePreference>
) : BasePreference(sorting.appendSortType(key), titleKey, null, icon, layout, tag) {
) : BasePreference(sorting.appendSortType(key), titleKey, null, icon, iconBold, layout, tag) {
override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) =
super.serialize(ownerDocument, resourceCallback).apply {

View File

@@ -22,6 +22,7 @@ open class PreferenceScreenPreference(
titleKey: String = "${key}_title",
summaryKey: String? = "${key}_summary",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
sorting: Sorting = Sorting.BY_TITLE,
tag: String = "PreferenceScreen",
@@ -32,7 +33,7 @@ open class PreferenceScreenPreference(
// or adding new attributes to the attrs.xml file.
// Since the key value is not currently used by the extensions,
// for now it's much simpler to modify the key to include the sort parameter.
) : BasePreference(sorting.appendSortType(key), titleKey, summaryKey, icon, layout, tag) {
) : BasePreference(sorting.appendSortType(key), titleKey, summaryKey, icon, iconBold, layout, tag) {
override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) =
super.serialize(ownerDocument, resourceCallback).apply {
preferences.forEach {

View File

@@ -20,10 +20,11 @@ class SwitchPreference(
titleKey: String = "${key}_title",
tag: String = "SwitchPreference",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
val summaryOnKey: String = "${key}_summary_on",
val summaryOffKey: String = "${key}_summary_off"
) : BasePreference(key, titleKey, null, icon, layout, tag) {
) : BasePreference(key, titleKey, null, icon, iconBold, layout, tag) {
override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) =
super.serialize(ownerDocument, resourceCallback).apply {
addSummary(summaryOnKey, SummaryType.ON)

View File

@@ -20,10 +20,11 @@ class TextPreference(
titleKey: String = "${key}_title",
summaryKey: String? = "${key}_summary",
icon: String? = null,
iconBold: String? = null,
layout: String? = null,
tag: String = "app.revanced.extension.shared.settings.preference.ResettableEditTextPreference",
val inputType: InputType = InputType.TEXT
) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) {
) : BasePreference(key, titleKey, summaryKey, icon, iconBold, layout, tag) {
override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) =
super.serialize(ownerDocument, resourceCallback).apply {

View File

@@ -66,13 +66,3 @@ internal val translucentNavigationButtonsSystemFeatureFlagFingerprint by fingerp
literal(45632194L) // Translucent system buttons feature flag.
)
}
// Flag is present in 20.23, but icons are missing and forcing bold icons crashes the app.
internal val boldIconsFeatureFlagFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
parameters()
instructions(
literal(45685201L)
)
}

View File

@@ -14,7 +14,6 @@ import app.revanced.patches.youtube.misc.navigation.hookNavigationButtonCreated
import app.revanced.patches.youtube.misc.navigation.navigationBarHookPatch
import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater
import app.revanced.patches.youtube.misc.playservice.is_20_15_or_greater
import app.revanced.patches.youtube.misc.playservice.is_20_31_or_greater
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
@@ -73,12 +72,6 @@ val navigationButtonsPatch = bytecodePatch(
)
}
if (is_20_31_or_greater) {
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
SwitchPreference("revanced_navigation_bar_disable_bold_icons")
)
}
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
PreferenceScreenPreference(
key = "revanced_navigation_buttons_screen",
@@ -153,16 +146,5 @@ val navigationButtonsPatch = bytecodePatch(
)
}
}
// Bold icon resources are found starting in 20.23, but many YT icons are not bold.
// 20.31 is the first version that seems to have all the bold icons.
if (is_20_31_or_greater) {
boldIconsFeatureFlagFingerprint.let {
it.method.insertLiteralOverride(
it.instructionMatches.first().index,
"$EXTENSION_CLASS_DESCRIPTOR->useBoldIcons(Z)Z"
)
}
}
}
}

View File

@@ -212,7 +212,7 @@ val lithoFilterPatch = bytecodePatch(
lithoConverterBufferUpbFeatureFlagFingerprint.let {
// Procool buffer has changed in 20.22, and UPB native code is now always enabled.
if (is_20_22_or_greater) {
Logger.getLogger(this::class.java.name).severe(
Logger.getLogger(this::class.java.name).warning(
"\n!!!" +
"\n!!! Litho filtering is not yet fully supported when patching 20.22+" +
"\n!!! Action buttons, Shorts shelves, and possibly other components cannot be set hidden." +

View File

@@ -33,4 +33,15 @@ internal val cairoFragmentConfigFingerprint by fingerprint {
literal(45532100L),
opcode(Opcode.MOVE_RESULT, 10)
)
}
}
// Flag is present in 20.23, but bold icons are missing and forcing them crashes the app.
// 20.31 is the first target with all the bold icons present.
internal val boldIconsFeatureFlagFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
parameters()
instructions(
literal(45685201L)
)
}

View File

@@ -12,15 +12,30 @@ import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.settings.overrideThemeColors
import app.revanced.patches.shared.misc.settings.preference.*
import app.revanced.patches.shared.misc.settings.preference.BasePreference
import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen
import app.revanced.patches.shared.misc.settings.preference.InputType
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
import app.revanced.patches.shared.misc.settings.preference.ListPreference
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.shared.misc.settings.preference.TextPreference
import app.revanced.patches.shared.misc.settings.settingsPatch
import app.revanced.patches.youtube.misc.check.checkEnvironmentPatch
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.fix.playbackspeed.fixPlaybackSpeedWhilePlayingPatch
import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater
import app.revanced.patches.youtube.misc.playservice.is_20_31_or_greater
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
import app.revanced.util.*
import app.revanced.util.ResourceGroup
import app.revanced.util.addInstructionsAtControlFlowLabel
import app.revanced.util.copyResources
import app.revanced.util.findElementByAttributeValueOrThrow
import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.insertLiteralOverride
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
@@ -44,8 +59,9 @@ private val settingsResourcePatch = resourcePatch {
IntentPreference(
titleKey = "revanced_settings_title",
summaryKey = null,
intent = newIntent("revanced_settings_intent"),
intent = newIntent("revanced_settings_intent")
) to "settings_fragment",
PreferenceCategory(
titleKey = "revanced_settings_title",
layout = "@layout/preference_group_title",
@@ -53,12 +69,12 @@ private val settingsResourcePatch = resourcePatch {
IntentPreference(
titleKey = "revanced_settings_submenu_title",
summaryKey = null,
icon = "@drawable/revanced_settings_icon",
icon = "@drawable/revanced_settings_icon_dynamic",
layout = "@layout/preference_with_icon",
intent = newIntent("revanced_settings_intent"),
intent = newIntent("revanced_settings_intent")
)
)
) to "settings_fragment_cairo",
) to "settings_fragment_cairo"
),
preferences = preferences
)
@@ -71,20 +87,35 @@ private val settingsResourcePatch = resourcePatch {
copyResources(
"settings",
ResourceGroup("drawable",
"revanced_settings_icon_dynamic.xml",
"revanced_settings_icon.xml",
"revanced_settings_icon_bold.xml",
"revanced_settings_screen_00_about.xml",
"revanced_settings_screen_00_about_bold.xml",
"revanced_settings_screen_01_ads.xml",
"revanced_settings_screen_01_ads_bold.xml",
"revanced_settings_screen_02_alt_thumbnails.xml",
"revanced_settings_screen_02_alt_thumbnails_bold.xml",
"revanced_settings_screen_03_feed.xml",
"revanced_settings_screen_03_feed_bold.xml",
"revanced_settings_screen_04_general.xml",
"revanced_settings_screen_04_general_bold.xml",
"revanced_settings_screen_05_player.xml",
"revanced_settings_screen_05_player_bold.xml",
"revanced_settings_screen_06_shorts.xml",
"revanced_settings_screen_06_shorts_bold.xml",
"revanced_settings_screen_07_seekbar.xml",
"revanced_settings_screen_07_seekbar_bold.xml",
"revanced_settings_screen_08_swipe_controls.xml",
"revanced_settings_screen_08_swipe_controls_bold.xml",
"revanced_settings_screen_09_return_youtube_dislike.xml",
"revanced_settings_screen_09_return_youtube_dislike_bold.xml",
"revanced_settings_screen_10_sponsorblock.xml",
"revanced_settings_screen_10_sponsorblock_bold.xml",
"revanced_settings_screen_11_misc.xml",
"revanced_settings_screen_11_misc_bold.xml",
"revanced_settings_screen_12_video.xml",
"revanced_settings_screen_12_video_bold.xml",
)
)
@@ -158,6 +189,7 @@ val settingsPatch = bytecodePatch(
preferences += NonInteractivePreference(
key = "revanced_settings_screen_00_about",
icon = "@drawable/revanced_settings_screen_00_about",
iconBold = "@drawable/revanced_settings_screen_00_about_bold",
layout = "@layout/preference_with_icon",
summaryKey = null,
tag = "app.revanced.extension.shared.settings.preference.ReVancedAboutPreference",
@@ -172,7 +204,23 @@ val settingsPatch = bytecodePatch(
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
SwitchPreference("revanced_settings_search_history"),
SwitchPreference("revanced_show_menu_icons")
)
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
if (is_20_31_or_greater) {
PreferenceCategory(
titleKey = null,
sorting = Sorting.UNSORTED,
tag = "app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory",
preferences = setOf(
SwitchPreference("revanced_show_menu_icons"),
SwitchPreference("revanced_settings_disable_bold_icons")
)
)
} else {
SwitchPreference("revanced_show_menu_icons")
}
)
PreferenceScreen.MISC.addPreferences(
@@ -208,6 +256,17 @@ val settingsPatch = bytecodePatch(
"$YOUTUBE_ACTIVITY_HOOK_CLASS_DESCRIPTOR->useCairoSettingsFragment(Z)Z"
)
// Bold icon resources are found starting in 20.23, but many YT icons are not bold.
// 20.31 is the first version that seems to have all the bold icons.
if (is_20_31_or_greater) {
boldIconsFeatureFlagFingerprint.let {
it.method.insertLiteralOverride(
it.instructionMatches.first().index,
"$YOUTUBE_ACTIVITY_HOOK_CLASS_DESCRIPTOR->useBoldIcons(Z)Z"
)
}
}
modifyActivityForSettingsInjection(
licenseActivityOnCreateFingerprint.classDef,
licenseActivityOnCreateFingerprint.method,
@@ -315,12 +374,14 @@ object PreferenceScreen : BasePreferenceScreen() {
key = "revanced_settings_screen_01_ads",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_01_ads",
iconBold = "@drawable/revanced_settings_screen_01_ads_bold",
layout = "@layout/preference_with_icon",
)
val ALTERNATIVE_THUMBNAILS = Screen(
key = "revanced_settings_screen_02_alt_thumbnails",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_02_alt_thumbnails",
iconBold = "@drawable/revanced_settings_screen_02_alt_thumbnails_bold",
layout = "@layout/preference_with_icon",
sorting = Sorting.UNSORTED,
)
@@ -328,36 +389,42 @@ object PreferenceScreen : BasePreferenceScreen() {
key = "revanced_settings_screen_03_feed",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_03_feed",
iconBold = "@drawable/revanced_settings_screen_03_feed_bold",
layout = "@layout/preference_with_icon",
)
val GENERAL_LAYOUT = Screen(
key = "revanced_settings_screen_04_general",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_04_general",
iconBold = "@drawable/revanced_settings_screen_04_general_bold",
layout = "@layout/preference_with_icon",
)
val PLAYER = Screen(
key = "revanced_settings_screen_05_player",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_05_player",
iconBold = "@drawable/revanced_settings_screen_05_player_bold",
layout = "@layout/preference_with_icon",
)
val SHORTS = Screen(
key = "revanced_settings_screen_06_shorts",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_06_shorts",
iconBold = "@drawable/revanced_settings_screen_06_shorts_bold",
layout = "@layout/preference_with_icon",
)
val SEEKBAR = Screen(
key = "revanced_settings_screen_07_seekbar",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_07_seekbar",
iconBold = "@drawable/revanced_settings_screen_07_seekbar_bold",
layout = "@layout/preference_with_icon",
)
val SWIPE_CONTROLS = Screen(
key = "revanced_settings_screen_08_swipe_controls",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_08_swipe_controls",
iconBold = "@drawable/revanced_settings_screen_08_swipe_controls_bold",
layout = "@layout/preference_with_icon",
sorting = Sorting.UNSORTED,
)
@@ -365,6 +432,7 @@ object PreferenceScreen : BasePreferenceScreen() {
key = "revanced_settings_screen_09_return_youtube_dislike",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_09_return_youtube_dislike",
iconBold = "@drawable/revanced_settings_screen_09_return_youtube_dislike_bold",
layout = "@layout/preference_with_icon",
sorting = Sorting.UNSORTED,
)
@@ -372,6 +440,7 @@ object PreferenceScreen : BasePreferenceScreen() {
key = "revanced_settings_screen_10_sponsorblock",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_10_sponsorblock",
iconBold = "@drawable/revanced_settings_screen_10_sponsorblock_bold",
layout = "@layout/preference_with_icon",
sorting = Sorting.UNSORTED,
)
@@ -379,12 +448,14 @@ object PreferenceScreen : BasePreferenceScreen() {
key = "revanced_settings_screen_11_misc",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_11_misc",
iconBold = "@drawable/revanced_settings_screen_11_misc_bold",
layout = "@layout/preference_with_icon",
)
val VIDEO = Screen(
key = "revanced_settings_screen_12_video",
summaryKey = null,
icon = "@drawable/revanced_settings_screen_12_video",
iconBold = "@drawable/revanced_settings_screen_12_video_bold",
layout = "@layout/preference_with_icon",
sorting = Sorting.BY_KEY,
)

View File

@@ -82,6 +82,9 @@ Second \"item\" text"</string>
<string name="revanced_settings_search_history_title">Show settings search history</string>
<string name="revanced_settings_search_history_summary_on">Settings search history is shown</string>
<string name="revanced_settings_search_history_summary_off">Settings search history is not shown</string>
<string name="revanced_settings_disable_bold_icons_title">Disable bold icons</string>
<string name="revanced_settings_disable_bold_icons_summary_on">Icons are not bold</string>
<string name="revanced_settings_disable_bold_icons_summary_off">Icons are bold</string>
<string name="revanced_show_menu_icons_title">Show ReVanced setting icons</string>
<string name="revanced_show_menu_icons_summary_on">Setting icons are shown</string>
<string name="revanced_show_menu_icons_summary_off">Setting icons are not shown</string>
@@ -792,9 +795,6 @@ If changing this setting does not take effect, try switching to Incognito mode."
<string name="revanced_navigation_bar_animations_title">Enable navigation bar animations</string>
<string name="revanced_navigation_bar_animations_summary_on">Navigation transitions are animated</string>
<string name="revanced_navigation_bar_animations_summary_off">Navigation transitions are not animated</string>
<string name="revanced_navigation_bar_disable_bold_icons_title">Disable bold icons</string>
<string name="revanced_navigation_bar_disable_bold_icons_summary_on">Icons are not bold</string>
<string name="revanced_navigation_bar_disable_bold_icons_summary_off">Icons are bold</string>
<string name="revanced_disable_translucent_status_bar_title">Disable translucent status bar</string>
<string name="revanced_disable_translucent_status_bar_summary_on">Status bar is opaque</string>
<string name="revanced_disable_translucent_status_bar_summary_off">Status bar is opaque or translucent</string>

View File

@@ -0,0 +1,20 @@
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:fillType="evenOdd"
android:pathData="M21.9342,3.05381 C22.0403,2.82135,22.017,2.55323,21.8722,2.34075 C21.7277,2.12828,21.4811,2.00023,21.2168,2.00023 L20.2025,2.00023 C19.9805,2.00023,19.7796,2.12634,19.6903,2.32142 C18.7975,4.27368,14.0858,14.5775,12.5121,18.0188 C12.4228,18.2139,12.2219,18.34,11.9999,18.34 C11.7779,18.34,11.577,18.2139,11.4877,18.0188 C9.91413,14.5775,5.20222,4.27368,4.30965,2.32142 C4.22037,2.12634,4.01944,2.00023,3.79747,2.00023 L2.78317,2.00023 C2.51891,2.00023,2.27233,2.12828,2.12756,2.34075 C1.98301,2.55323,1.95974,2.82135,2.0658,3.05381 C3.75249,6.75037,9.3601,19.0395,10.5057,21.5497 C10.6306,21.8232,10.9121,22,11.2231,22 L12.7769,22 C13.0879,22,13.3694,21.8232,13.4943,21.5497 C14.6397,19.0395,20.2476,6.7504,21.9342,3.0538 Z"
android:strokeLineJoin="round"
android:strokeMiterLimit="2" />
<path
android:fillColor="?android:attr/textColorPrimary"
android:fillType="evenOdd"
android:pathData="M12.5812,11.6776 C12.4613,11.8771,12.2397,11.9999,11.9999,11.9999 C11.7601,11.9999,11.5385,11.8771,11.4186,11.6776 C10.2015,9.65367,7.39776,4.99071,6.18062,2.96678 C6.0607,2.76727,6.0607,2.52176,6.18062,2.32225 C6.30044,2.12308,6.52202,2,6.76186,2 L17.2378,2 C17.4777,2,17.6992,2.12308,17.8192,2.32227 C17.9391,2.52178,17.9391,2.76729,17.8192,2.9668 C16.6021,4.99073,13.7984,9.65369,12.5812,11.6776 Z"
android:strokeLineJoin="round"
android:strokeMiterLimit="2" />
</vector>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
<!--<selector xmlns:android="http://schemas.android.com/apk/res/android"-->
<!-- class="app.revanced.extension.youtube.patches.theme.ReVancedSettingsIconDynamicDrawable">-->
<!-- &lt;!&ndash; This is just a placeholder item to make the XML valid &ndash;&gt;-->
<!-- <item android:drawable="@android:color/transparent" />-->
<!--</selector>-->
<drawable xmlns:android="http://schemas.android.com/apk/res/android"
class="app.revanced.extension.youtube.patches.theme.ReVancedSettingsIconDynamicDrawable" />

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M12,1C5.925,1 1,5.925 1,12s4.925,11 11,11 11,-4.925 11,-11S18.075,1 12,1ZM12,3a9,9 0,1 1,0 18.001A9,9 0,0 1,12 3ZM12,6.75a1.25,1.25 0,1 0,0 2.5,1.25 1.25,0 0,0 0,-2.5ZM13,15v-5h-2.5a1,1 0,0 0,0 2h0.5v3h-1a1,1 0,0 0,0 2h4a1,1 0,0 0,0 -2h-1Z" />
</vector>

View File

@@ -0,0 +1,26 @@
<!--
https://github.com/google/material-design-icons/blob/bb04090f930e272697f2a1f0d7b352d92dfeee43/symbols/android/campaign/materialsymbolsrounded/campaign_wght500_24px.xml
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M21.2734,13.0898 L19.1797,13.0898 C18.8711,13.0898,18.6133,12.9844,18.4023,12.7773 C18.1953,12.5664,18.0898,12.3086,18.0898,12 C18.0898,11.6914,18.1953,11.4336,18.4023,11.2227 C18.6133,11.0156,18.8711,10.9102,19.1797,10.9102 L21.2734,10.9102 C21.582,10.9102,21.8438,11.0156,22.0508,11.2227 C22.2617,11.4336,22.3633,11.6914,22.3633,12 C22.3633,12.3086,22.2617,12.5664,22.0508,12.7773 C21.8438,12.9844,21.582,13.0898,21.2734,13.0898 Z M16.7148,16.7461 C16.8945,16.4961,17.1328,16.3516,17.4258,16.3125 C17.7188,16.2734,17.9883,16.3438,18.2383,16.5273 L19.9102,17.7813 C20.1602,17.9648,20.3047,18.2031,20.3438,18.4961 C20.3828,18.7891,20.3125,19.0586,20.1289,19.3086 C19.9453,19.5625,19.707,19.707,19.4141,19.7461 C19.125,19.7852,18.8516,19.7148,18.5977,19.5313 L16.9258,18.2734 C16.6758,18.0898,16.5313,17.8516,16.4961,17.5586 C16.457,17.2656,16.5313,16.9961,16.7148,16.7461 Z M19.9102,6.21875 L18.2383,7.47266 C17.9883,7.65625,17.7188,7.72656,17.4258,7.6875 C17.1328,7.64844,16.8945,7.50391,16.7148,7.25391 C16.5313,7.00391,16.457,6.73438,16.4922,6.44141 C16.5313,6.14844,16.6719,5.91016,16.9258,5.72656 L18.6016,4.46875 C18.8555,4.28516,19.1289,4.21484,19.418,4.25391 C19.7109,4.29297,19.9453,4.4375,20.1289,4.69141 C20.3125,4.94141,20.3828,5.21094,20.3438,5.50391 C20.3047,5.79688,20.1602,6.03516,19.9102,6.21875 Z M4.63672,15.2031 L3.81641,15.2031 C3.20313,15.1797,2.6875,14.9453,2.26953,14.5039 C1.84766,14.0625,1.63672,13.5391,1.63672,12.9297 L1.63672,11.0703 C1.63672,10.4453,1.85938,9.91016,2.30469,9.46484 C2.75,9.01953,3.28516,8.79688,3.91016,8.79688 L7.77734,8.79688 L11.3086,6.66797 C11.6875,6.4375,12.0703,6.4375,12.457,6.66016 C12.8438,6.88281,13.0352,7.21484,13.0352,7.65625 L13.0352,16.3438 C13.0352,16.7852,12.8438,17.1172,12.457,17.3398 C12.0703,17.5625,11.6875,17.5625,11.3086,17.332 L7.77734,15.2031 L6.94531,15.2031 L6.94531,18.0469 C6.94531,18.3711,6.83594,18.6445,6.60938,18.8672 C6.38672,19.0898,6.11328,19.2031,5.78906,19.2031 C5.46875,19.2031,5.19531,19.0898,4.97266,18.8672 C4.74609,18.6445,4.63672,18.3711,4.63672,18.0469 Z M10.7617,14.332 L10.7617,9.66797 L8.38281,11.0703 L3.91016,11.0703 L3.91016,12.9297 L8.38281,12.9297 Z M14.0352,15.5547 L14.0352,8.44531 C14.5469,8.86328,14.9531,9.37891,15.2617,9.99219 C15.5664,10.6094,15.7227,11.2773,15.7227,12 C15.7227,12.7227,15.5664,13.3906,15.2617,14.0078 C14.9531,14.6211,14.5469,15.1367,14.0352,15.5547 Z M7.33984,12 Z M7.33984,12" />
</vector>

View File

@@ -0,0 +1,20 @@
<!--
https://github.com/ajayyy/DeArrow/blob/4d9e85b41382de0cc8ec2053789455b374b7a70d/public/icons/logo.svg
Changes made: The DeArrow logo was resized.
Copyright 2023 Ajay Ramachandran <dev@ajay.app>
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M15.3167,11.9222 C15.3167,13.6784,13.8439,15.1565,12.0878,15.1565 C10.3317,15.1565,8.96963,13.6784,8.96963,11.9222 C8.96963,10.166,10.3317,8.73604,12.0878,8.73604 C13.8439,8.73604,15.3167,10.166,15.3167,11.9222 Z" />
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M12.0898,1 C9.11051,1,6.47604,2.46218,4.52344,4.45703 C2.57082,6.45189,1,9.14131,1,12.1855 C1,15.2298,2.21732,18.2805,4.16992,20.2754 C6.12253,22.2702,9.1099,22.9512,12.0898,22.9512 C15.0698,22.9512,17.5923,21.7956,19.5449,19.8008 C21.4975,17.8059,23,15.2298,23,12.1855 C23,9.14193,21.7364,6.32103,19.7832,4.32617 C17.8306,2.33133,15.0692,1,12.0898,1 Z M11.8906,3.42578 C14.2597,3.42578,16.3243,4.74678,17.877,6.29883 C19.4297,7.85087,20.4648,9.91599,20.4648,12.2852 C20.4648,14.6543,19.6836,16.9733,18.1309,18.5254 C16.5782,20.0774,14.259,20.5254,11.8906,20.5254 C9.52227,20.5254,7.53903,19.7415,5.98633,18.1895 C4.43363,16.6374,3.53516,14.6543,3.53516,12.2852 C3.53516,9.91599,4.17849,7.67581,5.73047,6.12305 C7.28245,4.57029,9.52154,3.42578,11.8906,3.42578 Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M20,2L8,2a2,2 0,0 0,-2 2v12a2,2 0,0 0,2 2h12a2,2 0,0 0,2 -2L22,4a2,2 0,0 0,-2 -2ZM8,16L8,4h12v12L8,16ZM4,20L4,6a2,2 0,0 0,-2 2v12a2,2 0,0 0,2 2h12a2,2 0,0 0,2 -2L4,20ZM17,10 L12,7v6l5,-3Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M12.844,1h-1.687a2,2 0,0 0,-1.962 1.616,3 3,0 0,1 -3.92,2.263 2,2 0,0 0,-2.38 0.891l-0.842,1.46a2,2 0,0 0,0.417 2.507,3 3,0 0,1 0,4.525 2,2 0,0 0,-0.417 2.507l0.843,1.46a2,2 0,0 0,2.38 0.892,3.001 3.001,0 0,1 3.918,2.263A2,2 0,0 0,11.157 23h1.686a2,2 0,0 0,1.963 -1.615,3.002 3.002,0 0,1 3.92,-2.263 2,2 0,0 0,2.38 -0.892l0.842,-1.46a2,2 0,0 0,-0.418 -2.507,3 3,0 0,1 0,-4.526 2,2 0,0 0,0.418 -2.508l-0.843,-1.46a2,2 0,0 0,-2.38 -0.891,3 3,0 0,1 -3.919,-2.263A2,2 0,0 0,12.844 1ZM11.077,3.347a6,6 0,0 0,0.08 -0.347h1.687a4.98,4.98 0,0 0,2.407 3.37,4.98 4.98,0 0,0 4.122,0.4l0.843,1.46A4.98,4.98 0,0 0,18.5 12a4.98,4.98 0,0 0,1.716 3.77l-0.843,1.46a4.98,4.98 0,0 0,-4.123 0.4A4.979,4.979 0,0 0,12.843 21h-1.686a4.98,4.98 0,0 0,-2.408 -3.371,4.999 4.999,0 0,0 -4.12,-0.399l-0.844,-1.46A4.979,4.979 0,0 0,5.5 12a4.98,4.98 0,0 0,-1.715 -3.77l0.842,-1.459a4.98,4.98 0,0 0,4.123 -0.399,4.981 4.981,0 0,0 2.327,-3.025ZM16,12a4,4 0,1 1,-7.999 0,4 4,0 0,1 8,0ZM12,14a2,2 0,1 0,0 -4,2 2,0 0,0 0,4Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M5,4.623v14.755a1.5,1.5 0,0 0,2.261 1.294l12.766,-7.51L22,12.002l-1.973,-1.162L7.26,3.33A1.5,1.5 0,0 0,5 4.623ZM7,18.503L7,5.497L18.056,12 7,18.503Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M13.467,1.19 l-8,4.7a5,5 0,0 0,-0.255 8.46,5 5,0 0,0 5.32,8.462l8,-4.7a5,5 0,0 0,0.258 -8.462,5 5,0 0,0 1.641,-6.464l-0.12,-0.217a5,5 0,0 0,-6.844 -1.78m5.12,2.79a2.999,2.999 0,0 1,-1.067 4.107l-1.327,0.78a1,1 0,0 0,0.096 1.775l0.943,0.423a3,3 0,0 1,0.288 5.323l-8,4.7a3,3 0,0 1,-3.039 -5.173l1.327,-0.78a1,1 0,0 0,-0.097 -1.775l-0.942,-0.423a3,3 0,0 1,-0.288 -5.323l8,-4.7a3,3 0,0 1,4.106 1.066ZM15,12l-5,-3v6l5,-3Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M8.99981,8 A4.002865,4.0002529,0,0,0,5.12652,11.0021 L2.99943,11.0021 A1.0007162,1.0000632,0,0,0,2.99943,13.0036 L5.12652,13.0036 A4.0048664,4.002253,0,0,0,12.8731,13.0036 L21.0006,13.0036 A1.0007162,1.0000632,0,0,0,21.0006,11.0022 L12.8731,11.0022 A4.002865,4.0002529,0,0,0,8.99981,8 Z M8.99981,10.0014 A2.0014325,2.0001264,0,0,1,8.99981,14.0043 A2.0014325,2.0001264,0,0,1,8.99981,10.0014 Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M8.99981,8 A4.002865,4.0002529,0,0,0,5.12652,11.0021 L2.99943,11.0021 A1.0007162,1.0000632,0,0,0,2.99943,13.0036 L5.12652,13.0036 A4.0048664,4.002253,0,0,0,12.8731,13.0036 L21.0006,13.0036 A1.0007162,1.0000632,0,0,0,21.0006,11.0022 L12.8731,11.0022 A4.002865,4.0002529,0,0,0,8.99981,8 Z M8.99981,10.0014 A2.0014325,2.0001264,0,0,1,8.99981,14.0043 A2.0014325,2.0001264,0,0,1,8.99981,10.0014 Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M11.31,2 l0.392,0.007c1.824,0.06 3.61,0.534 5.223,1.388l0.343,0.189 0.27,0.154c0.264,0.152 0.56,0.24 0.863,0.26l0.13,0.004H20.5a1.5,1.5 0,0 1,1.5 1.5V11.5a1.5,1.5 0,0 1,-1.5 1.5h-1.79l-0.158,0.013a1,1 0,0 0,-0.723 0.512l-0.064,0.145 -2.987,8.535a1,1 0,0 1,-1.109 0.656l-1.04,-0.174a4,4 0,0 1,-3.251 -4.783L10,15H5.938a3.664,3.664 0,0 1,-3.576 -2.868A3.682,3.682 0,0 1,3 9.15l-0.02,-0.088A3.816,3.816 0,0 1,4 5.5v-0.043l0.008,-0.227a2.86,2.86 0,0 1,0.136 -0.664l0.107,-0.28A3.754,3.754 0,0 1,7.705 2h3.605ZM7.705,4c-0.755,0 -1.425,0.483 -1.663,1.2l-0.032,0.126a0.818,0.818 0,0 0,-0.01 0.131v0.872l-0.587,0.586a1.816,1.816 0,0 0,-0.524 1.465l0.038,0.23 0.02,0.087 0.21,0.9 -0.55,0.744a1.686,1.686 0,0 0,-0.321 1.18l0.029,0.177c0.17,0.76 0.844,1.302 1.623,1.302H10a2.002,2.002 0,0 1,1.956 2.419l-0.623,2.904 -0.034,0.208a2.002,2.002 0,0 0,1.454 2.139l0.206,0.045 0.21,0.035 2.708,-7.741A3.001,3.001 0,0 1,18.71 11H20V6.002h-1.47c-0.696,0 -1.38,-0.183 -1.985,-0.528l-0.27,-0.155 -0.285,-0.157A10.002,10.002 0,0 0,11.31 4H7.705Z" />
</vector>

View File

@@ -0,0 +1,20 @@
<!--
https://github.com/ajayyy/SponsorBlock/blob/e1d656f43f8b3cfb40e1c521e4103d61db756872/public/icons/PlayerStartIconSponsorBlocker.svg
Changes made: The SponsorBlock logo was inverted.
Copyright 2021 Ajay Ramachandran <dev@ajay.app>
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M1.99219,3.51563 C1.37141,3.8503,0.988667,4.49868,1,5.20117 C1.1021,12.3909,4.8421,18.9426,11.0039,22.7246 C11.6168,23.0914,12.3832,23.0914,12.9961,22.7246 C19.1579,18.9417,22.8975,12.3909,23,5.20117 C23.0116,4.49849,22.6288,3.85028,22.0078,3.51563 C15.7798,0.162157,8.20704,0.168825,1.99219,3.51563 Z M20.5723,5.00586 C20.8388,5.151,21.0033,5.52221,21,5.82422 C20.9123,11.9927,17.3689,17.7513,12.4297,20.7793 C12.1663,20.9397,11.8337,20.9397,11.5703,20.7793 C6.63106,17.7513,3.08771,11.9927,3,5.82422 C2.99672,5.52222,3.18352,5.14551,3.42773,5.00586 C8.3842,2.1716,15.408,2.23147,20.5723,5.00586 Z" />
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M9.635,7.47461 L9.635,14.4066 C9.63455,14.952,10.1735,15.2913,10.6008,15.0145 L16.0542,11.4863 L16.897,10.9413 L16.0542,10.3954 L10.6004,6.86715 C10.1733,6.59109,9.63507,6.92975,9.635,7.47461 Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M10.252,2.087 L6.951,8.029c-0.74,1.332 0.223,2.97 1.748,2.97h6.602c1.524,-0.001 2.488,-1.638 1.747,-2.971l-3.3,-5.941c-0.762,-1.371 -2.734,-1.371 -3.496,0ZM8.699,8.999 L12,3.059l3.301,5.94L8.699,8.999ZM18,12.748a5.251,5.251 0,1 0,0 10.502,5.251 5.251,0 0,0 0,-10.502ZM9,12.998L3,12.998a2,2 0,0 0,-2 2v6a2,2 0,0 0,2 2h6a2,2 0,0 0,2 -2v-6a2,2 0,0 0,-2 -2ZM18,14.748a3.25,3.25 0,1 1,0 6.5,3.25 3.25,0 0,1 0,-6.5ZM3,20.998v-6h6v6L3,20.998Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M21,3L3,3a2,2 0,0 0,-2 2v14a2,2 0,0 0,2 2h18a2,2 0,0 0,2 -2L23,5a2,2 0,0 0,-2 -2ZM3,19L3,5h18v14L3,19ZM10,8a1,1 0,0 0,-1 1v2L7,11L7,9a1,1 0,0 0,-2 0v6a1,1 0,1 0,2 0v-2h2v2a1,1 0,1 0,2 0L11,9a1,1 0,0 0,-1 -1ZM15.5,8L14,8a1,1 0,0 0,-1 1v6a1,1 0,0 0,1 1h1.5a3.5,3.5 0,0 0,3.5 -3.5v-1A3.5,3.5 0,0 0,15.5 8ZM15,14v-4h0.5a1.5,1.5 0,0 1,1.5 1.5v1a1.5,1.5 0,0 1,-1.5 1.5L15,14Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M11,2a9,9 0,1 0,5.641 16.01,0.966 0.966,0 0,0 0.152,0.197l3.5,3.5a1,1 0,1 0,1.414 -1.414l-3.5,-3.5a1,1 0,0 0,-0.197 -0.153A8.96,8.96 0,0 0,20 11a9,9 0,0 0,-9 -9ZM11,4a7,7 0,1 1,0 14,7 7,0 0,1 0,-14Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M19,3h-4L15,2a1,1 0,0 0,-1 -1h-4a1,1 0,0 0,-1 1v1L5,3a2,2 0,0 0,-2 2h18a2,2 0,0 0,-2 -2ZM6,19L6,7L4,7v12a4,4 0,0 0,4 4h8a4,4 0,0 0,4 -4L20,7h-2v12a2,2 0,0 1,-2 2L8,21a2,2 0,0 1,-2 -2ZM10,8a1,1 0,0 0,-1 1v8a1,1 0,1 0,2 0L11,9a1,1 0,0 0,-1 -1ZM14,8a1,1 0,0 0,-1 1v8a1,1 0,0 0,2 0L15,9a1,1 0,0 0,-1 -1Z" />
</vector>

View File

@@ -0,0 +1,25 @@
<!--
Copyright 2022 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M10.293,4.293 L2.586,12l7.707,7.706a1,1 0,1 0,1.414 -1.413L6.414,13H20a1,1 0,0 0,0 -2H6.414l5.293,-5.292a1,1 0,0 0,-1.414 -1.415Z" />
</vector>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:key="revanced_settings_root_screen_sort_by_key"> <!-- Sort by preference key -->
</PreferenceScreen>