diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java index b88b44f6f..b27e3281d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java @@ -77,7 +77,6 @@ public class BarChart extends ScrollableChart private int primaryColor; - @Deprecated private int bucketSize = 7; private int backgroundColor; @@ -127,7 +126,6 @@ public class BarChart extends ScrollableChart setTarget(0.5); } - @Deprecated public void setBucketSize(int bucketSize) { this.bucketSize = bucketSize; @@ -298,7 +296,6 @@ public class BarChart extends ScrollableChart boolean shouldPrintYear = true; if (yearText.equals(previousYearText)) shouldPrintYear = false; - if (bucketSize >= 365 && (year % 2) != 0) shouldPrintYear = false; if (skipYear > 0) { @@ -306,6 +303,8 @@ public class BarChart extends ScrollableChart shouldPrintYear = false; } + if (bucketSize >= 365) shouldPrintYear = true; + if (shouldPrintYear) { previousYearText = yearText; @@ -314,6 +313,8 @@ public class BarChart extends ScrollableChart pText.setTextAlign(Paint.Align.CENTER); canvas.drawText(yearText, rect.centerX(), rect.bottom + em * 2.2f, pText); skipYear = 1; + + } if (bucketSize < 365) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java index 19483dc5e..80551e541 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java @@ -29,15 +29,25 @@ import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.tasks.*; -import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import java.util.*; import butterknife.*; +import static org.isoron.uhabits.activities.habits.show.views.ScoreCard.getTruncateField; + public class BarCard extends HabitCard { + public static final int[] NUMERICAL_BUCKET_SIZES = {1, 7, 31, 92, 365}; + public static final int[] BOOLEAN_BUCKET_SIZES = {7, 31, 92, 365}; + + @BindView(R.id.numericalSpinner) + Spinner numericalSpinner; + + @BindView(R.id.boolSpinner) + Spinner boolSpinner; + @BindView(R.id.barChart) BarChart chart; @@ -47,6 +57,8 @@ public class BarCard extends HabitCard @Nullable private TaskRunner taskRunner; + private int bucketSize; + public BarCard(Context context) { super(context); @@ -59,6 +71,20 @@ public class BarCard extends HabitCard init(); } + @OnItemSelected(R.id.numericalSpinner) + public void onNumericalItemSelected(int position) + { + bucketSize = NUMERICAL_BUCKET_SIZES[position]; + refreshData(); + } + + @OnItemSelected(R.id.boolSpinner) + public void onBoolItemSelected(int position) + { + bucketSize = BOOLEAN_BUCKET_SIZES[position]; + refreshData(); + } + @Override protected void refreshData() { @@ -71,22 +97,16 @@ public class BarCard extends HabitCard inflate(getContext(), R.layout.show_habit_bar, this); ButterKnife.bind(this); + boolSpinner.setSelection(1); + numericalSpinner.setSelection(2); + bucketSize = 7; + Context appContext = getContext().getApplicationContext(); if (appContext instanceof HabitsApplication) { HabitsApplication app = (HabitsApplication) appContext; taskRunner = app.getComponent().getTaskRunner(); } - - if (isInEditMode()) initEditMode(); - } - - private void initEditMode() - { - int color = PaletteUtils.getAndroidTestColor(1); - title.setTextColor(color); - chart.setColor(color); - chart.populateWithRandomData(); } private class RefreshTask implements Task @@ -101,10 +121,11 @@ public class BarCard extends HabitCard @Override public void doInBackground() { - Timestamp today = DateUtils.getToday(); - List checkmarks = habit.getCheckmarks().groupBy( - DateUtils.TruncateField.MONTH); + List checkmarks; + if (bucketSize == 1) checkmarks = habit.getCheckmarks().getAll(); + else checkmarks = habit.getCheckmarks().groupBy(getTruncateField(bucketSize)); chart.setCheckmarks(checkmarks); + chart.setBucketSize(bucketSize); } @Override @@ -113,10 +134,16 @@ public class BarCard extends HabitCard int color = PaletteUtils.getColor(getContext(), habit.getColor()); title.setTextColor(color); chart.setColor(color); - if(habit.isNumerical()) + if (habit.isNumerical()) + { + boolSpinner.setVisibility(GONE); chart.setTarget(habit.getTargetValue()); + } else + { + numericalSpinner.setVisibility(GONE); chart.setTarget(0); + } } } } diff --git a/uhabits-android/src/main/res/layout/show_habit_bar.xml b/uhabits-android/src/main/res/layout/show_habit_bar.xml index aeaf8f546..410624b46 100644 --- a/uhabits-android/src/main/res/layout/show_habit_bar.xml +++ b/uhabits-android/src/main/res/layout/show_habit_bar.xml @@ -1,5 +1,4 @@ - - - + - - - + android:layout_height="match_parent"> + + + + + + + + + + \ No newline at end of file diff --git a/uhabits-android/src/main/res/values/constants.xml b/uhabits-android/src/main/res/values/constants.xml index 34e8136a5..57c788f75 100644 --- a/uhabits-android/src/main/res/values/constants.xml +++ b/uhabits-android/src/main/res/values/constants.xml @@ -98,6 +98,13 @@ @string/year + + @string/week + @string/month + @string/quarter + @string/year + + 1 7 diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java index bc9ca2494..9f2c7e5bb 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java @@ -349,6 +349,12 @@ public abstract class CheckmarkList add(buildCheckmarksFromIntervals(reps, intervals)); } + public List getAll() { + Repetition oldest = habit.getRepetitions().getOldest(); + if(oldest == null) return new ArrayList<>(); + return getByInterval(oldest.getTimestamp(), DateUtils.getToday()); + } + static final class Interval { final Timestamp begin; @@ -408,9 +414,7 @@ public abstract class CheckmarkList @NonNull public List groupBy(DateUtils.TruncateField field) { - Repetition oldest = habit.getRepetitions().getOldest(); - if(oldest == null) return new ArrayList<>(); - List checks = getByInterval(oldest.getTimestamp(), DateUtils.getToday()); + List checks = getAll(); int count = 0; Timestamp truncatedTimestamps[] = new Timestamp[checks.size()];