Fixes to BarCard

pull/699/head
Alinson S. Xavier 5 years ago
parent 0b23fbed86
commit a19f39308e

@ -24,6 +24,7 @@ import android.view.*
import android.widget.* import android.widget.*
import org.isoron.uhabits.activities.habits.show.views.ScoreCardPresenter.Companion.getTruncateField import org.isoron.uhabits.activities.habits.show.views.ScoreCardPresenter.Companion.getTruncateField
import org.isoron.uhabits.core.models.* import org.isoron.uhabits.core.models.*
import org.isoron.uhabits.core.utils.*
import org.isoron.uhabits.databinding.* import org.isoron.uhabits.databinding.*
import org.isoron.uhabits.utils.* import org.isoron.uhabits.utils.*
@ -95,14 +96,19 @@ class BarCardPresenter(
} else { } else {
boolBucketSizes[boolSpinnerPosition] boolBucketSizes[boolSpinnerPosition]
} }
val today = DateUtils.getToday()
val oldest = habit.computedEntries.getKnown().lastOrNull()?.timestamp ?: today
val entries = if (bucketSize == 1) { val entries = if (bucketSize == 1) {
habit.computedEntries.getKnown() habit.computedEntries.getByInterval(oldest, today).map {
if (it.value < 0) Entry(it.timestamp, 0) else it
}
} else { } else {
habit.computedEntries.groupBy( habit.computedEntries.groupBy(
original = habit.computedEntries.getByInterval(oldest, today),
field = getTruncateField(bucketSize), field = getTruncateField(bucketSize),
firstWeekday = firstWeekday, firstWeekday = firstWeekday,
isNumerical = habit.isNumerical, isNumerical = habit.isNumerical,
).map { Entry(it.timestamp, it.value * 1000) } )
} }
return BarCardViewModel( return BarCardViewModel(
entries = entries, entries = entries,

@ -81,11 +81,11 @@ open class EntryList {
* relevant when grouping by week. * relevant when grouping by week.
*/ */
open fun groupBy( open fun groupBy(
original: List<Entry>,
field: DateUtils.TruncateField, field: DateUtils.TruncateField,
firstWeekday: Int, firstWeekday: Int,
isNumerical: Boolean, isNumerical: Boolean,
): List<Entry> { ): List<Entry> {
val original = getKnown()
val truncated = original.map { val truncated = original.map {
Entry(it.timestamp.truncate(field, firstWeekday), it.value) Entry(it.timestamp.truncate(field, firstWeekday), it.value)
} }
@ -97,7 +97,9 @@ open class EntryList {
values.add(0) values.add(0)
} }
if (isNumerical) { if (isNumerical) {
values[values.lastIndex] += truncated[i].value if (truncated[i].value > 0) {
values[values.lastIndex] += truncated[i].value
}
} else { } else {
if (truncated[i].value == YES_MANUAL) { if (truncated[i].value == YES_MANUAL) {
values[values.lastIndex] += 1 values[values.lastIndex] += 1
@ -244,7 +246,7 @@ open class EntryList {
firstWeekday: Int, firstWeekday: Int,
isNumerical: Boolean, isNumerical: Boolean,
): Int { ): Int {
val groups: List<Entry> = groupBy(truncateField, firstWeekday, isNumerical) val groups: List<Entry> = groupBy(getKnown(), truncateField, firstWeekday, isNumerical)
return if (groups.isEmpty()) 0 else groups[0].value return if (groups.isEmpty()) 0 else groups[0].value
} }

@ -71,9 +71,14 @@ class SQLiteEntryList(database: Database) : EntryList() {
return super.getKnown() return super.getKnown()
} }
override fun groupBy(field: DateUtils.TruncateField, firstWeekday: Int, isNumerical: Boolean): List<Entry> { override fun groupBy(
original: List<Entry>,
field: DateUtils.TruncateField,
firstWeekday: Int,
isNumerical: Boolean
): List<Entry> {
loadRecords() loadRecords()
return super.groupBy(field, firstWeekday, isNumerical) return super.groupBy(original, field, firstWeekday, isNumerical)
} }
override fun recomputeFrom(originalEntries: EntryList, frequency: Frequency, isNumerical: Boolean) { override fun recomputeFrom(originalEntries: EntryList, frequency: Frequency, isNumerical: Boolean) {

@ -162,6 +162,7 @@ class EntryListTest {
} }
val byMonth = entries.groupBy( val byMonth = entries.groupBy(
original = entries.getKnown(),
field = DateUtils.TruncateField.MONTH, field = DateUtils.TruncateField.MONTH,
firstWeekday = Calendar.SATURDAY, firstWeekday = Calendar.SATURDAY,
isNumerical = true, isNumerical = true,
@ -172,6 +173,7 @@ class EntryListTest {
assertThat(byMonth[12], equalTo(Entry(Timestamp.from(2013, Calendar.MAY, 1), 1271))) assertThat(byMonth[12], equalTo(Entry(Timestamp.from(2013, Calendar.MAY, 1), 1271)))
val byQuarter = entries.groupBy( val byQuarter = entries.groupBy(
original = entries.getKnown(),
field = DateUtils.TruncateField.QUARTER, field = DateUtils.TruncateField.QUARTER,
firstWeekday = Calendar.SATURDAY, firstWeekday = Calendar.SATURDAY,
isNumerical = true, isNumerical = true,
@ -182,6 +184,7 @@ class EntryListTest {
assertThat(byQuarter[5], equalTo(Entry(Timestamp.from(2013, Calendar.JANUARY, 1), 4975))) assertThat(byQuarter[5], equalTo(Entry(Timestamp.from(2013, Calendar.JANUARY, 1), 4975)))
val byYear = entries.groupBy( val byYear = entries.groupBy(
original = entries.getKnown(),
field = DateUtils.TruncateField.YEAR, field = DateUtils.TruncateField.YEAR,
firstWeekday = Calendar.SATURDAY, firstWeekday = Calendar.SATURDAY,
isNumerical = true, isNumerical = true,
@ -208,6 +211,7 @@ class EntryListTest {
} }
val byMonth = entries.groupBy( val byMonth = entries.groupBy(
original = entries.getKnown(),
field = DateUtils.TruncateField.MONTH, field = DateUtils.TruncateField.MONTH,
firstWeekday = Calendar.SATURDAY, firstWeekday = Calendar.SATURDAY,
isNumerical = false, isNumerical = false,
@ -218,6 +222,7 @@ class EntryListTest {
assertThat(byMonth[12], equalTo(Entry(Timestamp.from(2013, Calendar.MAY, 1), 6))) assertThat(byMonth[12], equalTo(Entry(Timestamp.from(2013, Calendar.MAY, 1), 6)))
val byQuarter = entries.groupBy( val byQuarter = entries.groupBy(
original = entries.getKnown(),
field = DateUtils.TruncateField.QUARTER, field = DateUtils.TruncateField.QUARTER,
firstWeekday = Calendar.SATURDAY, firstWeekday = Calendar.SATURDAY,
isNumerical = true, isNumerical = true,
@ -228,6 +233,7 @@ class EntryListTest {
assertThat(byQuarter[5], equalTo(Entry(Timestamp.from(2013, Calendar.JANUARY, 1), 40))) assertThat(byQuarter[5], equalTo(Entry(Timestamp.from(2013, Calendar.JANUARY, 1), 40)))
val byYear = entries.groupBy( val byYear = entries.groupBy(
original = entries.getKnown(),
field = DateUtils.TruncateField.YEAR, field = DateUtils.TruncateField.YEAR,
firstWeekday = Calendar.SATURDAY, firstWeekday = Calendar.SATURDAY,
isNumerical = true, isNumerical = true,

Loading…
Cancel
Save