mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Fixes to BarCard
This commit is contained in:
@@ -24,6 +24,7 @@ import android.view.*
|
||||
import android.widget.*
|
||||
import org.isoron.uhabits.activities.habits.show.views.ScoreCardPresenter.Companion.getTruncateField
|
||||
import org.isoron.uhabits.core.models.*
|
||||
import org.isoron.uhabits.core.utils.*
|
||||
import org.isoron.uhabits.databinding.*
|
||||
import org.isoron.uhabits.utils.*
|
||||
|
||||
@@ -95,14 +96,19 @@ class BarCardPresenter(
|
||||
} else {
|
||||
boolBucketSizes[boolSpinnerPosition]
|
||||
}
|
||||
val today = DateUtils.getToday()
|
||||
val oldest = habit.computedEntries.getKnown().lastOrNull()?.timestamp ?: today
|
||||
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 {
|
||||
habit.computedEntries.groupBy(
|
||||
original = habit.computedEntries.getByInterval(oldest, today),
|
||||
field = getTruncateField(bucketSize),
|
||||
firstWeekday = firstWeekday,
|
||||
isNumerical = habit.isNumerical,
|
||||
).map { Entry(it.timestamp, it.value * 1000) }
|
||||
)
|
||||
}
|
||||
return BarCardViewModel(
|
||||
entries = entries,
|
||||
|
||||
@@ -81,11 +81,11 @@ open class EntryList {
|
||||
* relevant when grouping by week.
|
||||
*/
|
||||
open fun groupBy(
|
||||
original: List<Entry>,
|
||||
field: DateUtils.TruncateField,
|
||||
firstWeekday: Int,
|
||||
isNumerical: Boolean,
|
||||
): List<Entry> {
|
||||
val original = getKnown()
|
||||
val truncated = original.map {
|
||||
Entry(it.timestamp.truncate(field, firstWeekday), it.value)
|
||||
}
|
||||
@@ -97,7 +97,9 @@ open class EntryList {
|
||||
values.add(0)
|
||||
}
|
||||
if (isNumerical) {
|
||||
if (truncated[i].value > 0) {
|
||||
values[values.lastIndex] += truncated[i].value
|
||||
}
|
||||
} else {
|
||||
if (truncated[i].value == YES_MANUAL) {
|
||||
values[values.lastIndex] += 1
|
||||
@@ -244,7 +246,7 @@ open class EntryList {
|
||||
firstWeekday: Int,
|
||||
isNumerical: Boolean,
|
||||
): 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
|
||||
}
|
||||
|
||||
|
||||
@@ -71,9 +71,14 @@ class SQLiteEntryList(database: Database) : EntryList() {
|
||||
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()
|
||||
return super.groupBy(field, firstWeekday, isNumerical)
|
||||
return super.groupBy(original, field, firstWeekday, isNumerical)
|
||||
}
|
||||
|
||||
override fun recomputeFrom(originalEntries: EntryList, frequency: Frequency, isNumerical: Boolean) {
|
||||
|
||||
@@ -162,6 +162,7 @@ class EntryListTest {
|
||||
}
|
||||
|
||||
val byMonth = entries.groupBy(
|
||||
original = entries.getKnown(),
|
||||
field = DateUtils.TruncateField.MONTH,
|
||||
firstWeekday = Calendar.SATURDAY,
|
||||
isNumerical = true,
|
||||
@@ -172,6 +173,7 @@ class EntryListTest {
|
||||
assertThat(byMonth[12], equalTo(Entry(Timestamp.from(2013, Calendar.MAY, 1), 1271)))
|
||||
|
||||
val byQuarter = entries.groupBy(
|
||||
original = entries.getKnown(),
|
||||
field = DateUtils.TruncateField.QUARTER,
|
||||
firstWeekday = Calendar.SATURDAY,
|
||||
isNumerical = true,
|
||||
@@ -182,6 +184,7 @@ class EntryListTest {
|
||||
assertThat(byQuarter[5], equalTo(Entry(Timestamp.from(2013, Calendar.JANUARY, 1), 4975)))
|
||||
|
||||
val byYear = entries.groupBy(
|
||||
original = entries.getKnown(),
|
||||
field = DateUtils.TruncateField.YEAR,
|
||||
firstWeekday = Calendar.SATURDAY,
|
||||
isNumerical = true,
|
||||
@@ -208,6 +211,7 @@ class EntryListTest {
|
||||
}
|
||||
|
||||
val byMonth = entries.groupBy(
|
||||
original = entries.getKnown(),
|
||||
field = DateUtils.TruncateField.MONTH,
|
||||
firstWeekday = Calendar.SATURDAY,
|
||||
isNumerical = false,
|
||||
@@ -218,6 +222,7 @@ class EntryListTest {
|
||||
assertThat(byMonth[12], equalTo(Entry(Timestamp.from(2013, Calendar.MAY, 1), 6)))
|
||||
|
||||
val byQuarter = entries.groupBy(
|
||||
original = entries.getKnown(),
|
||||
field = DateUtils.TruncateField.QUARTER,
|
||||
firstWeekday = Calendar.SATURDAY,
|
||||
isNumerical = true,
|
||||
@@ -228,6 +233,7 @@ class EntryListTest {
|
||||
assertThat(byQuarter[5], equalTo(Entry(Timestamp.from(2013, Calendar.JANUARY, 1), 40)))
|
||||
|
||||
val byYear = entries.groupBy(
|
||||
original = entries.getKnown(),
|
||||
field = DateUtils.TruncateField.YEAR,
|
||||
firstWeekday = Calendar.SATURDAY,
|
||||
isNumerical = true,
|
||||
|
||||
Reference in New Issue
Block a user