implement attributes resolver

This commit is contained in:
aliveoutside
2022-07-26 19:46:28 +03:00
parent 3d1ca8d36a
commit 34007658d5
5 changed files with 117 additions and 2 deletions
@@ -0,0 +1,94 @@
package ru.vtosters.lite.themes;
import android.content.Context;
import android.util.Log;
import androidx.annotation.IdRes;
import java.util.HashMap;
import ru.vtosters.lite.utils.Themes;
public class ThemesCore {
// log tag
private static final String TAG = "ThemesCore";
public static HashMap<Integer, Integer> themedColors = new HashMap<>();
private static boolean cachedAccents = false;
private static int wallDarkColor;
private static int wallLightColor;
public static void setThemedColors(int accentColor) {
cachedAccents = true;
themedColors.clear();
themedColors.put(com.vtosters.lite.R.attr.text_link, accentColor);
themedColors.put(com.vtosters.lite.R.attr.accent, accentColor);
themedColors.put(com.vtosters.lite.R.attr.newsfeed_dropdown_color, accentColor);
themedColors.put(com.vtosters.lite.R.attr.vk_accent, accentColor);
themedColors.put(com.vtosters.lite.R.attr.accentColor, accentColor);
themedColors.put(com.vtosters.lite.R.attr.text_name, accentColor);
themedColors.put(com.vtosters.lite.R.attr.tabbar_active_icon, accentColor);
themedColors.put(com.vtosters.lite.R.attr.header_background, accentColor);
themedColors.put(com.vtosters.lite.R.attr.header_tint, accentColor);
themedColors.put(com.vtosters.lite.R.attr.header_tint_alternate, accentColor);
themedColors.put(com.vtosters.lite.R.attr.activity_indicator_tint, accentColor);
themedColors.put(com.vtosters.lite.R.attr.toolbarIconsColor, accentColor);
themedColors.put(com.vtosters.lite.R.attr.button_primary_background, accentColor);
themedColors.put(com.vtosters.lite.R.attr.button_secondary_foreground, accentColor);
themedColors.put(com.vtosters.lite.R.attr.button_tertiary_foreground, accentColor);
themedColors.put(com.vtosters.lite.R.attr.button_outline_border, accentColor);
themedColors.put(com.vtosters.lite.R.attr.button_muted_foreground, accentColor);
themedColors.put(com.vtosters.lite.R.attr.header_tab_active_indicator, accentColor);
themedColors.put(com.vtosters.lite.R.attr.im_dropdown_icon_color, accentColor);
themedColors.put(com.vtosters.lite.R.attr.im_dropdown_arrow_tint, accentColor);
themedColors.put(com.vtosters.lite.R.attr.im_attach_tint, accentColor);
themedColors.put(com.vtosters.lite.R.attr.im_forward_line_tint, accentColor);
themedColors.put(com.vtosters.lite.R.attr.link_alternate, accentColor);
themedColors.put(com.vtosters.lite.R.attr.newsfeed_post_title_color, accentColor);
themedColors.put(com.vtosters.lite.R.attr.attach_picker_tab_active_background, accentColor);
themedColors.put(com.vtosters.lite.R.attr.attach_picker_tab_active_text, accentColor);
themedColors.put(com.vtosters.lite.R.attr.newsfeed_action_color, accentColor);
themedColors.put(com.vtosters.lite.R.attr.counter_primary_background, accentColor);
themedColors.put(com.vtosters.lite.R.attr.action_sheet_action_foreground, accentColor);
// messages
wallDarkColor = Themes.darken(accentColor, 0.25f);
wallLightColor = Themes.lighten(accentColor, 0.25f);
//themedColors.put(com.vtosters.lite.R.attr.im_ic_send_msg, accentColor);
themedColors.put(com.vtosters.lite.R.attr.im_bubble_wallpaper_outgoing, accentColor);
themedColors.put(com.vtosters.lite.R.attr.im_bubble_outgoing, accentColor);
themedColors.put(com.vtosters.lite.R.attr.im_bubble_outgoing_highlighted, accentColor);
}
@SuppressWarnings("ConstantConditions")
public static int getThemedAttr(Context context, @IdRes int attr) {
if (attr == com.vtosters.lite.R.attr.im_bubble_wallpaper_outgoing || attr == com.vtosters.lite.R.attr.im_bubble_outgoing) {
return (!Themes.isDarkTheme()) ? wallLightColor : wallDarkColor;
}
if (attr == com.vtosters.lite.R.attr.im_bubble_outgoing_highlighted) {
return (!Themes.isDarkTheme()) ? Themes.lighten(wallLightColor, 0.2f) : Themes.darken(wallDarkColor, 0.2f);
}
return themedColors.get(attr);
}
public static boolean hasThemedAttr(Context context, int attrID) {
Log.d(TAG, "Requesting color by attr " + context.getResources().getResourceName(attrID));
return (themedColors.get(attrID) != null);
}
public static boolean isCachedAccents() {
return cachedAccents;
}
}
@@ -27,6 +27,11 @@ public class TextViewHook implements BaseHook {
textView.setTextColor(Themes.getAccentColor());
}
if (textView.getLinkTextColors() != null && Themes.isAccentedColor(textView.getLinkTextColors())) {
textView.setLinkTextColor(Themes.getAccentColor());
}
if (isPositiveButton(textView) || isVkUiButton(textView)) {
view.setBackgroundTintList(ColorStateList.valueOf(Themes.getAccentColor()));
}
@@ -55,7 +60,7 @@ public class TextViewHook implements BaseHook {
}
public static boolean eligibleForTinting(int id) {
return !Themes.isDarkTheme() && id == com.vtosters.lite.R.id.attach_title;
return !Themes.isDarkTheme() && (id == com.vtosters.lite.R.id.attach_title);
}
public static boolean isPositiveButton(View view) {
@@ -66,6 +66,7 @@ import java.util.List;
import java.util.Locale;
import ru.vtosters.lite.downloaders.notifications.NotificationChannels;
import ru.vtosters.lite.themes.ThemesCore;
import ru.vtosters.lite.ui.dialogs.DisableBattery;
import ru.vtosters.lite.ui.dialogs.InstallGMS;
import ru.vtosters.lite.ui.dialogs.OTADialog;
@@ -95,6 +96,7 @@ public class Globals{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannels.createChannels();
}
ThemesCore.setThemedColors(Themes.getAccentColor());
// VKIDProtection.alert(activity);
}
@@ -48,7 +48,7 @@ import java.util.List;
public class Themes{
public static List<String> accentColors = Arrays.asList(
"3f8ae0",
"5692d7", "528bcc", "7aa0cc", "518bcc", "6296d0", "2f68aa", "638ebf", "5181b8", "71aaeb", "4774a8", "5baaf4", "4186c8", "add3ff", "4774a8", "718198", "5a9eff", "99a2ad", "74a2d6", "e9eef3", "dfe3e7", "eff1f3", "5c9ce6", "4986cc", "4680c2"
"5692d7", "528bcc", "7aa0cc", "518bcc", "6296d0", "2f68aa", "638ebf", "5181b8", "71aaeb", "4774a8", "5baaf4", "4186c8", "add3ff", "718198", "5a9eff", "99a2ad", "74a2d6", "e9eef3", "dfe3e7", "eff1f3", "5c9ce6", "4986cc", "4680c2"
);
public static void applyTheme(VKTheme theme){
@@ -920,6 +920,20 @@
.end annotation
.end param
invoke-static {p0, p1}, Lru/vtosters/lite/themes/ThemesCore;->hasThemedAttr(Landroid/content/Context;I)Z
move-result v1
if-eqz v1, :cond_b
invoke-static {p0, p1}, Lru/vtosters/lite/themes/ThemesCore;->getThemedAttr(Landroid/content/Context;I)I
move-result v1
return v1
:cond_b
.line 1
invoke-virtual {p0}, Landroid/content/Context;->getTheme()Landroid/content/res/Resources$Theme;