A fork of Simple Time Tracker with WearOS support. (Now integrated upstream)
0

Configure Feed

Select the types of activity you want to include in your feed.

add range clamp on statistics detail

razeeman (Apr 29, 2023, 2:33 PM +0300) 0694d5d6 5dce3cdf

+56 -8
+23 -1
core/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeMapper.kt
··· 78 78 rangeStart: Long, 79 79 rangeEnd: Long, 80 80 ): List<Record> { 81 - return records.filter { it.timeStarted < rangeEnd && it.timeEnded > rangeStart } 81 + return records.filter { it.isInRange(rangeStart, rangeEnd) } 82 82 } 83 83 84 84 fun getRunningRecordsFromRange( ··· 98 98 timeStarted = max(record.timeStarted, rangeStart), 99 99 timeEnded = min(record.timeEnded, rangeEnd) 100 100 ) 101 + } 102 + 103 + fun clampRecordToRange( 104 + record: Record, 105 + rangeStart: Long, 106 + rangeEnd: Long, 107 + ): Record { 108 + return if (!record.isInRange(rangeStart, rangeEnd)) { 109 + record.copy( 110 + timeStarted = max(record.timeStarted, rangeStart), 111 + timeEnded = min(record.timeEnded, rangeEnd) 112 + ) 113 + } else { 114 + record 115 + } 101 116 } 102 117 103 118 fun mapToDuration(ranges: List<Range>): Long { ··· 135 150 136 151 private fun mapToSelectRange(): SelectRangeViewData { 137 152 return SelectRangeViewData(text = resourceRepo.getString(R.string.range_custom)) 153 + } 154 + 155 + private fun Record.isInRange( 156 + rangeStart: Long, 157 + rangeEnd: Long, 158 + ): Boolean { 159 + return this.timeStarted < rangeEnd && this.timeEnded > rangeStart 138 160 } 139 161 140 162 companion object {
+1
domain/src/main/java/com/example/util/simpletimetracker/domain/model/Range.kt
··· 1 1 package com.example.util.simpletimetracker.domain.model 2 2 3 + // TODO switch to typealias to avoid object creation. 3 4 data class Range( 4 5 val timeStarted: Long, 5 6 val timeEnded: Long
+15 -3
features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailSplitChartInteractor.kt
··· 73 73 ) 74 74 75 75 val ranges = if (range.first != 0L && range.second != 0L) { 76 - rangeMapper.getRecordsFromRange(records, range.first, range.second) 76 + rangeMapper 77 + .getRecordsFromRange( 78 + records = records, 79 + rangeStart = range.first, 80 + rangeEnd = range.second 81 + ) 82 + .map { 83 + rangeMapper.clampToRange( 84 + record = it, 85 + rangeStart = range.first, 86 + rangeEnd = range.second 87 + ) 88 + } 77 89 } else { 78 - records 79 - }.map { Range(it.timeStarted, it.timeEnded) } 90 + records.map { Range(it.timeStarted, it.timeEnded) } 91 + } 80 92 val isVisible = (isForComparison && filter.isNotEmpty()) || !isForComparison 81 93 82 94 val minDuration = ranges
+16 -4
features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStatsInteractor.kt
··· 65 65 rangeMapper.getRecordsFromRange( 66 66 records = records, 67 67 rangeStart = range.first, 68 - rangeEnd = range.second 69 - ) 68 + rangeEnd = range.second, 69 + ).map { 70 + rangeMapper.clampRecordToRange( 71 + record = it, 72 + rangeStart = range.first, 73 + rangeEnd = range.second, 74 + ) 75 + } 70 76 }, 71 77 compareRecords = if (range.first == 0L && range.second == 0L) { 72 78 compareRecords ··· 74 80 rangeMapper.getRecordsFromRange( 75 81 records = compareRecords, 76 82 rangeStart = range.first, 77 - rangeEnd = range.second 78 - ) 83 + rangeEnd = range.second, 84 + ).map { 85 + rangeMapper.clampRecordToRange( 86 + record = it, 87 + rangeStart = range.first, 88 + rangeEnd = range.second, 89 + ) 90 + } 79 91 }, 80 92 showComparison = showComparison, 81 93 types = types,
+1
features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewModel/StatisticsDetailViewModel.kt
··· 366 366 } 367 367 368 368 private suspend fun loadRecordsCache() { 369 + // Load all records without date filter for faster date selection. 369 370 records = recordFilterInteractor.getByFilter(filter) 370 371 compareRecords = recordFilterInteractor.getByFilter(comparisonFilter) 371 372 }