From ac776dbf429e3f85d22f85b0a668cee7b2d74157 Mon Sep 17 00:00:00 2001 From: razeeman Date: Sat, 3 Jun 2023 15:05:39 +0300 Subject: [PATCH] add running records to statistics --- .../GetCurrentRecordsDurationInteractor.kt | 4 +- .../core/interactor/RecordFilterInteractor.kt | 6 +- .../core/interactor/StatisticsMediator.kt | 4 -- ...{RangeMapper.kt => RangeViewDataMapper.kt} | 67 +------------------ .../mapper/RunningRecordViewDataMapper.kt | 2 +- .../core/viewData/StatisticsDataHolder.kt | 3 + .../data_local/repo/RecordRepoImpl.kt | 9 +-- .../data_local/resolver/CsvRepoImpl.kt | 2 +- .../data_local/resolver/IcsRepoImpl.kt | 2 +- .../domain/interactor/RecordInteractor.kt | 9 +-- .../StatisticsCategoryInteractor.kt | 14 ++-- .../domain/interactor/StatisticsInteractor.kt | 30 ++++----- .../interactor/StatisticsTagInteractor.kt | 14 ++-- .../domain/mapper/RangeMapper.kt | 67 +++++++++++++++++++ .../domain/mapper/StatisticsMapper.kt | 17 ++--- .../simpletimetracker/domain/model/Record.kt | 15 ++--- .../domain/model/RecordBase.kt | 11 +++ .../domain/model/RunningRecord.kt | 12 ++-- .../domain/repo/RecordRepo.kt | 5 +- .../interactor/RecordsViewDataInteractor.kt | 7 +- .../StatisticsViewDataInteractor.kt | 13 +--- .../mapper/StatisticsViewDataMapper.kt | 10 +-- .../viewModel/StatisticsContainerViewModel.kt | 8 +-- .../StatisticsDetailChartInteractor.kt | 11 +-- .../StatisticsDetailSplitChartInteractor.kt | 7 +- .../StatisticsDetailStatsInteractor.kt | 37 +++------- .../StatisticsDetailStreaksInteractor.kt | 5 +- .../viewModel/StatisticsDetailViewModel.kt | 8 +-- .../WidgetStatisticsSettingsViewModel.kt | 9 +-- 29 files changed, 197 insertions(+), 211 deletions(-) rename core/src/main/java/com/example/util/simpletimetracker/core/mapper/{RangeMapper.kt => RangeViewDataMapper.kt} (70%) create mode 100644 domain/src/main/java/com/example/util/simpletimetracker/domain/mapper/RangeMapper.kt create mode 100644 domain/src/main/java/com/example/util/simpletimetracker/domain/model/RecordBase.kt diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/interactor/GetCurrentRecordsDurationInteractor.kt b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/GetCurrentRecordsDurationInteractor.kt index 51b44765..bda6852d 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/interactor/GetCurrentRecordsDurationInteractor.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/GetCurrentRecordsDurationInteractor.kt @@ -1,6 +1,6 @@ package com.example.util.simpletimetracker.core.interactor -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.domain.mapper.RangeMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordInteractor @@ -38,7 +38,7 @@ class GetCurrentRecordsDurationInteractor @Inject constructor( val currentRunning = current - runningRecord.timeStarted val currentRunningClamped = current - max(runningRecord.timeStarted, range.timeStarted) - val duration = recordInteractor.getFromRange(rangeStart, rangeEnd) + val duration = recordInteractor.getFromRange(range) .filter { it.typeId == runningRecord.id } .map { rangeMapper.clampToRange(it, rangeStart, rangeEnd) } .let(rangeMapper::mapToDuration) diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/interactor/RecordFilterInteractor.kt b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/RecordFilterInteractor.kt index 394c43ad..2d7e06ce 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/interactor/RecordFilterInteractor.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/RecordFilterInteractor.kt @@ -103,14 +103,14 @@ class RecordFilterInteractor @Inject constructor( val records = if (range.timeStarted == 0L && range.timeEnded == 0L) { interactor.getAll() } else { - interactor.getFromRange(range.timeStarted, range.timeEnded) + interactor.getFromRange(range) }.map { Range(it.timeStarted, it.timeEnded) } getUntrackedRecordsInteractor.get(range, records) } typeIds.isNotEmpty() && ranges.isNotEmpty() -> { val result = mutableMapOf() ranges - .map { interactor.getFromRangeByType(typeIds, it.timeStarted, it.timeEnded) } + .map { interactor.getFromRangeByType(typeIds, it) } .flatten() .forEach { result[it.id] = it } result.values.toList() @@ -129,7 +129,7 @@ class RecordFilterInteractor @Inject constructor( ranges.isNotEmpty() -> { val result = mutableMapOf() ranges - .map { interactor.getFromRange(it.timeStarted, it.timeEnded) } + .map { interactor.getFromRange(it) } .flatten() .forEach { result[it.id] = it } result.values.toList() diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/interactor/StatisticsMediator.kt b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/StatisticsMediator.kt index a8c80a5f..08bdf873 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/interactor/StatisticsMediator.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/StatisticsMediator.kt @@ -53,10 +53,6 @@ class StatisticsMediator @Inject constructor( ) } - suspend fun getRunningStatistics(): List { - return statisticsInteractor.getAllRunning() - } - suspend fun getDataHolders( filterType: ChartFilterType, types: Map, diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeMapper.kt b/core/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeViewDataMapper.kt similarity index 70% rename from core/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeMapper.kt rename to core/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeViewDataMapper.kt index 42d83dd5..5afb7af3 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeMapper.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeViewDataMapper.kt @@ -8,15 +8,10 @@ import com.example.util.simpletimetracker.core.viewData.SelectDateViewData import com.example.util.simpletimetracker.core.viewData.SelectRangeViewData import com.example.util.simpletimetracker.domain.extension.orZero import com.example.util.simpletimetracker.domain.model.DayOfWeek -import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.RangeLength -import com.example.util.simpletimetracker.domain.model.Record -import com.example.util.simpletimetracker.domain.model.RunningRecord import javax.inject.Inject -import kotlin.math.max -import kotlin.math.min -class RangeMapper @Inject constructor( +class RangeViewDataMapper @Inject constructor( private val resourceRepo: ResourceRepo, private val timeMapper: TimeMapper, ) { @@ -73,52 +68,6 @@ class RangeMapper @Inject constructor( } } - fun getRecordsFromRange( - records: List, - rangeStart: Long, - rangeEnd: Long, - ): List { - return records.filter { it.isInRange(rangeStart, rangeEnd) } - } - - fun getRunningRecordsFromRange( - records: List, - rangeStart: Long, - rangeEnd: Long, - ): List { - return records.filter { it.timeStarted < rangeEnd && System.currentTimeMillis() > rangeStart } - } - - fun clampToRange( - record: Record, - rangeStart: Long, - rangeEnd: Long, - ): Range { - return Range( - timeStarted = max(record.timeStarted, rangeStart), - timeEnded = min(record.timeEnded, rangeEnd) - ) - } - - fun clampRecordToRange( - record: Record, - rangeStart: Long, - rangeEnd: Long, - ): Record { - return if (!record.isCompletelyRange(rangeStart, rangeEnd)) { - record.copy( - timeStarted = max(record.timeStarted, rangeStart), - timeEnded = min(record.timeEnded, rangeEnd) - ) - } else { - record - } - } - - fun mapToDuration(ranges: List): Long { - return ranges.sumOf { it.duration } - } - private fun mapToRangeName(rangeLength: RangeLength): RangeViewData { val text = when (rangeLength) { is RangeLength.Day -> R.string.range_day @@ -152,20 +101,6 @@ class RangeMapper @Inject constructor( return SelectRangeViewData(text = resourceRepo.getString(R.string.range_custom)) } - private fun Record.isInRange( - rangeStart: Long, - rangeEnd: Long, - ): Boolean { - return this.timeStarted < rangeEnd && this.timeEnded > rangeStart - } - - private fun Record.isCompletelyRange( - rangeStart: Long, - rangeEnd: Long, - ): Boolean { - return this.timeStarted >= rangeStart && this.timeEnded <= rangeEnd - } - companion object { private val ranges: List = listOf( RangeLength.Last, diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/mapper/RunningRecordViewDataMapper.kt b/core/src/main/java/com/example/util/simpletimetracker/core/mapper/RunningRecordViewDataMapper.kt index 14360390..0706bfe3 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/mapper/RunningRecordViewDataMapper.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/mapper/RunningRecordViewDataMapper.kt @@ -100,7 +100,7 @@ class RunningRecordViewDataMapper @Inject constructor( if (dailyCurrent == null) return "" if (!dailyCurrent.durationDiffersFromCurrent) return "" - val hint = resourceRepo.getString(R.string.statistics_detail_total_duration).lowercase() + val hint = resourceRepo.getString(R.string.title_today).lowercase() val duration = timeMapper.formatInterval( interval = dailyCurrent.duration, forceSeconds = showSeconds, diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/viewData/StatisticsDataHolder.kt b/core/src/main/java/com/example/util/simpletimetracker/core/viewData/StatisticsDataHolder.kt index 3acee75a..98902f0c 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/viewData/StatisticsDataHolder.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/viewData/StatisticsDataHolder.kt @@ -2,6 +2,9 @@ package com.example.util.simpletimetracker.core.viewData import com.example.util.simpletimetracker.domain.model.AppColor +/** + * Type, category or tag. + */ data class StatisticsDataHolder( val name: String, val color: AppColor, diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordRepoImpl.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordRepoImpl.kt index e1f9c9b4..f19a2248 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordRepoImpl.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordRepoImpl.kt @@ -2,6 +2,7 @@ package com.example.util.simpletimetracker.data_local.repo import com.example.util.simpletimetracker.data_local.database.RecordDao import com.example.util.simpletimetracker.data_local.mapper.RecordDataLocalMapper +import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.Record import com.example.util.simpletimetracker.domain.repo.RecordRepo import kotlinx.coroutines.Dispatchers @@ -63,17 +64,17 @@ class RecordRepoImpl @Inject constructor( ?.let(recordDataLocalMapper::map) } - override suspend fun getFromRange(start: Long, end: Long): List = + override suspend fun getFromRange(range: Range): List = withContext(Dispatchers.IO) { Timber.d("getFromRange") - recordDao.getFromRange(start, end) + recordDao.getFromRange(range.timeStarted, range.timeEnded) .map(recordDataLocalMapper::map) } - override suspend fun getFromRangeByType(typeIds: List, start: Long, end: Long): List = + override suspend fun getFromRangeByType(typeIds: List, range: Range): List = withContext(Dispatchers.IO) { Timber.d("getFromRangeByType") - recordDao.getFromRangeByType(typeIds, start, end) + recordDao.getFromRangeByType(typeIds, range.timeStarted, range.timeEnded) .map(recordDataLocalMapper::map) } diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/CsvRepoImpl.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/CsvRepoImpl.kt index e6373a1a..2f142e50 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/CsvRepoImpl.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/CsvRepoImpl.kt @@ -63,7 +63,7 @@ class CsvRepoImpl @Inject constructor( // Write data val records = if (range != null) { - recordRepo.getFromRange(range.timeStarted, range.timeEnded) + recordRepo.getFromRange(range) } else { recordRepo.getAll() } diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/IcsRepoImpl.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/IcsRepoImpl.kt index 53707147..89043f6e 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/IcsRepoImpl.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/IcsRepoImpl.kt @@ -69,7 +69,7 @@ class IcsRepoImpl @Inject constructor( // Write data val records = if (range != null) { - recordRepo.getFromRange(range.timeStarted, range.timeEnded) + recordRepo.getFromRange(range) } else { recordRepo.getAll() } diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordInteractor.kt index f8bc299c..6e97f0a8 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordInteractor.kt @@ -1,5 +1,6 @@ package com.example.util.simpletimetracker.domain.interactor +import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.Record import com.example.util.simpletimetracker.domain.repo.RecordRepo import com.example.util.simpletimetracker.domain.repo.RecordToRecordTagRepo @@ -46,12 +47,12 @@ class RecordInteractor @Inject constructor( return recordRepo.getNext(timeEnded) } - suspend fun getFromRange(start: Long, end: Long): List { - return recordRepo.getFromRange(start, end) + suspend fun getFromRange(range: Range): List { + return recordRepo.getFromRange(range) } - suspend fun getFromRangeByType(typeIds: List, start: Long, end: Long): List { - return recordRepo.getFromRangeByType(typeIds, start, end) + suspend fun getFromRangeByType(typeIds: List, range: Range): List { + return recordRepo.getFromRangeByType(typeIds, range) } suspend fun add( diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsCategoryInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsCategoryInteractor.kt index dcee1130..67f65719 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsCategoryInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsCategoryInteractor.kt @@ -2,7 +2,7 @@ package com.example.util.simpletimetracker.domain.interactor import com.example.util.simpletimetracker.domain.UNCATEGORIZED_ITEM_ID import com.example.util.simpletimetracker.domain.model.Range -import com.example.util.simpletimetracker.domain.model.Record +import com.example.util.simpletimetracker.domain.model.RecordBase import com.example.util.simpletimetracker.domain.model.RecordTypeCategory import com.example.util.simpletimetracker.domain.model.Statistics import javax.inject.Inject @@ -35,7 +35,7 @@ class StatisticsCategoryInteractor @Inject constructor( private suspend fun getUncategorized( range: Range, - records: List, + records: List, addUncategorized: Boolean, ): List { if (addUncategorized) { @@ -54,17 +54,21 @@ class StatisticsCategoryInteractor @Inject constructor( return emptyList() } - private suspend fun getCategoryRecords(allRecords: List): Map> { + private suspend fun getCategoryRecords( + allRecords: List + ): Map> { val recordTypeCategories = recordTypeCategoryInteractor.getAll() .groupBy(RecordTypeCategory::categoryId) .mapValues { it.value.map(RecordTypeCategory::recordTypeId) } return recordTypeCategories .mapValues { (_, typeIds) -> allRecords.filter { it.typeId in typeIds } } - .filterValues(List::isNotEmpty) + .filterValues(List::isNotEmpty) } - private suspend fun getUncategorized(allRecords: List): List { + private suspend fun getUncategorized( + allRecords: List + ): List { val recordTypeCategories = recordTypeCategoryInteractor.getAll().map { it.recordTypeId } return allRecords.filter { it.typeId !in recordTypeCategories } diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsInteractor.kt index 3ff5411b..17492f70 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsInteractor.kt @@ -1,9 +1,10 @@ package com.example.util.simpletimetracker.domain.interactor import com.example.util.simpletimetracker.domain.UNTRACKED_ITEM_ID +import com.example.util.simpletimetracker.domain.mapper.RangeMapper import com.example.util.simpletimetracker.domain.mapper.StatisticsMapper import com.example.util.simpletimetracker.domain.model.Range -import com.example.util.simpletimetracker.domain.model.Record +import com.example.util.simpletimetracker.domain.model.RecordBase import com.example.util.simpletimetracker.domain.model.Statistics import javax.inject.Inject import kotlinx.coroutines.Dispatchers @@ -14,19 +15,9 @@ class StatisticsInteractor @Inject constructor( private val runningRecordInteractor: RunningRecordInteractor, private val getUntrackedRecordsInteractor: GetUntrackedRecordsInteractor, private val statisticsMapper: StatisticsMapper, + private val rangeMapper: RangeMapper, ) { - suspend fun getAllRunning(): List { - return runningRecordInteractor.getAll() - .groupBy { it.id } - .map { entry -> - Statistics( - id = entry.key, - duration = entry.value.let(statisticsMapper::mapToRunningDuration) - ) - } - } - suspend fun getFromRange( range: Range, addUntracked: Boolean, @@ -43,17 +34,20 @@ class StatisticsInteractor @Inject constructor( ) } - suspend fun getRecords(range: Range): List { + suspend fun getRecords(range: Range): List { + val runningRecords = runningRecordInteractor.getAll() + return if (rangeIsAllRecords(range)) { - recordInteractor.getAll() + recordInteractor.getAll() + runningRecords } else { - recordInteractor.getFromRange(range.timeStarted, range.timeEnded) + recordInteractor.getFromRange(range) + + rangeMapper.getRunningRecordsFromRange(runningRecords, range) } } fun getStatistics( range: Range, - records: Map>, + records: Map>, ): List { return records.map { (id, records) -> Statistics(id, getDuration(range, records)) @@ -62,7 +56,7 @@ class StatisticsInteractor @Inject constructor( fun getDuration( range: Range, - records: List, + records: List, ): Long { // If range is all records - do not clamp to range. return if (rangeIsAllRecords(range)) { @@ -74,7 +68,7 @@ class StatisticsInteractor @Inject constructor( suspend fun getUntracked( range: Range, - records: List, + records: List, addUntracked: Boolean, ): List { if (addUntracked) { diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsTagInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsTagInteractor.kt index d21dd05b..d9b545f2 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsTagInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/StatisticsTagInteractor.kt @@ -2,7 +2,7 @@ package com.example.util.simpletimetracker.domain.interactor import com.example.util.simpletimetracker.domain.UNCATEGORIZED_ITEM_ID import com.example.util.simpletimetracker.domain.model.Range -import com.example.util.simpletimetracker.domain.model.Record +import com.example.util.simpletimetracker.domain.model.RecordBase import com.example.util.simpletimetracker.domain.model.RecordTag import com.example.util.simpletimetracker.domain.model.Statistics import javax.inject.Inject @@ -35,7 +35,7 @@ class StatisticsTagInteractor @Inject constructor( private fun getUntagged( range: Range, - records: List, + records: List, addUncategorized: Boolean, ): List { if (addUncategorized) { @@ -54,15 +54,19 @@ class StatisticsTagInteractor @Inject constructor( return emptyList() } - private suspend fun getTagRecords(allRecords: List): Map> { + private suspend fun getTagRecords( + allRecords: List + ): Map> { val recordTags = recordTagInteractor.getAll().map(RecordTag::id) return recordTags .associateWith { tagId -> allRecords.filter { tagId in it.tagIds } } - .filterValues(List::isNotEmpty) + .filterValues(List::isNotEmpty) } - private fun getUntagged(allRecords: List): List { + private fun getUntagged( + allRecords: List + ): List { return allRecords.filter { it.tagIds.isEmpty() } } } \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/mapper/RangeMapper.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/mapper/RangeMapper.kt new file mode 100644 index 00000000..f41d0158 --- /dev/null +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/mapper/RangeMapper.kt @@ -0,0 +1,67 @@ +package com.example.util.simpletimetracker.domain.mapper + +import com.example.util.simpletimetracker.domain.model.Range +import com.example.util.simpletimetracker.domain.model.Record +import com.example.util.simpletimetracker.domain.model.RecordBase +import com.example.util.simpletimetracker.domain.model.RunningRecord +import javax.inject.Inject +import kotlin.math.max +import kotlin.math.min + +class RangeMapper @Inject constructor() { + + fun getRecordsFromRange( + records: List, + range: Range, + ): List { + return records.filter { it.isInRange(range) } + } + + fun getRunningRecordsFromRange( + records: List, + range: Range, + ): List { + return records.filter { it.isInRange(range) } + } + + fun clampToRange( + record: Record, + rangeStart: Long, + rangeEnd: Long, + ): Range { + return Range( + timeStarted = max(record.timeStarted, rangeStart), + timeEnded = min(record.timeEnded, rangeEnd) + ) + } + + fun clampRecordToRange( + record: Record, + range: Range, + ): Record { + return if (!record.isCompletelyRange(range)) { + record.copy( + timeStarted = max(record.timeStarted, range.timeStarted), + timeEnded = min(record.timeEnded, range.timeEnded) + ) + } else { + record + } + } + + fun mapToDuration(ranges: List): Long { + return ranges.sumOf { it.duration } + } + + private fun RecordBase.isInRange( + range: Range, + ): Boolean { + return this.timeStarted < range.timeEnded && this.timeEnded > range.timeStarted + } + + private fun Record.isCompletelyRange( + range: Range, + ): Boolean { + return this.timeStarted >= range.timeStarted && this.timeEnded <= range.timeEnded + } +} \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/mapper/StatisticsMapper.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/mapper/StatisticsMapper.kt index fa3399a4..367b7f49 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/mapper/StatisticsMapper.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/mapper/StatisticsMapper.kt @@ -1,8 +1,7 @@ package com.example.util.simpletimetracker.domain.mapper import com.example.util.simpletimetracker.domain.model.Range -import com.example.util.simpletimetracker.domain.model.Record -import com.example.util.simpletimetracker.domain.model.RunningRecord +import com.example.util.simpletimetracker.domain.model.RecordBase import javax.inject.Inject import kotlin.math.max import kotlin.math.min @@ -10,17 +9,15 @@ import kotlin.math.roundToLong class StatisticsMapper @Inject constructor() { - fun mapToDuration(records: List): Long { - return records.sumOf { it.timeEnded - it.timeStarted } + fun mapToDuration(records: List): Long { + return records.sumOf(RecordBase::duration) } - fun mapToRunningDuration(runningRecords: List): Long { - return runningRecords.sumOf { System.currentTimeMillis() - it.timeStarted } - } - - fun mapToDurationFromRange(records: List, range: Range): Long { + fun mapToDurationFromRange(records: List, range: Range): Long { // Remove parts of the record that is not in the range - return records.sumOf { min(it.timeEnded, range.timeEnded) - max(it.timeStarted, range.timeStarted) } + return records.sumOf { + min(it.timeEnded, range.timeEnded) - max(it.timeStarted, range.timeStarted) + } } fun getDurationPercentString( diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/model/Record.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/Record.kt index 473d7d27..e1fe194f 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/model/Record.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/Record.kt @@ -2,12 +2,9 @@ package com.example.util.simpletimetracker.domain.model data class Record( val id: Long = 0, - val typeId: Long, - val timeStarted: Long, - val timeEnded: Long, - val comment: String, - val tagIds: List = emptyList(), -) { - - val duration: Long = timeEnded - timeStarted -} \ No newline at end of file + override val typeId: Long, + override val timeStarted: Long, + override val timeEnded: Long, + override val comment: String, + override val tagIds: List = emptyList(), +) : RecordBase \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RecordBase.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RecordBase.kt new file mode 100644 index 00000000..797aa87c --- /dev/null +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RecordBase.kt @@ -0,0 +1,11 @@ +package com.example.util.simpletimetracker.domain.model + +interface RecordBase { + val typeId: Long + val timeStarted: Long + val timeEnded: Long + val comment: String + val tagIds: List + + val duration: Long get() = timeEnded - timeStarted +} \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RunningRecord.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RunningRecord.kt index 72e2f2e6..7d4d3a7e 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RunningRecord.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RunningRecord.kt @@ -2,7 +2,11 @@ package com.example.util.simpletimetracker.domain.model data class RunningRecord( val id: Long, - val timeStarted: Long, - val comment: String, - val tagIds: List = emptyList() -) \ No newline at end of file + override val timeStarted: Long, + override val comment: String, + override val tagIds: List = emptyList(), +) : RecordBase { + + override val typeId: Long = id + override val timeEnded: Long get() = System.currentTimeMillis() +} \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/RecordRepo.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/RecordRepo.kt index 30d1b829..9ed66eb4 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/RecordRepo.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/RecordRepo.kt @@ -1,5 +1,6 @@ package com.example.util.simpletimetracker.domain.repo +import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.Record interface RecordRepo { @@ -18,9 +19,9 @@ interface RecordRepo { suspend fun get(id: Long): Record? - suspend fun getFromRange(start: Long, end: Long): List + suspend fun getFromRange(range: Range): List - suspend fun getFromRangeByType(typeIds: List, start: Long, end: Long): List + suspend fun getFromRangeByType(typeIds: List, range: Range): List suspend fun getPrev(timeStarted: Long): Record? diff --git a/features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/interactor/RecordsViewDataInteractor.kt b/features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/interactor/RecordsViewDataInteractor.kt index f9fb5e02..5a89cbae 100644 --- a/features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/interactor/RecordsViewDataInteractor.kt +++ b/features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/interactor/RecordsViewDataInteractor.kt @@ -2,7 +2,7 @@ package com.example.util.simpletimetracker.feature_records.interactor import com.example.util.simpletimetracker.core.extension.setToStartOfDay import com.example.util.simpletimetracker.core.interactor.GetRunningRecordViewDataMediator -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.domain.mapper.RangeMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.domain.interactor.GetUntrackedRecordsInteractor import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor @@ -70,7 +70,7 @@ class RecordsViewDataInteractor @Inject constructor( firstDayOfWeek = DayOfWeek.MONDAY, // Doesn't matter for days. startOfDayShift = startOfDayShift, ) - val records = recordInteractor.getFromRange(rangeStart, rangeEnd) + val records = recordInteractor.getFromRange(Range(rangeStart, rangeEnd)) val data = getRecordsViewData( records = records, @@ -201,8 +201,7 @@ class RecordsViewDataInteractor @Inject constructor( .let { rangeMapper.getRunningRecordsFromRange( records = it, - rangeStart = rangeStart, - rangeEnd = rangeEnd + range = Range(rangeStart, rangeEnd), ) } .mapNotNull { runningRecord -> diff --git a/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/interactor/StatisticsViewDataInteractor.kt b/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/interactor/StatisticsViewDataInteractor.kt index 4e28959e..6a6bea9b 100644 --- a/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/interactor/StatisticsViewDataInteractor.kt +++ b/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/interactor/StatisticsViewDataInteractor.kt @@ -3,7 +3,7 @@ package com.example.util.simpletimetracker.feature_statistics.interactor import com.example.util.simpletimetracker.core.interactor.StatisticsChartViewDataInteractor import com.example.util.simpletimetracker.core.interactor.StatisticsMediator import com.example.util.simpletimetracker.core.mapper.ColorMapper -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.core.mapper.RangeViewDataMapper import com.example.util.simpletimetracker.domain.UNCATEGORIZED_ITEM_ID import com.example.util.simpletimetracker.domain.UNTRACKED_ITEM_ID import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor @@ -28,7 +28,7 @@ class StatisticsViewDataInteractor @Inject constructor( private val statisticsChartViewDataInteractor: StatisticsChartViewDataInteractor, private val prefsInteractor: PrefsInteractor, private val statisticsViewDataMapper: StatisticsViewDataMapper, - private val rangeMapper: RangeMapper, + private val rangeViewDataMapper: RangeViewDataMapper, private val colorMapper: ColorMapper, ) { @@ -110,12 +110,6 @@ class StatisticsViewDataInteractor @Inject constructor( filterType = filterType, ) } - // Count running records only for actual period. - val runningStatistics = if (shift == 0) { - statisticsMediator.getRunningStatistics() - } else { - emptyList() - } val chart = statisticsChartViewDataInteractor.getChart( filterType = filterType, filteredIds = filteredIds, @@ -152,7 +146,6 @@ class StatisticsViewDataInteractor @Inject constructor( val goalsList = statisticsViewDataMapper.mapGoalItemsList( rangeLength = rangeLength, statistics = goalsStatistics, - runningStatistics = runningStatistics, data = dataHolders, filteredIds = filteredIds, isDarkTheme = isDarkTheme, @@ -194,7 +187,7 @@ class StatisticsViewDataInteractor @Inject constructor( rangeLength: RangeLength, shift: Int, ): List = mutableListOf().apply { - val title = rangeMapper.mapToShareTitle( + val title = rangeViewDataMapper.mapToShareTitle( rangeLength = rangeLength, position = shift, startOfDayShift = prefsInteractor.getStartOfDayShift(), diff --git a/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/mapper/StatisticsViewDataMapper.kt b/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/mapper/StatisticsViewDataMapper.kt index 4a312a43..845415c2 100644 --- a/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/mapper/StatisticsViewDataMapper.kt +++ b/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/mapper/StatisticsViewDataMapper.kt @@ -70,7 +70,6 @@ class StatisticsViewDataMapper @Inject constructor( fun mapGoalItemsList( rangeLength: RangeLength, statistics: List, - runningStatistics: List, data: Map, filteredIds: List, isDarkTheme: Boolean, @@ -81,12 +80,8 @@ class StatisticsViewDataMapper @Inject constructor( return statisticsFiltered .mapNotNull { statistic -> - val currentRunningDuration = runningStatistics - .filter { it.id == statistic.id } - .sumOf { it.duration } mapGoalItem( rangeLength = rangeLength, - currentRunningDuration = currentRunningDuration, statistics = statistic, dataHolder = data[statistic.id] ?: return@mapNotNull null, isDarkTheme = isDarkTheme, @@ -222,7 +217,6 @@ class StatisticsViewDataMapper @Inject constructor( private fun mapGoalItem( rangeLength: RangeLength, - currentRunningDuration: Long, statistics: Statistics, dataHolder: StatisticsDataHolder, isDarkTheme: Boolean, @@ -237,7 +231,6 @@ class StatisticsViewDataMapper @Inject constructor( color = dataHolder.color .let { colorMapper.mapToColorInt(it, isDarkTheme) }, goal = mapGoal( - currentRunningDuration = currentRunningDuration, statistics = statistics, dataHolder = dataHolder, rangeLength = rangeLength, @@ -248,7 +241,6 @@ class StatisticsViewDataMapper @Inject constructor( } private fun mapGoal( - currentRunningDuration: Long, statistics: Statistics, dataHolder: StatisticsDataHolder, rangeLength: RangeLength, @@ -264,7 +256,7 @@ class StatisticsViewDataMapper @Inject constructor( if (goal == 0L) return StatisticsGoalViewData.Goal.empty() - val current = statistics.duration + currentRunningDuration + val current = statistics.duration val goalComplete = goal - current <= 0L val currentString = timeMapper.formatInterval( interval = current, diff --git a/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/viewModel/StatisticsContainerViewModel.kt b/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/viewModel/StatisticsContainerViewModel.kt index d332fdd5..1c702fc6 100644 --- a/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/viewModel/StatisticsContainerViewModel.kt +++ b/features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/viewModel/StatisticsContainerViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.util.simpletimetracker.core.extension.set -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.core.mapper.RangeViewDataMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.core.viewData.RangesViewData import com.example.util.simpletimetracker.core.viewData.SelectDateViewData @@ -26,7 +26,7 @@ import javax.inject.Inject class StatisticsContainerViewModel @Inject constructor( private val router: Router, private val timeMapper: TimeMapper, - private val rangeMapper: RangeMapper, + private val rangeViewDataMapper: RangeViewDataMapper, private val prefsInteractor: PrefsInteractor, ) : ViewModel() { @@ -151,7 +151,7 @@ class StatisticsContainerViewModel @Inject constructor( private suspend fun loadTitle(): String { val startOfDayShift = prefsInteractor.getStartOfDayShift() val firstDayOfWeek = prefsInteractor.getFirstDayOfWeek() - return rangeMapper.mapToTitle( + return rangeViewDataMapper.mapToTitle( rangeLength = getRangeLength(), position = position.value.orZero(), startOfDayShift = startOfDayShift, @@ -164,7 +164,7 @@ class StatisticsContainerViewModel @Inject constructor( } private suspend fun loadRanges(): RangesViewData { - return rangeMapper.mapToRanges(getRangeLength()) + return rangeViewDataMapper.mapToRanges(getRangeLength()) } private fun updateNavButtonsVisibility() = viewModelScope.launch { diff --git a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailChartInteractor.kt b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailChartInteractor.kt index 0d11e1e4..0c1698b4 100644 --- a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailChartInteractor.kt +++ b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailChartInteractor.kt @@ -2,13 +2,14 @@ package com.example.util.simpletimetracker.feature_statistics_detail.interactor import com.example.util.simpletimetracker.core.extension.setToStartOfDay import com.example.util.simpletimetracker.core.extension.setWeekToFirstDay -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.domain.mapper.RangeMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.domain.extension.getTypeIds import com.example.util.simpletimetracker.domain.extension.hasActivityFilter import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.model.DayOfWeek +import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.RangeLength import com.example.util.simpletimetracker.domain.model.Record import com.example.util.simpletimetracker.domain.model.RecordsFilter @@ -133,15 +134,17 @@ class StatisticsDetailChartInteractor @Inject constructor( val records = rangeMapper.getRecordsFromRange( records = allRecords, - rangeStart = ranges.first().rangeStart, - rangeEnd = ranges.last().rangeEnd + range = Range( + timeStarted = ranges.first().rangeStart, + timeEnded = ranges.last().rangeEnd, + ), ) if (records.isEmpty()) return mapEmpty() return ranges .map { data -> - val duration = rangeMapper.getRecordsFromRange(records, data.rangeStart, data.rangeEnd) + val duration = rangeMapper.getRecordsFromRange(records, Range(data.rangeStart, data.rangeEnd)) .map { record -> rangeMapper.clampToRange(record, data.rangeStart, data.rangeEnd) } .let(rangeMapper::mapToDuration) diff --git a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailSplitChartInteractor.kt b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailSplitChartInteractor.kt index baa71c89..6715584d 100644 --- a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailSplitChartInteractor.kt +++ b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailSplitChartInteractor.kt @@ -1,6 +1,6 @@ package com.example.util.simpletimetracker.feature_statistics_detail.interactor -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.domain.mapper.RangeMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.domain.extension.orZero import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor @@ -78,8 +78,7 @@ class StatisticsDetailSplitChartInteractor @Inject constructor( rangeMapper .getRecordsFromRange( records = records, - rangeStart = range.first, - rangeEnd = range.second + range = Range(range.first, range.second), ) .map { rangeMapper.clampToRange( @@ -184,7 +183,7 @@ class StatisticsDetailSplitChartInteractor @Inject constructor( private fun mapToRanges(records: List, range: Pair): List { return if (range.first != 0L && range.second != 0L) { - rangeMapper.getRecordsFromRange(records, range.first, range.second) + rangeMapper.getRecordsFromRange(records, Range(range.first, range.second)) .map { rangeMapper.clampToRange(it, range.first, range.second) } } else { records.map { Range(it.timeStarted, it.timeEnded) } diff --git a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStatsInteractor.kt b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStatsInteractor.kt index 282b9449..9209f34c 100644 --- a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStatsInteractor.kt +++ b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStatsInteractor.kt @@ -2,7 +2,7 @@ package com.example.util.simpletimetracker.feature_statistics_detail.interactor import com.example.util.simpletimetracker.core.mapper.ColorMapper import com.example.util.simpletimetracker.core.mapper.IconMapper -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.domain.mapper.RangeMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.domain.UNCATEGORIZED_ITEM_ID @@ -11,6 +11,7 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTagInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.mapper.StatisticsMapper +import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.RangeLength import com.example.util.simpletimetracker.domain.model.Record import com.example.util.simpletimetracker.domain.model.RecordTag @@ -59,38 +60,22 @@ class StatisticsDetailStatsInteractor @Inject constructor( shift = rangePosition, firstDayOfWeek = firstDayOfWeek, startOfDayShift = startOfDayShift - ) + ).let { + Range(it.first, it.second) + } return@withContext mapStatsData( - records = if (range.first == 0L && range.second == 0L) { + records = if (range.timeStarted == 0L && range.timeEnded == 0L) { records } else { - rangeMapper.getRecordsFromRange( - records = records, - rangeStart = range.first, - rangeEnd = range.second, - ).map { - rangeMapper.clampRecordToRange( - record = it, - rangeStart = range.first, - rangeEnd = range.second, - ) - } + rangeMapper.getRecordsFromRange(records, range) + .map { rangeMapper.clampRecordToRange(it, range) } }, - compareRecords = if (range.first == 0L && range.second == 0L) { + compareRecords = if (range.timeStarted == 0L && range.timeEnded == 0L) { compareRecords } else { - rangeMapper.getRecordsFromRange( - records = compareRecords, - rangeStart = range.first, - rangeEnd = range.second, - ).map { - rangeMapper.clampRecordToRange( - record = it, - rangeStart = range.first, - rangeEnd = range.second, - ) - } + rangeMapper.getRecordsFromRange(compareRecords, range) + .map { rangeMapper.clampRecordToRange(it, range) } }, showComparison = showComparison, types = types, diff --git a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt index 96b7b930..c835f528 100644 --- a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt +++ b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt @@ -1,7 +1,7 @@ package com.example.util.simpletimetracker.feature_statistics_detail.interactor import com.example.util.simpletimetracker.core.extension.setToStartOfDay -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.domain.mapper.RangeMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.domain.extension.orZero @@ -199,8 +199,7 @@ class StatisticsDetailStreaksInteractor @Inject constructor( ).map { day -> day.timeStarted to rangeMapper.getRecordsFromRange( records = records, - rangeStart = day.timeStarted, - rangeEnd = day.timeEnded, + range = Range(day.timeStarted, day.timeEnded), ).map { rangeMapper.clampToRange( record = it, diff --git a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewModel/StatisticsDetailViewModel.kt b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewModel/StatisticsDetailViewModel.kt index 89720b1c..471dc784 100644 --- a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewModel/StatisticsDetailViewModel.kt +++ b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewModel/StatisticsDetailViewModel.kt @@ -8,7 +8,7 @@ import com.example.util.simpletimetracker.core.extension.set import com.example.util.simpletimetracker.core.extension.toModel import com.example.util.simpletimetracker.core.extension.toParams import com.example.util.simpletimetracker.core.interactor.RecordFilterInteractor -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.core.mapper.RangeViewDataMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.core.view.buttonsRowView.ButtonsRowViewData @@ -71,7 +71,7 @@ class StatisticsDetailViewModel @Inject constructor( private val streaksInteractor: StatisticsDetailStreaksInteractor, private val splitChartInteractor: StatisticsDetailSplitChartInteractor, private val mapper: StatisticsDetailViewDataMapper, - private val rangeMapper: RangeMapper, + private val rangeViewDataMapper: RangeViewDataMapper, private val timeMapper: TimeMapper, ) : ViewModel() { @@ -511,7 +511,7 @@ class StatisticsDetailViewModel @Inject constructor( private suspend fun loadTitle(): String { val startOfDayShift = prefsInteractor.getStartOfDayShift() val firstDayOfWeek = prefsInteractor.getFirstDayOfWeek() - return rangeMapper.mapToTitle(rangeLength, rangePosition, startOfDayShift, firstDayOfWeek) + return rangeViewDataMapper.mapToTitle(rangeLength, rangePosition, startOfDayShift, firstDayOfWeek) } private fun updateRanges() { @@ -519,7 +519,7 @@ class StatisticsDetailViewModel @Inject constructor( } private fun loadRanges(): RangesViewData { - return rangeMapper.mapToRanges(rangeLength) + return rangeViewDataMapper.mapToRanges(rangeLength) } private fun updateButtonsVisibility() { diff --git a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/settings/WidgetStatisticsSettingsViewModel.kt b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/settings/WidgetStatisticsSettingsViewModel.kt index 53b43961..5841b8ad 100644 --- a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/settings/WidgetStatisticsSettingsViewModel.kt +++ b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/settings/WidgetStatisticsSettingsViewModel.kt @@ -8,7 +8,8 @@ import com.example.util.simpletimetracker.core.extension.addOrRemove import com.example.util.simpletimetracker.core.extension.set import com.example.util.simpletimetracker.core.interactor.ChartFilterViewDataInteractor import com.example.util.simpletimetracker.core.mapper.ChartFilterViewDataMapper -import com.example.util.simpletimetracker.core.mapper.RangeMapper +import com.example.util.simpletimetracker.domain.mapper.RangeMapper +import com.example.util.simpletimetracker.core.mapper.RangeViewDataMapper import com.example.util.simpletimetracker.core.view.buttonsRowView.ButtonsRowViewData import com.example.util.simpletimetracker.core.viewData.ChartFilterTypeViewData import com.example.util.simpletimetracker.core.viewData.RangeViewData @@ -43,7 +44,7 @@ class WidgetStatisticsSettingsViewModel @Inject constructor( private val categoryInteractor: CategoryInteractor, private val recordTagInteractor: RecordTagInteractor, private val chartFilterViewDataMapper: ChartFilterViewDataMapper, - private val rangeMapper: RangeMapper, + private val rangeViewDataMapper: RangeViewDataMapper, private val chartFilterViewDataInteractor: ChartFilterViewDataInteractor, ) : ViewModel() { @@ -307,7 +308,7 @@ class WidgetStatisticsSettingsViewModel @Inject constructor( private suspend fun loadTitle(): String { val startOfDayShift = prefsInteractor.getStartOfDayShift() val firstDayOfWeek = prefsInteractor.getFirstDayOfWeek() - return rangeMapper.mapToTitle( + return rangeViewDataMapper.mapToTitle( rangeLength = widgetData.rangeLength, position = 0, startOfDayShift = startOfDayShift, @@ -320,6 +321,6 @@ class WidgetStatisticsSettingsViewModel @Inject constructor( } private fun loadRanges(): RangesViewData { - return rangeMapper.mapToRanges(widgetData.rangeLength, addSelection = false) + return rangeViewDataMapper.mapToRanges(widgetData.rangeLength, addSelection = false) } } -- 2.51.2