X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Futils%2FColors.java;h=73ad899b97ff4ffa069bfb51c782097a7552642a;hp=40e953b14cbadbb398edb32dbbd5482f3dfe9753;hb=be8de3627af4c905e3db9671883eee9eaf38275e;hpb=172f9f95559ae30833229ec531bffb644aa7a455 diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/Colors.java b/app/src/main/java/net/ktnx/mobileledger/utils/Colors.java index 40e953b1..73ad899b 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/Colors.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/Colors.java @@ -2,8 +2,6 @@ package net.ktnx.mobileledger.utils; import android.app.Activity; import android.content.res.Resources; -import android.support.annotation.ColorInt; -import android.support.annotation.ColorLong; import android.util.Log; import android.util.TypedValue; @@ -11,6 +9,11 @@ import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.MobileLedgerProfile; +import androidx.annotation.ColorInt; +import androidx.annotation.ColorLong; + +import static java.lang.Math.abs; + public class Colors { public static final int DEFAULT_HUE_DEG = 261; public static @ColorInt @@ -32,7 +35,7 @@ public class Colors { tableRowLightBG = tv.data; theme.resolveAttribute(R.attr.colorPrimary, tv, true); primary = tv.data; - theme.resolveAttribute(android.R.color.tab_indicator_text, tv, true); + theme.resolveAttribute(R.attr.textColor, tv, true); defaultTextColor = tv.data; theme.resolveAttribute(R.attr.colorAccent, tv, true); accent = tv.data; @@ -55,13 +58,18 @@ public class Colors { return 0xff000000 | hsvTriplet(hue, saturation, value); } public static @ColorInt + int hslColor(float hue, float saturation, float lightness) { + return 0xff000000 | hslTriplet(hue, saturation, lightness); + } + public static @ColorInt int hsvTriplet(float hue, float saturation, float value) { @ColorLong long result; int r, g, b; - if ((hue < 0) || (hue > 1) || (saturation < 0) || (saturation > 1) || (value < 0) || - (value > 1)) throw new IllegalArgumentException( - "hue, saturation, value and alpha must all be between 0 and 1"); + if ((hue < -0.00005) || (hue > 1.0000005) || (saturation < 0) || (saturation > 1) || + (value < 0) || (value > 1)) throw new IllegalArgumentException(String.format( + "hue, saturation, value and alpha must all be between 0 and 1. Arguments given: " + + "hue=%1.5f, sat=%1.5f, val=%1.5f", hue, saturation, value)); int h = (int) (hue * 6); float f = hue * 6 - h; @@ -89,6 +97,27 @@ public class Colors { "rgb", h, hue, saturation, value)); } } + public static @ColorInt + int hslTriplet(float hue, float saturation, float lightness) { + @ColorLong long result; + float h = hue * 6; + float c = (1 - abs(2f * lightness - 1)) * saturation; + float h_mod_2 = h % 2; + float x = c * (1 - Math.abs(h_mod_2 - 1)); + int r, g, b; + float m = lightness - c / 2f; + + if (h < 1 || h == 6) return tupleToColor(c + m, x + m, 0 + m); + if (h < 2) return tupleToColor(x + m, c + m, 0 + m); + if (h < 3) return tupleToColor(0 + m, c + m, x + m); + if (h < 4) return tupleToColor(0 + m, x + m, c + m); + if (h < 5) return tupleToColor(x + m, 0 + m, c + m); + if (h < 6) return tupleToColor(c + m, 0 + m, x + m); + + throw new IllegalArgumentException(String.format( + "Unexpected value for h (%1.3f) while converting hsl(%1.3f, %1.3f, %1.3f) to rgb", + h, hue, saturation, lightness)); + } public static @ColorInt int tupleToColor(float r, float g, float b) { @@ -99,18 +128,25 @@ public class Colors { } public static @ColorInt int getPrimaryColorForHue(int degrees) { + // 0/360f becomes -0.000something for some reason + if (degrees == 0) return getPrimaryColorForHue(0f); return getPrimaryColorForHue(degrees / 360f); } public static @ColorInt int getPrimaryColorForHue(float hue) { - int result = hsvColor(hue, 0.61f, 0.95f); +// int result = hsvColor(hue, 0.61f, 0.95f); + int result = hslColor(hue, 0.60f, 0.60f); Log.d("colors", String.format("getPrimaryColorForHue(%1.2f) = %x", hue, result)); return result; } public static void setupTheme(Activity activity) { MobileLedgerProfile profile = Data.profile.get(); + setupTheme(activity, profile); + } + public static void setupTheme(Activity activity, MobileLedgerProfile profile) { if (profile != null) { - switch (Data.profile.get().getThemeId()) { + final int themeId = profile.getThemeId(); + switch (themeId) { case 0: activity.setTheme(R.style.AppTheme_NoActionBar_0); break; @@ -185,9 +221,14 @@ public class Colors { break; default: activity.setTheme(R.style.AppTheme_NoActionBar); + Log.d("profiles", String.format("Theme hue %d not supported, using the default", + themeId)); } } - else activity.setTheme(R.style.AppTheme_NoActionBar); + else { + Log.d("profiles", "No profile given, using default theme"); + activity.setTheme(R.style.AppTheme_NoActionBar); + } refreshColors(activity.getTheme()); }