From 30de30cf64a6ff1898a5130603086f967a9029d9 Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Wed, 7 Dec 2022 01:41:22 +0300 Subject: [PATCH] fixed many colors --- .../vtosters/lite/themes/ColorReferences.java | 100 ++++++++++++++- .../ru/vtosters/lite/themes/ThemesCore.java | 8 +- .../ru/vtosters/lite/themes/ThemesHacks.java | 12 +- .../ru/vtosters/lite/themes/VTLResources.java | 2 +- .../lite/themes/utils/RecolorUtils.java | 5 +- .../lite/themes/utils/VkUiThemer.java | 22 ++-- .../ru/vtosters/lite/utils/ThemesUtils.java | 115 ++++++------------ .../com/vk/core/ui/themes/VKThemeHelper.smali | 8 ++ .../com/vtosters/lite/ViewUtils.smali | 4 + 9 files changed, 163 insertions(+), 113 deletions(-) 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 e3f8629a3..365757211 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/ColorReferences.java +++ b/app/src/main/java/ru/vtosters/lite/themes/ColorReferences.java @@ -2,19 +2,18 @@ package ru.vtosters.lite.themes; import android.content.res.ColorStateList; import android.graphics.Color; -import ru.vtosters.lite.utils.ThemesUtils; import java.util.Arrays; import java.util.List; +import static com.vtosters.lite.R.color.*; + public class ColorReferences { 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) - Color.parseColor("#74a2d6"), - Color.parseColor("#67a5eb"), Color.parseColor("#5181b8") // header_blue ); @@ -28,9 +27,96 @@ public class ColorReferences { Color.parseColor("#a800244d"), Color.parseColor("#14001c3d"), Color.parseColor("#3d001c3d"), + Color.parseColor("#74a2d6"), + Color.parseColor("#67a5eb"), + Color.parseColor("#45678f"), + Color.parseColor("#6645678f"), Color.parseColor("#664986cc") ); + public static List accents = Arrays.asList( + viewer_retry_button_text_color, + azure_300, + picker_camera_button, + music_check_button_bg_pressed, + notification_color, + music_text_counter, + music_follow_button_bg_pressed, + music_blue_button_normal, + music_check_button_bg_normal, + vk_terms_link, + vk_blue_200, + accent_blue, + azure_A400, + vk_azure_A400, + blue, + blue_200, + vk_blue_300, + vk_blue_400, + blue_300, + blue_400, + cool_blue, + cornflower_blue, + cornflower_blue_two, + dot_unread, + fave_promo_btn_pressed, + header_blue, + colorAccent, + live_emoji_butt_hide, + music_action_button_blue, + name, + picker_blue, + picker_blue_pressed, + picker_tab_bg_selected, + picker_tab_text_selected, + sharing_blue_btn_normal, + sharing_blue_btn_pressed, + vk_sky_300, + vk_blue_A400, + blue_A400, + sky_300, + text_blue, + tip_background, + tw__blue_default, + tw__blue_pressed, + vkim_msg_sending_ic, + vkim_playing_drawable_rect, + vk_white_blue32, + date_picker_selector, + post_suggest_blue, + list_dialog_blue, + music_tab_bg_normal, + toolbar_blue_background, + toolbar_blue_statusBarColorBack + ); + + public static List mutedAccents = Arrays.asList( + blue_200_muted, + vk_blue_200_muted, + white_blue32, + vk_white_blue32, + header_blue_opacity16, + black_blue45_alpha10, + music_check_button_bg_checked, + vk_black_blue45_alpha10, + black_blue30_alpha66, + vk_black_blue30_alpha66, + attachpicker_item_background, + black_blue24_alpha8, + music_placeholder_artist_bg, + black_blue24_alpha24, + vk_black_blue24_alpha24, + azure_100_muted, + vk_azure_100_muted, + muted_blue, + blue_600, + light_blue, + vk_blue_600, + muted_blue_opacity40, + muted_blue_old, + header_blue_opacity40 + ); + public static boolean isAccentedColor(ColorStateList target) { return target != null && isAccentedColor(target.getDefaultColor()); } @@ -48,7 +134,11 @@ public class ColorReferences { } public static boolean isColorRefAccented(int target) { - return ThemesUtils.isColorRefAccented(target); + return accents.contains(target); + } + + public static boolean isColorRefMutedAccented(int target) { + return mutedAccents.contains(target); } public static boolean isCslNeedToBeThemed(ColorStateList csl) { @@ -58,4 +148,4 @@ public class ColorReferences { boolean isSelAccent = isAccentedColor(sel); return ThemesCore.isCachedAccents() && (isUnselAccent || isSelAccent); } -} +} \ No newline at end of file diff --git a/app/src/main/java/ru/vtosters/lite/themes/ThemesCore.java b/app/src/main/java/ru/vtosters/lite/themes/ThemesCore.java index 6f1f4e0b7..d41707d73 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/ThemesCore.java +++ b/app/src/main/java/ru/vtosters/lite/themes/ThemesCore.java @@ -136,10 +136,10 @@ public class ThemesCore { } public static boolean hasThemedAttr(Context context, int attrID) { - try { - Log.d(TAG, "Requesting color by attr " + context.getResources().getResourceName(attrID)); - } catch (Exception e) { - } +// try { +// Log.d(TAG, "Requesting color by attr " + context.getResources().getResourceName(attrID)); +// } catch (Exception e) { +// } if (isCachedAccents()) { if (!ThemesUtils.isDarkTheme()) { 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 986ee1996..31be18a8e 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/ThemesHacks.java +++ b/app/src/main/java/ru/vtosters/lite/themes/ThemesHacks.java @@ -1,24 +1,14 @@ package ru.vtosters.lite.themes; import android.content.Context; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.DrawableContainer; -import android.graphics.drawable.InsetDrawable; -import android.graphics.drawable.LayerDrawable; -import android.graphics.drawable.StateListDrawable; +import android.graphics.drawable.*; import android.os.Build; -import android.util.Log; import android.view.View; import android.widget.TextView; - import androidx.annotation.ColorRes; 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; public class ThemesHacks { diff --git a/app/src/main/java/ru/vtosters/lite/themes/VTLResources.java b/app/src/main/java/ru/vtosters/lite/themes/VTLResources.java index 673a6b52c..32ddc7b48 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/VTLResources.java +++ b/app/src/main/java/ru/vtosters/lite/themes/VTLResources.java @@ -39,7 +39,7 @@ public class VTLResources extends Resources { public VTLResources(Context context, Resources parent) { super(parent.getAssets(), parent.getDisplayMetrics(), parent.getConfiguration()); this.context = context; - Log.d(TAG, "VTLResources: init"); +// Log.d(TAG, "VTLResources: init"); } @Override 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 index ef62ab878..f0236b9d4 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/utils/RecolorUtils.java +++ b/app/src/main/java/ru/vtosters/lite/themes/utils/RecolorUtils.java @@ -6,10 +6,7 @@ import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Build; - -import android.util.Log; import com.vk.core.drawable.RecoloredDrawable; - import ru.vtosters.lite.themes.ColorReferences; import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.ThemesUtils; @@ -44,6 +41,8 @@ public class RecolorUtils { public static ColorStateList themeCSL(Context context, int color) { if (ColorReferences.isColorRefAccented(color)) { return ColorStateList.valueOf(ThemesUtils.getAccentColor()); + } else if (ColorReferences.isColorRefMutedAccented(color)) { + return ColorStateList.valueOf(ThemesUtils.getMutedAccentColor()); } ColorStateList csl; diff --git a/app/src/main/java/ru/vtosters/lite/themes/utils/VkUiThemer.java b/app/src/main/java/ru/vtosters/lite/themes/utils/VkUiThemer.java index 8b038e874..c589a5ca2 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/utils/VkUiThemer.java +++ b/app/src/main/java/ru/vtosters/lite/themes/utils/VkUiThemer.java @@ -43,15 +43,15 @@ public class VkUiThemer { GradientDrawable spd = (GradientDrawable) currentTarget; if (spd.getShape() != GradientDrawable.RECTANGLE) continue; - Log.d("TSCore", "[tsh] got a color!"); +// Log.d("TSCore", "[tsh] got a color!"); ColorStateList csl = spd.getColor(); - if (csl != null) { - Log.d("TSCore", "[tsh] csl2 | " + csl); - } +// if (csl != null) { +// Log.d("TSCore", "[tsh] csl2 | " + csl); +// } if (ColorReferences.isAccentedColor(spd.getColor())) { - Log.d("TSCore", "[tsh] theming CSL"); +// Log.d("TSCore", "[tsh] theming CSL"); spd.setTint(ThemesUtils.getAccentColor()); } } @@ -61,20 +61,20 @@ public class VkUiThemer { GradientDrawable spd = (GradientDrawable) draw2; if (spd.getShape() != GradientDrawable.RECTANGLE) return; - Log.d("TSCore", "[tsh:disabled] got a color!"); +// Log.d("TSCore", "[tsh:disabled] got a color!"); ColorStateList csl = spd.getColor(); - if (csl != null) { - Log.d("TSCore", "[tsh:disabled] csl2 | " + csl); - } +// if (csl != null) { +// Log.d("TSCore", "[tsh:disabled] csl2 | " + csl); +// } if (ColorReferences.isAccentedColor(spd.getColor())) { - Log.d("TSCore", "[tsh:disabled] theming CSL"); +// Log.d("TSCore", "[tsh:disabled] theming CSL"); spd.setTint(ThemesUtils.getAccentColor()); } if (ColorReferences.isMutedAccentedColor(spd.getColor())) { - Log.d("TSCore", "[tsh:disabled] theming CSL"); +// Log.d("TSCore", "[tsh:disabled] theming CSL"); spd.setTint(ThemesUtils.getMutedAccentColor()); } } 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 5fc5ffadf..c7751902b 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java @@ -1,7 +1,6 @@ package ru.vtosters.lite.utils; import android.app.Activity; -import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.PorterDuff; @@ -11,12 +10,13 @@ import android.util.Log; import android.view.View; import android.view.Window; import android.webkit.WebView; -import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.Switch; import android.widget.TextView; import androidx.appcompat.app.AppCompatDelegate; -import androidx.appcompat.widget.Toolbar; +import androidx.appcompat.widget.SwitchCompat; import androidx.core.graphics.ColorUtils; +import androidx.core.graphics.drawable.DrawableCompat; import com.vk.articles.preload.WebCachePreloader; import com.vk.core.drawable.RecoloredDrawable; import com.vk.core.preference.Preference; @@ -25,14 +25,11 @@ import com.vk.core.ui.themes.VKTheme; import com.vk.core.ui.themes.VKThemeHelper; import com.vtosters.lite.R; import com.vtosters.lite.data.ThemeTracker; -import ru.vtosters.lite.themes.ColorReferences; +import ru.vtosters.lite.hooks.VKUIHook; import ru.vtosters.lite.themes.ThemesHacks; +import ru.vtosters.lite.ui.wallpapers.WallpapersHooks; -import static android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; -import static ru.vtosters.lite.hooks.VKUIHook.isLoaded; -import static ru.vtosters.lite.ui.wallpapers.WallpapersHooks.getWallpaper; import static ru.vtosters.lite.utils.AndroidUtils.*; -import static ru.vtosters.lite.utils.LifecycleUtils.getCurrentActivity; import static ru.vtosters.lite.utils.Preferences.*; public class ThemesUtils { @@ -63,26 +60,26 @@ public class ThemesUtils { public static void setTheme(VKTheme theme, Activity activity) { if (activity == null) { - activity = getCurrentActivity(); + activity = LifecycleUtils.getCurrentActivity(); if (activity == null) return; } VKThemeHelper.theme(theme, activity, getCenterScreenCoords()); ThemeTracker.a(); - isLoaded = false; + VKUIHook.isLoaded = false; new WebView(activity).clearCache(true); WebCachePreloader.e(); } // apply changed theme public static void setThemeFL(VKTheme theme, Activity activity, float[] fl) { if (activity == null) { - activity = getCurrentActivity(); + activity = LifecycleUtils.getCurrentActivity(); if (activity == null) return; } VKThemeHelper.theme(theme, activity, fl); ThemeTracker.a(); - isLoaded = false; + VKUIHook.isLoaded = false; new WebView(activity).clearCache(true); WebCachePreloader.e(); } @@ -143,7 +140,7 @@ public class ThemesUtils { } public static int getNeededColorNavbar() { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? isDarkTheme() ? SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR : 0 : 0; + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? isDarkTheme() ? View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR : 0 : 0; } public static int getDarkThemeRes() { @@ -178,70 +175,32 @@ public class ThemesUtils { return MilkshakeHelper.e(); } - public static boolean isColorRefAccented(int color) { - return color == R.color.viewer_retry_button_text_color || - color == R.color.azure_300 || - color == R.color.light_blue_old || - color == R.color.picker_camera_button || - color == R.color.music_check_button_bg_pressed || - color == R.color.notification_color || - color == R.color.music_text_counter || - color == R.color.music_follow_button_bg_pressed || - color == R.color.music_blue_button_normal || - color == R.color.music_check_button_bg_normal || - color == R.color.vk_terms_link || - color == R.color.vk_blue_200_muted || - color == R.color.vk_blue_200 || - color == R.color.accent_blue || - color == R.color.azure_A400 || - color == R.color.vk_azure_A400 || - color == R.color.blue || - color == R.color.blue_200 || - color == R.color.blue_200_muted || - color == R.color.vk_blue_300 || - color == R.color.vk_blue_400 || - color == R.color.blue_300 || - color == R.color.blue_400 || - color == R.color.cool_blue || - color == R.color.cornflower_blue || - color == R.color.cornflower_blue_two || - color == R.color.dot_unread || - color == R.color.fave_promo_btn_pressed || - color == R.color.header_blue || - color == R.color.colorAccent || - color == R.color.blue_gray || - color == R.color.light_blue || - color == R.color.light_blue_gray || - color == R.color.live_emoji_butt_hide || - color == R.color.music_action_button_blue || - color == R.color.name || - color == R.color.picker_blue || - color == R.color.picker_blue_pressed || - color == R.color.picker_tab_bg_selected || - color == R.color.picker_tab_text_selected || - color == R.color.sharing_blue_btn_normal || - color == R.color.sharing_blue_btn_pressed || - color == R.color.vk_sky_300 || - color == R.color.vk_blue_A400 || - color == R.color.blue_A400 || - color == R.color.sky_300 || - color == R.color.muted_blue || - color == R.color.muted_blue_old || - color == R.color.text_blue || - color == R.color.tip_background || - color == R.color.tw__blue_default || - color == R.color.tw__blue_pressed || - color == R.color.vkim_msg_sending_ic || - color == R.color.vkim_playing_drawable_rect || - color == R.color.vk_white_blue32 || - color == R.color.date_picker_selector || - color == R.color.post_suggest_blue || - color == R.color.list_dialog_blue || - color == R.color.music_tab_bg_normal || - color == R.color.toolbar_blue_background || - color == R.color.toolbar_blue_statusBarColorBack || - color == R.color.white_blue32; - } // Accent colors + private static int[] p() { + int[] iArr = new int[4]; + iArr[0] = getColor(isDarkTheme() ? R.color.gray_800 : R.color.white); + iArr[1] = getColor(isDarkTheme() ? R.color.switch_disabled_on_dark : R.color.switch_disabled_on_light); + iArr[2] = getColor(R.color.gray_20); + iArr[3] = getAccentColor(); + return iArr; + } + + private static int[][] f() { + return new int[][]{new int[]{-16842910, -16842912}, new int[]{-16842910, 16842912}, new int[]{-16842912}, new int[]{16842912}}; + } + + private static int[] q() { + return new int[]{VKThemeHelper.d(R.attr.loader_track_fill), getMutedAccentColor(), VKThemeHelper.d(R.attr.loader_track_fill), getMutedAccentColor()}; + } + + public static void setSwitch(SwitchCompat switchCompat) { + DrawableCompat.setTintList(DrawableCompat.wrap(switchCompat.getThumbDrawable()), new ColorStateList(f(), p())); + DrawableCompat.setTintList(DrawableCompat.wrap(switchCompat.getTrackDrawable()), new ColorStateList(f(), q())); + } + + public static void setSwitch(Switch aSwitch) { + DrawableCompat.setTintList(DrawableCompat.wrap(aSwitch.getThumbDrawable()), new ColorStateList(f(), p())); + DrawableCompat.setTintList(DrawableCompat.wrap(aSwitch.getTrackDrawable()), new ColorStateList(f(), q())); + } public static void setImageViewColored(ImageView view){ view.setColorFilter(ThemesUtils.getAccentColor(), PorterDuff.Mode.MULTIPLY); @@ -300,7 +259,7 @@ public class ThemesUtils { } public static String getBackgroundStickers() { - if (getWallpaper() != null) { + if (WallpapersHooks.getWallpaper() != null) { return "images_with_background"; } return "images"; diff --git a/smali/smali_classes2/com/vk/core/ui/themes/VKThemeHelper.smali b/smali/smali_classes2/com/vk/core/ui/themes/VKThemeHelper.smali index e83cef0d2..bb5a641b7 100644 --- a/smali/smali_classes2/com/vk/core/ui/themes/VKThemeHelper.smali +++ b/smali/smali_classes2/com/vk/core/ui/themes/VKThemeHelper.smali @@ -2783,6 +2783,10 @@ .method public final a(Landroid/widget/Switch;)V .locals 4 + invoke-static {p1}, Lru/vtosters/lite/utils/ThemesUtils;->setSwitch(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/utils/ThemesUtils;->setSwitch(Landroidx/appcompat/widget/SwitchCompat;)V + + return-void + .line 88 invoke-virtual {p1}, Landroidx/appcompat/widget/SwitchCompat;->getThumbDrawable()Landroid/graphics/drawable/Drawable; diff --git a/smali/smali_classes4/com/vtosters/lite/ViewUtils.smali b/smali/smali_classes4/com/vtosters/lite/ViewUtils.smali index 0a79a9fdf..203b7e27f 100644 --- a/smali/smali_classes4/com/vtosters/lite/ViewUtils.smali +++ b/smali/smali_classes4/com/vtosters/lite/ViewUtils.smali @@ -990,6 +990,10 @@ invoke-virtual {p0, p1}, Landroidx/appcompat/widget/Toolbar;->setNavigationContentDescription(I)V :cond_1 + const v0, 0x0 + + invoke-static {p0, v0, v0}, Lru/vtosters/lite/themes/ViewInjector;->inject(Landroid/view/View;IZ)Landroid/view/View; + return-void .end method