diff --git a/app/src/main/java/ru/vtosters/lite/hooks/SwitchHook.java b/app/src/main/java/ru/vtosters/lite/hooks/SwitchHook.java
new file mode 100644
index 000000000..a5dc4d25d
--- /dev/null
+++ b/app/src/main/java/ru/vtosters/lite/hooks/SwitchHook.java
@@ -0,0 +1,82 @@
+package ru.vtosters.lite.hooks;
+
+import android.content.res.ColorStateList;
+import android.graphics.drawable.Drawable;
+import android.widget.Switch;
+import androidx.appcompat.widget.SwitchCompat;
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.drawable.DrawableCompat;
+import com.vk.core.ui.themes.VKThemeHelper;
+import com.vk.core.util.ColorUtils;
+import ru.vtosters.lite.utils.AndroidUtils;
+import ru.vtosters.lite.utils.Preferences;
+import ru.vtosters.lite.utils.ThemesUtils;
+
+import static com.vk.core.ui.themes.VKThemeHelper.r;
+import static com.vtosters.lite.R.color.*;
+
+public class SwitchHook {
+ private static final int[] SWITCH_COLORS = {
+ getSwitchColor(),
+ getDisabledSwitchColor(),
+ ContextCompat.getColor(VKThemeHelper.u(), gray_20),
+ ThemesUtils.getAccentColor()
+ };
+ private static final int[] TRACK_COLORS = {
+ ColorUtils.b(ThemesUtils.getColorFromAttr(com.vtosters.lite.R.attr.loader_track_fill), 0.4f),
+ ColorUtils.b(ThemesUtils.getAccentColor(), 0.12f),
+ ThemesUtils.getColorFromAttr(com.vtosters.lite.R.attr.loader_track_fill),
+ ColorUtils.b(ThemesUtils.getAccentColor(), 0.48f)
+ };
+
+ public static void setSwitchCompatColors(SwitchCompat switchCompat) {
+ if (Preferences.getBoolValue("useCustomPrefsStyle", false)) {
+ switchCompat.setThumbDrawable(setTintList(getCustomThumb(), new ColorStateList(createTrackColorStateList(), SWITCH_COLORS)));
+ switchCompat.setTrackDrawable(setTintList(getCustomTrack(), new ColorStateList(createTrackColorStateList(), TRACK_COLORS)));
+ } else {
+ DrawableCompat.setTintList(DrawableCompat.wrap(switchCompat.getThumbDrawable()), new ColorStateList(createTrackColorStateList(), SWITCH_COLORS));
+ DrawableCompat.setTintList(DrawableCompat.wrap(switchCompat.getTrackDrawable()), new ColorStateList(createTrackColorStateList(), TRACK_COLORS));
+ }
+ }
+
+ public static void setSwitchColors(Switch drawableCompat) {
+ if (Preferences.getBoolValue("useCustomPrefsStyle", false)) {
+ drawableCompat.setThumbDrawable(setTintList(getCustomThumb(), new ColorStateList(createTrackColorStateList(), SWITCH_COLORS)));
+ drawableCompat.setTrackDrawable(setTintList(getCustomTrack(), new ColorStateList(createTrackColorStateList(), TRACK_COLORS)));
+ } else {
+ DrawableCompat.setTintList(DrawableCompat.wrap(drawableCompat.getThumbDrawable()), new ColorStateList(createTrackColorStateList(), SWITCH_COLORS));
+ DrawableCompat.setTintList(DrawableCompat.wrap(drawableCompat.getTrackDrawable()), new ColorStateList(createTrackColorStateList(), TRACK_COLORS));
+ }
+ }
+
+ private static int[][] createTrackColorStateList() {
+ return new int[][]{
+ new int[]{-android.R.attr.state_enabled, -android.R.attr.state_checked},
+ new int[]{-android.R.attr.state_enabled, android.R.attr.state_checked},
+ new int[]{-android.R.attr.state_checked},
+ new int[]{android.R.attr.state_checked}
+ };
+ }
+
+ public static Drawable setTintList(Drawable d, ColorStateList color) {
+ Drawable wrappedDrawable = DrawableCompat.wrap(d);
+ DrawableCompat.setTintList(wrappedDrawable, color);
+ return wrappedDrawable;
+ }
+
+ private static int getSwitchColor() {
+ return ContextCompat.getColor(VKThemeHelper.u(), r() ? gray_800 : white);
+ }
+
+ private static Drawable getCustomTrack() {
+ return AndroidUtils.getGlobalContext().getDrawable(AndroidUtils.getIdentifier("custom_track_selector", "drawable"));
+ }
+
+ private static Drawable getCustomThumb() {
+ return AndroidUtils.getGlobalContext().getDrawable(AndroidUtils.getIdentifier("custom_thumb_selector", "drawable"));
+ }
+
+ private static int getDisabledSwitchColor() {
+ return ContextCompat.getColor(VKThemeHelper.u(), r() ? switch_disabled_on_dark : switch_disabled_on_light);
+ }
+}
diff --git a/smali/res/drawable/custom_thumb_selector.xml b/smali/res/drawable/custom_thumb_selector.xml
new file mode 100644
index 000000000..0a6206040
--- /dev/null
+++ b/smali/res/drawable/custom_thumb_selector.xml
@@ -0,0 +1,19 @@
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/smali/res/drawable/custom_track_selector.xml b/smali/res/drawable/custom_track_selector.xml
new file mode 100644
index 000000000..224acbab5
--- /dev/null
+++ b/smali/res/drawable/custom_track_selector.xml
@@ -0,0 +1,17 @@
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/smali/res/xml/preferences_debug.xml b/smali/res/xml/preferences_debug.xml
index eceb0cf20..2ad88e31e 100644
--- a/smali/res/xml/preferences_debug.xml
+++ b/smali/res/xml/preferences_debug.xml
@@ -38,6 +38,10 @@
android:defaultValue="true"
android:key="useNewSettings"
android:title="@string/useNewSettings_title"/>
+
setSwitchColors(Landroid/widget/Switch;)V
+
+ return-void
+
.line 90
invoke-virtual {p1}, Landroid/widget/Switch;->getThumbDrawable()Landroid/graphics/drawable/Drawable;
@@ -2835,6 +2839,10 @@
.method public final a(Landroidx/appcompat/widget/SwitchCompat;)V
.locals 4
+ invoke-static {p1}, Lru/vtosters/lite/hooks/SwitchHook;->setSwitchCompatColors(Landroidx/appcompat/widget/SwitchCompat;)V
+
+ return-void
+
.line 88
invoke-virtual {p1}, Landroidx/appcompat/widget/SwitchCompat;->getThumbDrawable()Landroid/graphics/drawable/Drawable;