From 4355fb4d687e7fed734b2a0635f274e0e86c1098 Mon Sep 17 00:00:00 2001 From: KristianTashkov Date: Wed, 22 Sep 2021 15:49:51 +0300 Subject: [PATCH] start score from 1.0 for at most and reflect the same in history --- .../NumberButtonView/render_at_most_above.png | Bin 2294 -> 2338 bytes .../list/NumberButtonView/render_zero.png | Bin 1856 -> 1939 bytes .../common/dialogs/HistoryEditorDialog.kt | 2 ++ .../habits/list/views/NumberButtonView.kt | 4 ++-- .../habits/show/views/HistoryCardView.kt | 1 + .../isoron/uhabits/widgets/HistoryWidget.kt | 5 ++++- .../core/commands/CreateHabitCommand.kt | 1 + .../org/isoron/uhabits/core/models/Habit.kt | 5 +++-- .../isoron/uhabits/core/models/ScoreList.kt | 7 +++---- .../screens/habits/show/views/HistoryCard.kt | 6 ++++++ .../uhabits/core/ui/views/HistoryChart.kt | 3 ++- .../uhabits/core/ui/views/HistoryChartTest.kt | 1 + 12 files changed, 25 insertions(+), 10 deletions(-) diff --git a/uhabits-android/src/androidTest/assets/views/habits/list/NumberButtonView/render_at_most_above.png b/uhabits-android/src/androidTest/assets/views/habits/list/NumberButtonView/render_at_most_above.png index 5bd20a34f244dd23221010487efa7e8ee62530e4..4cea804986c070e0879924ed281e4bb417a0e1dc 100644 GIT binary patch delta 2297 zcmaKudpy&N8^^yhq8p8{II>1=TT&6iL559XiZ0qtERoB?`mJ%$cjeNw&?e=6>1VE4 znz=S@mFp4exTNITw2-Kka>9;5 zN9E4t#@zHC&}kQr*`%4GnH+BgQgxyFK7}UR;?@u?J@P*9Be!tAhzQ+b@_oPbV`a52 zByw@4xdAD?`&08X(-!mLit+(G=|9>FuwkP;b=xb6eqK8VNRb)=Sy|Fq-I)2W6yoK( zud{55?Fz(!y|Xbr;qRYYe}4;Jx&Q|;7pfTr@;cIz6K|!n=X6J*-%HitR zr7tQyeSxQ&LeBNy^8$`T2nYK?XPzngi?Ah6A7sd`Bm;O)-t_aV1AC+MX~F!56lx?s zU3nWTdFsRJ*#&n=m!Y+e=v>C1t&UYLq6GX8INbtD)c-D@=7K?MDC!)JIIs}I}%ie>g>cn5gBfK0t-l!Aq7vRQ`7aeGqX3 z^9fj}VSSjKB*7u`TU`;z6xNR;MGK!I@{i3(^#)qk$E1tbyB0XeQh1e>vjRP~I0%Vz zz2@NL^z0E!fO4&1GKXwL1?lY@B4Le#Qb9A4vMjm^4YKQv>86fwpxAbo$j$vE9fJ@-bjv6t8ACc|e$u9FbB8xV2-fPV`2FDEpz%cU#6bjdf;TloD$>wd&;&v;;*G#{XYu7OUK=Y{ ze%!N&LQV3wvZ&sBf^;_NQ0gT)k%r8~Kl}Z@UQqg2Wqb)w`7tq_3)>IZe|ElWp!IOo zogyf^S3=YKn#kJX=@>V`OFUd;PTXQfjrE2Q(FAXu7jNI@YO+QVrpO7!vh)dFlK;(3 zPlxNs+B)SXmdA*MmR}X3^Mm9v)mv~E_q$8s0H4n<#-?smR{?ijfA-CYdnss zFTf?Mcb=Zv@{f2uKM4I%{1IcHY)Rkr*R4ubzSvJHPmy1KZ%}1Rz{G*N!hExT*2*hmBkZ8 z9$mb}6mLzn34?)sVs^7c9d#lWK6s-e4#_jTw>fQ+hPz_; zCa|%|s;twbBQn>nGk^yZJ-`%i>s+h!hu3G9EDe|S)XnAk!!1E31BK*FaTrFh=o7}& z_~2|s6o(m~t@}qkpHEc5aRaqO-~ zK5gLUD43;)4|VZ=4pIA%KYyo@clgGnu|&Qya{8Frwwkjv!;&}iSmL%j;2{W{v$CzY1DzKsaGui>K$85tSzycMgo z<|tqsRjgJPZC57O{k)3sMoZKt?h299KM#q`6T@Y@)6Tb&K2I$! zE@p950^ld1r;bwWI!kdq8_em(u)SsIgDJaL3-bwu52S@ zA4aUy+1T9NYyb?^#WByH?i}xT!(6OEqo%ETb^;MZniky^0L3`dT68F(2!CN4iww*# zTPK~M=Jq+_5j#7(b6Q$jZE{f}Pg$KL`W3M(W#C?g4gz@zpo^uIC#sfh0IO8#LAtB6 zIDzpT&X?0=mw*XF>s+Nf2vxie<&BOPgzWkF;X_$k$K_LZYR|uGOEF3B%&kSwUV$w^ zmrF;6Q6TwTqc>H3`;RqfW#Hi3U4oe#b>~iUg{x%g>sXjQyM;b*TAsh9%BwylU4P&eYm;YyP{nxaIFs?+Zh*0 zGLsYj42LvW#08g zv97ju>-P)<1c04Z84q2z=d(L1*dq1aGs#}Nw7ZaXhW@e*uWok-TB11lyQ0CZox0Eq zT1mF2n8M)GgFUd!$V3^faOD}6jAmA(0xJkGKQ>*QrW(BhsgfHVB>VYB3i-ad&&Z7h+i(-Q9nf~8qW~h995dHUR>GO` z(X)w#g4w1tmO$<2ys{8WS?4r-Nj4FnNmp1~f!e$j)|x4bVqw_SXLpLH5)V)0m6VjwdQNgHD^bx4<4=0kHzoes9=Yf`zgb5|=Ud`o z|7?E>{NwDb&3590>n@_b>M7jox8+rv8^uef!~5C=#r`+> zMK2@}3m2M0%2L5B0JGj$cs&3eWBo59`rjwv^jTM8$+w8G9#RI@1Ly34;U4z8_7|kd BVmbf- delta 2253 zcmaJ@dpOe#8~)8PY9VvZp|wzHN^*D|qBdbkSm|XGwU+Z?ms7}Z_;Q*Yrf3MsM8YeS zZ8;xCsnO>w=CGIV-AD*Ay*~Z*y?=erKhHnUeO>qUT+e;qPsyPTxlC)Y*bZfljVxFy zh)%=0stiewEHhe67pA~9OVJy8ij=Nfwg0af9(XfOj*`n#ar1lJOE6ekTKX;b1Kz)^ z`uF-$p#Ag?4u4X{EXGh>MJeY6P{lX>M~?)4@n zajt&0%n25j6(a=KErD?dd_jsN5CaL(76E$403#?A`jheEg^p`~I$ z3(QkBNk99f(ag+@lkWw;)m`P9D_x;v1w-S{c~sgeUR{#SBp8#6{Hh{`I`e%zl9LgE z)T2aYyR(5!OsqE=k~YG%%<$DGz~r{v7&wnxkq&frx6~Jx0s0009=RG|RD4=o&J<0e zIQt^WXdoV;(fh`pzPeSvgvlRdfzKu-brw zVw_qs&^9#i{8G^A4%>sOx$AuABkL!04|J%*Zyk&bKS|#Pifd|W?t6QCgN6xx?OONR z`^f}@2V{FXiK0T>SQiY@(I-`B&H);iE#a#(2!C(y{~(nu-*% z@OZbcn|bt4o*I9jCjc%Pp;l+J)ix&6l+o zo0x{)cKW(SoE9-pD0u;rMms2*r2*tya3tP$$@=HvBA#m$@ut=T+4GQ?Q@+xmhZB9TIDE zK`22+D;{m*E0^pNau%UalOr87Wv11u-W)qM<@0)ys1O;I9qBHTo9Tc0~Zr+QF2b=fJ0w9%{;vs}@6nj3E^{^PP&BNj)J2 z`jBK4PjscExff$!VS%_rVthf<2g9+IdZ|4+ssXo~3|Vrq>g5{Lez%OTsT=pf7tX$g z%R+Z;+NWr6ZaJas?z5{V($k3EzCSAo}S($Dk>_I zwI~+6CnEM?_Lj9}Q4wFFywpAFu5u#fBUv}qU?s3)%eBH+>z?`4Q_Cpl*KxnVTrv(h zq7U~&^Lzkx`0D@yq4cm=+ih#v%k-L}#fjZ=Fxmg?c|?#1KwTQ?*Fi*|zvMV;*x$|c z-Zm*_v4o||!cAs1OS)Ab)p?BZfH&h@!E-dA5jwu^-Ep_DvD!U)O29{<3|1oOzu5X7 zooS4lz@2!UgLbNyX+7lxyD!>0FYrMVG7+{p=A3AfDp5}ipw2bO{QGsSN8UCl;avq* zHCUE3H0!UNgh|(=_GIiuM)%;t{K_-c^sbqcI{S)XaH`=vo8M47V8~L7f($X9o=N&T z+jhvd+2bffS;)o8?=no9gb7;8F8kaBlWu~d;i-Jycwu2-m(4pf;EP;RlL=H!&EDk& zJYK6&p|$M?wp8MqBVa6g1C#_1%j@PrHxJ$PYf@_c3I8lJtywLIHH}rh>s_^LLqhLJ zs_BcGJoMfCZUHB0=YLcrF>o!zQO0C^h{djUFIV)*QMh2%dcupdmXn>vuiYcL4*hn2 z_Z&OK5(z&BNDmz+uLFNOthSA7&YOISfPC))hii|R8riQJkf9(Do8rp~QzCPK8zG({;M1& diff --git a/uhabits-android/src/androidTest/assets/views/habits/list/NumberButtonView/render_zero.png b/uhabits-android/src/androidTest/assets/views/habits/list/NumberButtonView/render_zero.png index 5f6bf8c65cf649ef2b9f437feaea7fed323ec774..a405c0092d9cc66fdd53d00eba078fe57112d507 100644 GIT binary patch delta 1924 zcmZuyX;jjA7yf|@wrS{?xrW5#R9J&c*{EeoBiPY#tEk);oJ>q9MRWN(c1kKn1>4lp z8kfQtN==NN}mp6rselD7Q3XNPX$cob#UZ-VgV~J@>dRCwoF;R3FX+A zqkioN)}tW?Xe3I-p4rW zwFagCJJ#FjTvW)@qQeEwjWUQZoWgzPKMJ?^w1nd$HfrLfX}`GqbhL>>MvyK{Zihx4 zHUL60m`Tyw=y){oXRpXex!-VeH<1em$kO{*)z83zf%}COW|3wtYS<=krA^Drucpri zJHs1>K74*!VgfK)+wM$p>h)O6bYWTzJ-c-U@-C|kPAB-rEEd&|PrMn17`V#gq1XPl;e!8!lbK=U=3XM( z5~j({Whs9n4U|zIW;2v-dB4|x?&PZMC@F1qHMIahC^U^OV3N#;UB0uem`C!-FcGs3 zo>8$g`tZvI^qY%z8wOA-~@40 zFUkzi1%|*AR9IR;R*C0%6utXZPPaqw&G13wxz{7vfpRqz#n9;Gl@qw8%yiIlMKo?< zXlTeS)1JkuoPaxVYNJM9co)X8AA%{CnvP4C>Yg&vf~0W$y(yl;@_ou`%CL2qlw!eL zK+o9;9ZO0|j6p^P?Tm_-KAwD)KJtOb4gcZ0LXZbdYgI505Oq%J$W=wGKNlT;xtC>Ai^0jYpaIh|HTZ>gkc#u||kNS(swp7({4c0PyfY;nRu~_^F=5;GD!>r>B zni`DXQIUo~vI0)2>XmNdD$uJlgn|D4hCMv%=JwDnP2bz43({l-r?ayBcUM-XhpPi1 zq{fVF(kkbqbtS%7z|xg_s-94u#LSu%j(ybw9+Fmzj`oYPB6^bj3LxnoR(}{eIig-{ zA#$C&vJE>TV~R8qkJg{`6=joaLk1Wx>W;(k${-dEe0hL-OIoXM((~+@hYrQ!k|}Kg z2T+EecLa=o@Si>zqNj`02;G}fHy($S!R?$Q5&PQd; zDE>YpGzq)zAJ1Q=!A9(s(U~~i0Snf>I*%i-1O)NIpV3`)&ljlD#bQ|EK|(t>d^$1mJBZ(57UkwZi3#d`-|*>q=~QA&P$ z`03-Wgi`4;`9Y4#X(OeOUldwi|MLA2z`9LLFaA*2a#0Z9_j&C6XA^)b5r$nFl$iC! z(B>ko3mVUIZdu^p$o*n4u`xTbDDS&7mV^1!N3=A)-fN!GjON- zM(oj;hdNvdTNZUNt|=)XKqo9^Zg=V^eaZQ0BjB1diJ$DgfR z^L6K5pB6Q^xw;O}#B6J)redsD z<0mYB8sSp9?xs-O3a1M;gIJ6;)zSBV6D!ev+2BZWU}1F#IIoLYK-?FA=Xyuw{}%(< BuiO9t delta 1841 zcmaJ?c{JOJ7XFdMQXQm2>9nOa(<-f?v9;DX(IQbPQc6>lT02$yQk9tLSR127V{h$G zNKk@U)3H}-Yh$U3Xe}j0FliLwWzPHSo%7E7{<(kMd%t_X@7$Xq$B<3`1rH9jv~iLW zAy&#e2>>JnHb{h1RQ_r{?%oM!#XkJfP_J|y$^qkAG!FG|Gmd-}Y&O#n+o*xnd<^hW z6pVl6=3l5%OgaYB<1BTg4X`xf9l`P(vYr!cp_bSW7$|08q}#g{-Wu}LKtpEnV}l;M zy2vG7ZT*1vf*zZOk2L&o=7nDF!(r2ot=UVV>mTW%eVhkICu9@5=KfEp^Rw=RguU6` z-hTG_H6m|tA!P8mmP}$|;_x>&M|E!)Q0Cy@ztyG+xC1xNE=Ce6xcr^9J9XPJ2k&Y2 z<>Kl2d%rV?O2IjJ=0eEy)hk!ZV=4nrXUEC-CC-K@4QSc>W9aVS*ngGXYuHUWns@=?5q`ObeBg&K_x1I)Z^*>Wp2x|Yfs0{S zMPY1Z_ze2bw6sDSQgT0}g9Oi!25R*Ru48{Kw<={jM8vNzpnb$&l2@NhUWB&{q5-PY z#UBCaDC%KB$;sJ{XJr7hVSYFqP7ZK=vp?~lx&Zr{?^`hY;Fv|Ch<6VV{(92S7&D$s|z38Yu;9u%Rs{U2I{3*m_O zTz-w%LZ(eKZ@zObnoW9G72xTui3fV_Y=pr`t%_0N)^aE>PP7-3@;%lJE;RS9ma%oD z+;Hv*jx8a>uCu%l^7&tz&i*C~uvFemAMLMY6%N;{h~NQER-Og@TnimZhd6aSMV5DhM;ncNep4 z7vRAs%+=Jau#_`#yVW%O{hiFg1?}Yi-^n}8NobIJQC*l&ftR_yJ9{5zW2j1;DdytR zbr+98=>@&{LVs+#nDU0ndWoZ><8*?^ljN179G{`4em+2s39l~8c7rezvpbv?{?vx~iH z62x?EwM8}pK>)X+q9RhvCD7c5!Z$i-4+H7&xB2tzsX zsXgP98Z#Zz2gXxDhq@lvy;BCiRta2vb4p4j*VpuThH$Q-4s$La*vCuH`}q1cl@223 zJ44@x>P+q8Mkb-Sc1b3axp&9Ig9G)@e{dnCxbKOsIdf@i6_y_$i!xWV8ns5Ua7yz1J45s~>@Mc4H*`aC{#Wi$uo#aG1P8jcLD4EdEj#LjO4A(n)6@gpymT z?zSGaKt6w4Qn;8qijRl+eNCd8OS%NQZ#_D=kDZY)fkcsa(v#3mnpqx&EInuAbH-5eU_fp8DKU zT1a1$lVOPl`c=$RdEel07pY69t;v5-wBX8>Kc9Vt;DymU^(A_0As01fFFQvczlUCl zE^{QN+BGE>t&e0+PvtbK%b`Y;11na2GlVoP{+^kQ83snuma9K zNua9~TAnehc`}R!0V8;kUd#duNUdHu&F=VLGnKaDjnoB3Dg)2Y1<<(h83=hN z*rKy$mV`(>J4UOBX;M=6^5($6fFc|Y&$B|B3|BR#P2_1=Amf&H_kB@iV*y@I_$EPQ z%(+sfZxPj_8!EpDz#{#Z;{tQ!)*e~B2p0PScfJD*jby(xW(A#=P1O7!Uj{gkRCqB8 Tp&gmy0wUO0T|-hWJ%0N)amSc; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.kt index fcad26125..5edae637f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.kt @@ -62,6 +62,7 @@ class HistoryEditorDialog : AppCompatDialogFragment(), CommandRunner.Listener { firstWeekday = preferences.firstWeekday, paletteColor = habit.color, series = emptyList(), + defaultSquare = HistoryChart.Square.OFF, theme = themeSwitcher.currentTheme, today = DateUtils.getTodayWithOffset().toLocalDate(), onDateClickedListener = onDateClickedListener ?: OnDateClickedListener { }, @@ -101,6 +102,7 @@ class HistoryEditorDialog : AppCompatDialogFragment(), CommandRunner.Listener { theme = LightTheme() ) chart?.series = model.series + chart?.defaultSquare = model.defaultSquare dataView.postInvalidate() } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt index 08685026d..405bf606d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt @@ -162,14 +162,14 @@ class NumberButtonView( fun draw(canvas: Canvas) { var activeColor = if (targetType == NumericalHabitType.AT_LEAST) { when { + value < 0.0 && preferences.areQuestionMarksEnabled -> lowContrast max(0.0, value) >= threshold -> color - value <= 0 -> lowContrast else -> mediumContrast } } else { when { + value < 0.0 && preferences.areQuestionMarksEnabled -> lowContrast value <= threshold -> color - value >= 2 * threshold -> lowContrast else -> mediumContrast } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardView.kt index c60e84bd1..f429e1718 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardView.kt @@ -43,6 +43,7 @@ class HistoryCardView(context: Context, attrs: AttributeSet) : LinearLayout(cont theme = state.theme, dateFormatter = JavaLocalDateFormatter(Locale.getDefault()), series = state.series, + defaultSquare = state.defaultSquare, firstWeekday = state.firstWeekday, ) binding.chart.postInvalidate() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt index 2e26a487b..c8d4dce44 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt @@ -56,7 +56,9 @@ class HistoryWidget( theme = WidgetTheme(), ) (widgetView.dataView as AndroidDataView).apply { - (this.view as HistoryChart).series = model.series + val historyChart = (this.view as HistoryChart) + historyChart.series = model.series + historyChart.defaultSquare = model.defaultSquare } } @@ -71,6 +73,7 @@ class HistoryWidget( dateFormatter = JavaLocalDateFormatter(Locale.getDefault()), firstWeekday = prefs.firstWeekday, series = listOf(), + defaultSquare = HistoryChart.Square.OFF, ) } ).apply { diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/commands/CreateHabitCommand.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/commands/CreateHabitCommand.kt index 49e3bae7a..8ff21f407 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/commands/CreateHabitCommand.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/commands/CreateHabitCommand.kt @@ -31,5 +31,6 @@ data class CreateHabitCommand( val habit = modelFactory.buildHabit() habit.copyFrom(model) habitList.add(habit) + habit.recompute() } } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/Habit.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/Habit.kt index a2dd13846..5134d45b0 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/Habit.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/Habit.kt @@ -90,9 +90,10 @@ data class Habit( isNumerical = isNumerical, ) - val to = DateUtils.getTodayWithOffset().plus(30) + val today = DateUtils.getTodayWithOffset() + val to = today.plus(30) val entries = computedEntries.getKnown() - var from = entries.lastOrNull()?.timestamp ?: to + var from = entries.lastOrNull()?.timestamp ?: today if (from.isNewerThan(to)) from = to scores.recompute( diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt index a062f7ede..23bd88fd1 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt @@ -75,13 +75,12 @@ class ScoreList { to: Timestamp, ) { map.clear() - if (computedEntries.getKnown().isEmpty()) return - if (from.isNewerThan(to)) return var rollingSum = 0.0 var numerator = frequency.numerator var denominator = frequency.denominator val freq = frequency.toDouble() val values = computedEntries.getByInterval(from, to).map { it.value }.toIntArray() + val isAtMost = numericalHabitType == NumericalHabitType.AT_MOST // For non-daily boolean habits, we double the numerator and the denominator to smooth // out irregular repetition schedules (for example, weekly habits performed on different @@ -91,7 +90,7 @@ class ScoreList { denominator *= 2 } - var previousValue = 0.0 + var previousValue = if (isNumerical && isAtMost) 1.0 else 0.0 for (i in values.indices) { val offset = values.size - i - 1 if (isNumerical) { @@ -101,7 +100,7 @@ class ScoreList { } val normalizedRollingSum = rollingSum / 1000 - val percentageCompleted = if (numericalHabitType == NumericalHabitType.AT_LEAST) { + val percentageCompleted = if (!isAtMost) { if (targetValue > 0) min(1.0, normalizedRollingSum / targetValue) else diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt index 8798f027d..dcc7cba24 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt @@ -45,6 +45,7 @@ data class HistoryCardState( val color: PaletteColor, val firstWeekday: DayOfWeek, val series: List, + val defaultSquare: HistoryChart.Square, val theme: Theme, val today: LocalDate, ) @@ -131,6 +132,10 @@ class HistoryCardPresenter( } } } + val defaultSquare = if (habit.isNumerical && habit.targetType == NumericalHabitType.AT_MOST) + HistoryChart.Square.ON + else + HistoryChart.Square.OFF return HistoryCardState( color = habit.color, @@ -138,6 +143,7 @@ class HistoryCardPresenter( today = today.toLocalDate(), theme = theme, series = series, + defaultSquare = defaultSquare ) } } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt index 699cc2ee6..f0da7a196 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt @@ -41,6 +41,7 @@ class HistoryChart( var firstWeekday: DayOfWeek, var paletteColor: PaletteColor, var series: List, + var defaultSquare: Square, var theme: Theme, var today: LocalDate, var onDateClickedListener: OnDateClickedListener = OnDateClickedListener { }, @@ -189,7 +190,7 @@ class HistoryChart( offset: Int, ) { - val value = if (offset >= series.size) Square.OFF else series[offset] + val value = if (offset >= series.size) defaultSquare else series[offset] val squareColor: Color val color = theme.color(paletteColor.paletteIndex) squareColor = when (value) { diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/views/HistoryChartTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/views/HistoryChartTest.kt index bce63bcec..a53135f9b 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/views/HistoryChartTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/views/HistoryChartTest.kt @@ -49,6 +49,7 @@ class HistoryChartTest { dateFormatter = JavaLocalDateFormatter(Locale.US), firstWeekday = SUNDAY, onDateClickedListener = dateClickedListener, + defaultSquare = OFF, series = listOf( 2, // today 2, 1, 2, 1, 2, 1, 2,