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 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,
|
||||||
|
|||||||
Reference in New Issue
Block a user