From 96de61fd15813bba43c2fd827e0edacdad4f986a Mon Sep 17 00:00:00 2001 From: aliveoutside <53598473+aliveoutside@users.noreply.github.com> Date: Tue, 22 Nov 2022 18:00:12 +0300 Subject: [PATCH] move some stuff from ThemesUtils --- .../vtosters/lite/themes/ColorReferences.java | 13 ++- .../ru/vtosters/lite/themes/ThemesHacks.java | 5 +- .../lite/themes/hooks/TextViewHook.java | 2 + .../lite/themes/hooks/VKImageViewHook.java | 3 +- .../lite/themes/utils/RecolorUtils.java | 91 +++++++++++++++++++ .../ru/vtosters/lite/utils/ThemesUtils.java | 63 ------------- 6 files changed, 104 insertions(+), 73 deletions(-) create mode 100644 app/src/main/java/ru/vtosters/lite/themes/utils/RecolorUtils.java diff --git a/app/src/main/java/ru/vtosters/lite/themes/ColorReferences.java b/app/src/main/java/ru/vtosters/lite/themes/ColorReferences.java index 1217785b3..f46fc4904 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/ColorReferences.java +++ b/app/src/main/java/ru/vtosters/lite/themes/ColorReferences.java @@ -6,13 +6,12 @@ import android.graphics.Color; import java.util.Arrays; import java.util.List; -import ru.vtosters.lite.utils.ThemesUtils; - public class ColorReferences { - public static List accentColors = Arrays.asList( - "5692d7", "528bcc", "7aa0cc", "518bcc", "6296d0", "2f68aa", "638ebf", "5181b8", "71aaeb", - "4774a8", "5baaf4", "4186c8", "add3ff", "4774a8", "718198", "5a9eff", "99a2ad", "74a2d6", - "e9eef3", "dfe3e7", "eff1f3", "5c9ce6", "4986cc", "4680c2", "3f8ae0" + public static List accentColors = Arrays.asList( + Color.parseColor("#3f8ae0"), // azure_300 (light accent) + Color.parseColor("#4986cc"), // azure_a400 + Color.parseColor("#528bcc"), // another light accent + Color.parseColor("#71AAEB") // vk_sky_300 (dark accent) ); public static boolean isAccentedColor(ColorStateList target) { @@ -20,7 +19,7 @@ public class ColorReferences { } public static boolean isAccentedColor(int target) { - return accentColors.contains(ThemesUtils.hexx(target).toLowerCase()); + return accentColors.contains(target); } public static boolean isColorRefAccented(int target) { diff --git a/app/src/main/java/ru/vtosters/lite/themes/ThemesHacks.java b/app/src/main/java/ru/vtosters/lite/themes/ThemesHacks.java index 1337101a1..051a07881 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/ThemesHacks.java +++ b/app/src/main/java/ru/vtosters/lite/themes/ThemesHacks.java @@ -17,6 +17,7 @@ import androidx.annotation.NonNull; import com.vtosters.lite.R; +import ru.vtosters.lite.themes.utils.RecolorUtils; import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.ThemesUtils; @@ -37,7 +38,7 @@ public class ThemesHacks { if (i != R.layout.themed_feed_tab_2) { return; } - textView.setTextColor(ThemesUtils.recolorCSL(textView.getTextColors())); + textView.setTextColor(RecolorUtils.recolorCSL(textView.getTextColors())); ((InsetDrawable) ((DrawableContainer.DrawableContainerState) textView.getBackground().getConstantState()).getChildren()[0]).getDrawable().setTint(ThemesUtils.lighten(ThemesUtils.getAccentColor(), 0.15f)); } @@ -50,7 +51,7 @@ public class ThemesHacks { } public static int getHackedColor(@NonNull Context context, @ColorRes int color) { - if (ThemesCore.isCachedAccents() && ColorReferences.isColorRefAccented(color)) { + if (ThemesCore.isCachedAccents() && ColorReferences.isAccentedColor(context.getColor(color))) { Log.d("ThemesHacks", "getHackedColor: got accent color: " + AndroidUtils.getResources().getResourceName(color)); return ThemesUtils.getAccentColor(); } diff --git a/app/src/main/java/ru/vtosters/lite/themes/hooks/TextViewHook.java b/app/src/main/java/ru/vtosters/lite/themes/hooks/TextViewHook.java index 55d3f50bd..063eaab15 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/hooks/TextViewHook.java +++ b/app/src/main/java/ru/vtosters/lite/themes/hooks/TextViewHook.java @@ -3,6 +3,7 @@ package ru.vtosters.lite.themes.hooks; import android.annotation.SuppressLint; import android.content.res.ColorStateList; import android.os.Build; +import android.util.Log; import android.view.View; import android.widget.TextView; @@ -27,6 +28,7 @@ public class TextViewHook implements BaseHook { if (view instanceof TextView) { var textView = (TextView) view; + Log.d(TAG, "inject: " + textView.getText() + " " + textView.getCurrentTextColor()); if (ColorReferences.isAccentedColor(textView.getCurrentTextColor())) { textView.setTextColor(ThemesUtils.getAccentColor()); } diff --git a/app/src/main/java/ru/vtosters/lite/themes/hooks/VKImageViewHook.java b/app/src/main/java/ru/vtosters/lite/themes/hooks/VKImageViewHook.java index 38a4f6c09..eb3133a7e 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/hooks/VKImageViewHook.java +++ b/app/src/main/java/ru/vtosters/lite/themes/hooks/VKImageViewHook.java @@ -7,6 +7,7 @@ import android.view.View; import com.vk.imageloader.view.VKImageView; +import ru.vtosters.lite.themes.utils.RecolorUtils; import ru.vtosters.lite.utils.ThemesUtils; public class VKImageViewHook implements BaseHook { @@ -20,7 +21,7 @@ public class VKImageViewHook implements BaseHook { if (view instanceof VKImageView) { var imageView = (VKImageView) view; if (imageView.getImageTintList() != null) { - imageView.setImageTintList(ThemesUtils.recolorCSL(imageView.getImageTintList())); + imageView.setImageTintList(RecolorUtils.recolorCSL(imageView.getImageTintList())); imageView.setColorFilter(ThemesUtils.getAccentColor(), PorterDuff.Mode.SRC_IN); } } diff --git a/app/src/main/java/ru/vtosters/lite/themes/utils/RecolorUtils.java b/app/src/main/java/ru/vtosters/lite/themes/utils/RecolorUtils.java new file mode 100644 index 000000000..1d35952eb --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/themes/utils/RecolorUtils.java @@ -0,0 +1,91 @@ +package ru.vtosters.lite.themes.utils; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.os.Build; + +import com.vk.core.drawable.RecoloredDrawable; + +import ru.vtosters.lite.themes.ColorReferences; +import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.ThemesUtils; + +public class RecolorUtils { + public static Drawable recolorDrawableToolbar(Drawable drawable) { + if (drawable == null) return null; + + return new RecoloredDrawable(drawable, ThemesUtils.getHeaderText()); + } // Recolor toolbar drawable to accent color + + @SuppressLint("UseCompatLoadingForDrawables") + public static Drawable recolorDrawableInt(int drawable) { + + @SuppressLint("UseCompatLoadingForDrawables") Drawable res = AndroidUtils.getResources().getDrawable(drawable); + return new RecoloredDrawable(res, ThemesUtils.getAccentColor()); + } // Get res drawable via id and coloring to accent + + public static ColorStateList recolorCSL(ColorStateList colorStateList) { + if (colorStateList == null) return null; + + return ColorStateList.valueOf(ThemesUtils.getAccentColor()); + } // Recolor ColorStateList to accent color + + @SuppressLint("UseCompatLoadingForColorStateLists") + public static ColorStateList themeCSL(Context context, int color) { + if (ColorReferences.isColorRefAccented(color)) { + return ColorStateList.valueOf(ThemesUtils.getAccentColor()); + } + + ColorStateList csl; + + if (Build.VERSION.SDK_INT >= 23) { + csl = context.getColorStateList(color); + } else { + csl = context.getResources().getColorStateList(color); + } + + try { + int unsel = csl.getColorForState(new int[]{-android.R.attr.state_selected}, Color.BLACK); + int sel = csl.getColorForState(new int[]{android.R.attr.state_selected}, Color.BLACK); + + boolean isUnselAccent = ColorReferences.isAccentedColor(unsel); + boolean isSelAccent = ColorReferences.isAccentedColor(sel); + + if (isUnselAccent || isSelAccent) { + + return new ColorStateList(new int[][]{ + new int[]{android.R.attr.state_selected}, new int[]{-android.R.attr.state_selected} + }, new int[]{isSelAccent ? ThemesUtils.getAccentColor() : sel, isUnselAccent ? ThemesUtils.getAccentColor() : unsel}); + } + + return csl; + } catch (Exception e) { + + e.printStackTrace(); + return null; + } + } // Recolor ColorStateList + + public static ColorStateList themeCSL(ColorStateList csl){ + try { + int unsel = csl.getColorForState(new int[] {-android.R.attr.state_selected}, Color.BLACK); + int sel = csl.getColorForState(new int[] {android.R.attr.state_selected}, Color.BLACK); + + boolean isUnselAccent = ColorReferences.isAccentedColor(unsel); + boolean isSelAccent = ColorReferences.isAccentedColor(sel); + + if (isUnselAccent || isSelAccent) { + return new ColorStateList(new int[][] { + new int[] {android.R.attr.state_selected}, new int[] {-android.R.attr.state_selected} + }, new int[] {isSelAccent ? ThemesUtils.getAccentColor() : sel, isUnselAccent ? ThemesUtils.getAccentColor() : unsel}); + } + return csl; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java b/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java index 28e0d5da9..eaec00da9 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java @@ -14,7 +14,6 @@ import static ru.vtosters.lite.utils.Preferences.milkshake; import static ru.vtosters.lite.utils.Preferences.navbar; import static ru.vtosters.lite.utils.Preferences.vkme; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.res.ColorStateList; @@ -40,8 +39,6 @@ import com.vk.core.ui.themes.VKThemeHelper; import com.vtosters.lite.R; import com.vtosters.lite.data.ThemeTracker; -import ru.vtosters.lite.themes.ColorReferences; - public class ThemesUtils { public static void applyTheme(VKTheme theme) { var currentActivity = LifecycleUtils.getCurrentActivity(); @@ -220,66 +217,6 @@ public class ThemesUtils { } // Recolor vk icon to accent color - public static Drawable recolorDrawableToolbar(Drawable drawable) { - if (drawable == null) return null; - - if (!isAndroidMonet()) return drawable; - - return new RecoloredDrawable(drawable, getHeaderText()); - } // Recolor toolbar drawable to accent color - - @SuppressLint("UseCompatLoadingForDrawables") - public static Drawable recolorDrawableInt(int drawable) { - if (!isAndroidMonet()) return getResources().getDrawable(drawable); - - @SuppressLint("UseCompatLoadingForDrawables") Drawable res = getResources().getDrawable(drawable); - return new RecoloredDrawable(res, getAccentColor()); - } // Get res drawable via id and coloring to accent - - public static ColorStateList recolorCSL(ColorStateList colorStateList) { - if (colorStateList == null) return null; - - if (!isAndroidMonet()) return colorStateList; - - return ColorStateList.valueOf(getAccentColor()); - } // Recolor ColorStateList to accent color - - @SuppressLint("UseCompatLoadingForColorStateLists") - public static ColorStateList themeCSL(Context context, int color) { - if (isColorRefAccented(color) && isAndroidMonet()) { - return ColorStateList.valueOf(getAccentColor()); - } - - ColorStateList csl; - - if (Build.VERSION.SDK_INT >= 23) { - csl = context.getColorStateList(color); - } else { - csl = context.getResources().getColorStateList(color); - } - - try { - int unsel = csl.getColorForState(new int[]{-android.R.attr.state_selected}, Color.BLACK); - int sel = csl.getColorForState(new int[]{android.R.attr.state_selected}, Color.BLACK); - - boolean isUnselAccent = ColorReferences.isAccentedColor(unsel); - boolean isSelAccent = ColorReferences.isAccentedColor(sel); - - if (isUnselAccent || isSelAccent) { - - return new ColorStateList(new int[][]{ - new int[]{android.R.attr.state_selected}, new int[]{-android.R.attr.state_selected} - }, new int[]{isSelAccent ? getAccentColor() : sel, isUnselAccent ? getAccentColor() : unsel}); - } - - return csl; - } catch (Exception e) { - - e.printStackTrace(); - return null; - } - } // Recolor ColorStateList - public static int darken(int color, float by) { float[] hsl = new float[3]; ColorUtils.colorToHSL(color, hsl);