mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-07 09:38:52 -06:00
ScoreList: Remove groupBy functions
This commit is contained in:
@@ -19,20 +19,16 @@
|
||||
|
||||
package org.isoron.uhabits.activities.common.views;
|
||||
|
||||
import androidx.test.ext.junit.runners.*;
|
||||
import androidx.test.filters.*;
|
||||
import androidx.test.runner.*;
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.isoron.uhabits.*;
|
||||
import org.isoron.uhabits.activities.habits.show.views.*;
|
||||
import org.isoron.uhabits.core.models.*;
|
||||
import org.isoron.uhabits.core.utils.*;
|
||||
import org.isoron.uhabits.utils.*;
|
||||
import org.junit.*;
|
||||
import org.junit.runner.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@MediumTest
|
||||
public class ScoreChartTest extends BaseViewTest
|
||||
@@ -43,6 +39,8 @@ public class ScoreChartTest extends BaseViewTest
|
||||
|
||||
private ScoreChart view;
|
||||
|
||||
private ScoreCardPresenter presenter;
|
||||
|
||||
@Override
|
||||
@Before
|
||||
public void setUp()
|
||||
@@ -51,15 +49,13 @@ public class ScoreChartTest extends BaseViewTest
|
||||
|
||||
fixtures.purgeHabits(habitList);
|
||||
habit = fixtures.createLongHabit();
|
||||
|
||||
Timestamp today = DateUtils.getTodayWithOffset();
|
||||
List<Entry> known = habit.getComputedEntries().getKnown();
|
||||
Timestamp oldest = known.get(known.size() - 1).getTimestamp();
|
||||
presenter = new ScoreCardPresenter(habit, prefs.getFirstWeekday());
|
||||
ScoreCardViewModel model = presenter.present(0);
|
||||
|
||||
view = new ScoreChart(targetContext);
|
||||
view.setScores(habit.getScores().getByInterval(oldest, today));
|
||||
view.setColor(PaletteUtilsKt.toThemedAndroidColor(habit.getColor(), targetContext));
|
||||
view.setBucketSize(7);
|
||||
view.setScores(model.getScores());
|
||||
view.setColor(PaletteUtilsKt.toFixedAndroidColor(model.getColor()));
|
||||
view.setBucketSize(model.getBucketSize());
|
||||
measureView(view, dpToPixels(300), dpToPixels(200));
|
||||
}
|
||||
|
||||
@@ -88,8 +84,9 @@ public class ScoreChartTest extends BaseViewTest
|
||||
@Test
|
||||
public void testRender_withMonthlyBucket() throws Throwable
|
||||
{
|
||||
view.setScores(habit.getScores().groupBy(DateUtils.TruncateField.MONTH, Calendar.SUNDAY));
|
||||
view.setBucketSize(30);
|
||||
ScoreCardViewModel model = presenter.present(2);
|
||||
view.setScores(model.getScores());
|
||||
view.setBucketSize(model.getBucketSize());
|
||||
view.invalidate();
|
||||
|
||||
assertRenders(view, BASE_PATH + "renderMonthly.png");
|
||||
@@ -105,8 +102,9 @@ public class ScoreChartTest extends BaseViewTest
|
||||
@Test
|
||||
public void testRender_withYearlyBucket() throws Throwable
|
||||
{
|
||||
view.setScores(habit.getScores().groupBy(DateUtils.TruncateField.YEAR, Calendar.SUNDAY));
|
||||
view.setBucketSize(365);
|
||||
ScoreCardViewModel model = presenter.present(4);
|
||||
view.setScores(model.getScores());
|
||||
view.setBucketSize(model.getBucketSize());
|
||||
view.invalidate();
|
||||
|
||||
assertRenders(view, BASE_PATH + "renderYearly.png");
|
||||
|
||||
@@ -67,6 +67,7 @@ class ScoreCardPresenter(
|
||||
val BUCKET_SIZES = intArrayOf(1, 7, 31, 92, 365)
|
||||
fun getTruncateField(bucketSize: Int): DateUtils.TruncateField {
|
||||
when (bucketSize) {
|
||||
1 -> return DAY
|
||||
7 -> return WEEK_NUMBER
|
||||
31 -> return MONTH
|
||||
92 -> return QUARTER
|
||||
@@ -78,12 +79,20 @@ class ScoreCardPresenter(
|
||||
|
||||
fun present(spinnerPosition: Int): ScoreCardViewModel {
|
||||
val bucketSize = BUCKET_SIZES[spinnerPosition]
|
||||
val scoreList = habit.scores
|
||||
val today = DateUtils.getTodayWithOffset()
|
||||
val oldest = habit.computedEntries.getKnown().lastOrNull()?.timestamp ?: today
|
||||
|
||||
val scores = if (bucketSize == 1) scoreList.getByInterval(oldest, today)
|
||||
else scoreList.groupBy(getTruncateField(bucketSize), firstWeekday)
|
||||
val field = getTruncateField(bucketSize)
|
||||
val scores = habit.scores.getByInterval(oldest, today).groupBy {
|
||||
DateUtils.truncate(field, it.timestamp, firstWeekday)
|
||||
}.map { (timestamp, scores) ->
|
||||
Score(timestamp, scores.map {
|
||||
it.value
|
||||
}.average())
|
||||
}.sortedBy {
|
||||
it.timestamp
|
||||
}.reversed()
|
||||
|
||||
return ScoreCardViewModel(
|
||||
color = habit.color,
|
||||
scores = scores,
|
||||
@@ -91,5 +100,4 @@ class ScoreCardPresenter(
|
||||
spinnerPosition = spinnerPosition,
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -38,23 +38,16 @@ class ScoreWidget(
|
||||
pendingIntentFactory.showHabit(habit)
|
||||
|
||||
override fun refreshData(view: View) {
|
||||
val size = ScoreCardPresenter.BUCKET_SIZES[prefs.scoreCardSpinnerPosition]
|
||||
val today = DateUtils.getTodayWithOffset()
|
||||
val oldest = habit.computedEntries.getKnown().lastOrNull()?.timestamp ?: today
|
||||
|
||||
val scores = when(size) {
|
||||
1 -> habit.scores.getByInterval(oldest, today)
|
||||
else -> habit.scores.groupBy(ScoreCardPresenter.getTruncateField(size), prefs.firstWeekday)
|
||||
}
|
||||
|
||||
val presenter = ScoreCardPresenter(habit, prefs.firstWeekday)
|
||||
val viewModel = presenter.present(prefs.scoreCardSpinnerPosition)
|
||||
val widgetView = view as GraphWidgetView
|
||||
widgetView.setBackgroundAlpha(preferedBackgroundAlpha)
|
||||
if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f)
|
||||
(widgetView.dataView as ScoreChart).apply {
|
||||
setIsTransparencyEnabled(true)
|
||||
setBucketSize(size)
|
||||
setBucketSize(viewModel.bucketSize)
|
||||
setColor(habit.color.toThemedAndroidColor(context))
|
||||
setScores(scores)
|
||||
setScores(viewModel.scores)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user