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;