diff --git a/android/uhabits-android/src/main/AndroidManifest.xml b/android/uhabits-android/src/main/AndroidManifest.xml
index 811257873..9ed25f6cd 100644
--- a/android/uhabits-android/src/main/AndroidManifest.xml
+++ b/android/uhabits-android/src/main/AndroidManifest.xml
@@ -185,15 +185,6 @@
-
-
-
-
-
-
-
= target) color = primaryColor;
+ if (Habit.checkMarkValueToDouble(value) >= target) color = primaryColor;
rect.inset(-margin, 0);
setModeOrColor(pGraph, XFERMODE_CLEAR, backgroundColor);
@@ -357,10 +357,10 @@ public class BarChart extends ScrollableChart
if (value == 0) return;
int activeColor = textColor;
- if (value / 1000 >= target)
+ if (Habit.checkMarkValueToDouble(value) >= target)
activeColor = primaryColor;
- String label = NumberButtonViewKt.toShortString(value / 1000);
+ String label = NumberButtonViewKt.toShortString(Habit.checkMarkValueToDouble(value));
Rect rText = new Rect();
pText.getTextBounds(label, 0, label.length(), rText);
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
index f6adfcc16..ff9b3f8b7 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
@@ -86,7 +86,7 @@ class HabitCardView(
get() = checkmarkPanel.values
set(values) {
checkmarkPanel.values = values
- numberPanel.values = values.map { it / 1000.0 }.toDoubleArray()
+ numberPanel.values = values.map { Habit.checkMarkValueToDouble(it) }.toDoubleArray()
}
var threshold: Double
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java
index e59aecf73..ce5ef1e3a 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java
@@ -127,7 +127,7 @@ public class HistoryCard extends HabitCard
chart.setColor(color);
if(habit.isNumerical())
{
- chart.setTarget((int) (habit.getTargetValue() * 1000));
+ chart.setTarget(Habit.doubleToCheckMarkValue(habit.getTargetValue()));
chart.setNumerical(true);
}
}
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/NumericalCheckmarkWidget.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/NumericalCheckmarkWidget.kt
index e17de3cf1..daa789d54 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/NumericalCheckmarkWidget.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/NumericalCheckmarkWidget.kt
@@ -5,6 +5,7 @@ import android.content.Context
import android.content.Intent
import android.util.Log
import android.view.View
+import org.isoron.uhabits.core.models.Checkmark
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.receivers.WidgetReceiver
import org.isoron.uhabits.receivers.WidgetReceiver.Companion.ACTION_SET_NUMERICAL_VALUE
@@ -28,15 +29,21 @@ class NumericalCheckmarkWidget(context: Context, widgetId: Int, habit: Habit) :
override fun refreshData(v: View) {
(v as NumericalCheckmarkWidgetView).apply {
- Log.d("NumericalChckmarkWidget", "Refreshing data")
setPercentage(habit.scores.todayValue.toFloat())
setActiveColor(PaletteUtils.getColor(context, habit.color))
setName(habit.name)
setCheckmarkValue(habit.checkmarks.todayValue)
+ setCheckmarkState(getCheckmarkState())
refresh()
}
+ }
-
+ private fun getCheckmarkState():Int{
+ return if(habit.isCompletedToday){
+ Checkmark.CHECKED_EXPLICITLY
+ }else{
+ Checkmark.UNCHECKED
+ }
}
}
\ No newline at end of file
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt
index fabfe1640..84604dd4f 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt
@@ -43,7 +43,6 @@ class NumericalCheckmarkWidgetActivity : Activity() {
constructor(activity: NumericalCheckmarkWidgetActivity){
this.activity=activity
-
}
override fun onNumberPicked(newValue: Double) {
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java
index 7877794a0..adb872aec 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java
@@ -69,10 +69,9 @@ public class CheckmarkWidgetView extends HabitWidgetView
int bgColor;
int fgColor;
- switch (checkmarkValue)
+ switch (getCheckmarkState())
{
case Checkmark.CHECKED_EXPLICITLY:
- text = getResources().getString(R.string.fa_check);
bgColor = activeColor;
fgColor = res.getColor(R.attr.highContrastReverseTextColor);
@@ -84,7 +83,6 @@ public class CheckmarkWidgetView extends HabitWidgetView
break;
case Checkmark.CHECKED_IMPLICITLY:
- text = getResources().getString(R.string.fa_check);
bgColor = res.getColor(R.attr.cardBackgroundColor);
fgColor = res.getColor(R.attr.mediumContrastTextColor);
@@ -95,7 +93,6 @@ public class CheckmarkWidgetView extends HabitWidgetView
case Checkmark.UNCHECKED:
default:
- text = getResources().getString(R.string.fa_times);
bgColor = res.getColor(R.attr.cardBackgroundColor);
fgColor = res.getColor(R.attr.mediumContrastTextColor);
@@ -108,7 +105,7 @@ public class CheckmarkWidgetView extends HabitWidgetView
ring.setPercentage(percentage);
ring.setColor(fgColor);
ring.setBackgroundColor(bgColor);
- ring.setText(text);
+ ring.setText(getText());
label.setText(name);
label.setTextColor(fgColor);
@@ -117,6 +114,34 @@ public class CheckmarkWidgetView extends HabitWidgetView
postInvalidate();
}
+ /**
+ * @Return the state of the checkmark, either:
+ * - Checkmark.CHECKED_EXPLICITLY
+ * - Checkmark.CHECKED_IMPLICITLY
+ * - Checkmark.UNCHECKED
+ */
+ protected int getCheckmarkState(){
+ return checkmarkValue;
+ }
+
+ /**
+ * @Return the text that should be displayed in the middle of the widget
+ */
+ protected String getText(){
+ switch (getCheckmarkState())
+ {
+ case Checkmark.CHECKED_EXPLICITLY:
+ return getResources().getString(R.string.fa_check);
+
+ case Checkmark.CHECKED_IMPLICITLY:
+ return getResources().getString(R.string.fa_check);
+
+ case Checkmark.UNCHECKED:
+ default:
+ return getResources().getString(R.string.fa_times);
+ }
+ }
+
public void setActiveColor(int activeColor)
{
this.activeColor = activeColor;
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt
index d102fd697..ca793c1ec 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt
@@ -8,46 +8,35 @@ import org.isoron.uhabits.R
import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory
import org.isoron.uhabits.activities.habits.list.views.toShortString
import org.isoron.uhabits.core.models.Checkmark
+import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
class NumericalCheckmarkWidgetView : CheckmarkWidgetView {
+ private var checkmarkState : Int = Checkmark.UNCHECKED
+
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}
- override fun refresh() {
- if (backgroundPaint == null || frame == null || ring == null) return
-
- //right now most of this code is copied over from the regular CheckmarkWidget. This is for testing purposes, just to get something working.
-
- val res = StyledResources(context)
-
- val text: String
- val bgColor: Int
- val fgColor: Int
- val numberValue : Double = checkmarkValue / 1000.0
- text = numberValue.toShortString()
- bgColor = activeColor
- fgColor = res.getColor(R.attr.highContrastReverseTextColor)
-
- setShadowAlpha(0x4f)
- rebuildBackground()
-
- backgroundPaint!!.color = bgColor
- frame.setBackgroundDrawable(background)
-
- ring.percentage = percentage
- ring.color = fgColor
- ring.setBackgroundColor(bgColor)
- ring.setText(text)
+ /**
+ * @param state the new state/style of the widget, either:
+ * - Checkmark.CHECKED_EXPLICITLY
+ * - Checkmark.CHECKED_IMPLICITLY
+ * - Checkmark.UNCHECKED
+ */
+ fun setCheckmarkState(state : Int) {
+ checkmarkState = state
+ }
- label.text = name
- label.setTextColor(fgColor)
+ override fun getCheckmarkState(): Int {
+ return checkmarkState
+ }
- requestLayout()
- postInvalidate()
+ override fun getText(): String {
+ val numberValue : Double = Habit.checkMarkValueToDouble(checkmarkValue)
+ return numberValue.toShortString()
}
}
diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java
index 69e41bead..c8a0a5dfe 100644
--- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java
+++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java
@@ -94,6 +94,21 @@ public class Habit
observable = new ModelObservable();
}
+ public static double checkMarkValueToDouble(int a)
+ {
+ return ((double) a)/1000.0;
+ }
+
+ public static double checkMarkValueToDouble(double a)
+ {
+ return a/1000.0;
+ }
+
+ public static int doubleToCheckMarkValue(double a)
+ {
+ return (int)Math.round(a*1000);
+ }
+
/**
* Clears the reminder for a habit.
*/
@@ -327,9 +342,9 @@ public class Habit
if (isNumerical())
{
if(getTargetType() == AT_LEAST)
- return todayCheckmark >= data.targetValue;
+ return todayCheckmark >= doubleToCheckMarkValue(data.targetValue);
else
- return todayCheckmark <= data.targetValue;
+ return todayCheckmark <= doubleToCheckMarkValue(data.targetValue);
}
else return (todayCheckmark != UNCHECKED);
}
diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java
index b3ba68370..724ee0006 100644
--- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java
+++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java
@@ -278,7 +278,7 @@ public abstract class ScoreList implements Iterable
if (habit.isNumerical())
{
- value /= 1000;
+ value = Habit.checkMarkValueToDouble(value);
value /= habit.getTargetValue();
value = Math.min(1, value);
}
diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java
index 45dcc18f1..be3a14465 100644
--- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java
+++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java
@@ -83,11 +83,11 @@ public class ListHabitsBehavior
CheckmarkList checkmarks = habit.getCheckmarks();
double oldValue = checkmarks.getValues(timestamp, timestamp)[0];
- screen.showNumberPicker(oldValue / 1000, habit.getUnit(), newValue ->
+ screen.showNumberPicker(Habit.checkMarkValueToDouble(oldValue), habit.getUnit(), newValue ->
{
- newValue = Math.round(newValue * 1000);
+ int intValue = Habit.doubleToCheckMarkValue(newValue);
commandRunner.execute(
- new CreateRepetitionCommand(habit, timestamp, (int) newValue),
+ new CreateRepetitionCommand(habit, timestamp, intValue),
habit.getId());
});
}