Skip to content

Commit

Permalink
add daily calendar comparison
Browse files Browse the repository at this point in the history
  • Loading branch information
Razeeman committed Aug 31, 2024
1 parent 0961873 commit bd6102c
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import com.example.util.simpletimetracker.feature_statistics_detail.adapter.Stat
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailPreviewsViewData
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailSeriesCalendarViewData
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailSeriesChartViewData
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailDayCalendarViewData
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailChartCompositeViewData
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailChartViewData
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewCompositeViewData
Expand All @@ -31,7 +30,7 @@ class StatisticsDetailContentInteractor @Inject constructor(
fun getContent(
previewViewData: StatisticsDetailPreviewCompositeViewData?,
chartViewData: StatisticsDetailChartCompositeViewData?,
dailyCalendarViewData: StatisticsDetailDayCalendarViewData?,
dailyCalendarViewData: List<ViewHolderType>?,
statsViewData: StatisticsDetailStatsViewData?,
streaksViewData: StatisticsDetailStreaksViewData?,
streaksGoalViewData: List<ViewHolderType>?,
Expand Down Expand Up @@ -120,10 +119,6 @@ class StatisticsDetailContentInteractor @Inject constructor(
}

dailyCalendarViewData?.let {
result += StatisticsDetailHintViewData(
block = StatisticsDetailBlock.DailyCalendarHint,
text = resourceRepo.getString(R.string.statistics_daily_calendar_hint),
)
result += it
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import com.example.util.simpletimetracker.domain.model.RecordBase
import com.example.util.simpletimetracker.domain.model.RecordTag
import com.example.util.simpletimetracker.domain.model.RecordType
import com.example.util.simpletimetracker.domain.model.RecordsFilter
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
import com.example.util.simpletimetracker.feature_statistics_detail.mapper.StatisticsDetailDailyCalendarViewDataMapper
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailDayCalendarViewData
import kotlinx.coroutines.Dispatchers
Expand All @@ -47,20 +48,51 @@ class StatisticsDetailDailyCalendarViewDataInteractor @Inject constructor(

fun getEmptyChartViewData(
rangeLength: RangeLength,
): StatisticsDetailDayCalendarViewData? {
if (rangeLength != RangeLength.Day) return null
return mapper.mapToEmpty()
): List<ViewHolderType> {
if (rangeLength != RangeLength.Day) return emptyList()
return listOf(
mapper.mapToHint(),
mapper.mapToEmpty(),
)
}

suspend fun getViewData(
records: List<RecordBase>,
compareRecords: List<RecordBase>,
filter: List<RecordsFilter>,
compare: List<RecordsFilter>, // TODO
compare: List<RecordsFilter>,
rangeLength: RangeLength,
rangePosition: Int,
): List<ViewHolderType> = withContext(Dispatchers.Default) {
if (rangeLength != RangeLength.Day) return@withContext emptyList()

return@withContext listOfNotNull(
mapper.mapToHint(),
getViewData(
records = records,
filter = filter,
rangeLength = rangeLength,
rangePosition = rangePosition,
isForComparison = false,
),
getViewData(
records = compareRecords,
filter = compare,
rangeLength = rangeLength,
rangePosition = rangePosition,
isForComparison = true,
),
)
}

private suspend fun getViewData(
records: List<RecordBase>,
filter: List<RecordsFilter>,
rangeLength: RangeLength,
rangePosition: Int,
): StatisticsDetailDayCalendarViewData? = withContext(Dispatchers.Default) {
if (rangeLength != RangeLength.Day) return@withContext null
isForComparison: Boolean,
): ViewHolderType? {
if (isForComparison && filter.isEmpty()) return null

val calendar = Calendar.getInstance()
val startOfDayShift = prefsInteractor.getStartOfDayShift()
Expand Down Expand Up @@ -90,7 +122,7 @@ class StatisticsDetailDailyCalendarViewDataInteractor @Inject constructor(
)
}

return@withContext StatisticsDetailDayCalendarViewData(
return StatisticsDetailDayCalendarViewData(
data = DayCalendarViewData(data),
)
}
Expand Down Expand Up @@ -225,7 +257,6 @@ class StatisticsDetailDailyCalendarViewDataInteractor @Inject constructor(
}

return tagsData + untaggedData

}

data class RecordHolder(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,6 @@ class StatisticsDetailPreviewInteractor @Inject constructor(
object Activities : PreviewType
object Categories : PreviewType
object SelectedTags : PreviewType
object ActivitiesFromRecords: PreviewType
object ActivitiesFromRecords : PreviewType
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.example.util.simpletimetracker.feature_statistics_detail.mapper

import com.example.util.simpletimetracker.core.mapper.TimeMapper
import com.example.util.simpletimetracker.core.repo.ResourceRepo
import com.example.util.simpletimetracker.core.view.dayCalendar.DayCalendarViewData
import com.example.util.simpletimetracker.domain.model.RecordBase
import com.example.util.simpletimetracker.feature_statistics_detail.R
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailBlock
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailHintViewData
import com.example.util.simpletimetracker.feature_statistics_detail.interactor.StatisticsDetailDailyCalendarViewDataInteractor.RecordHolder
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailDayCalendarViewData
import java.util.Calendar
import javax.inject.Inject

class StatisticsDetailDailyCalendarViewDataMapper @Inject constructor(
private val timeMapper: TimeMapper,
private val resourceRepo: ResourceRepo,
) {

fun mapToEmpty(): StatisticsDetailDayCalendarViewData {
Expand Down Expand Up @@ -50,4 +55,11 @@ class StatisticsDetailDailyCalendarViewDataMapper @Inject constructor(
color,
)
}

fun mapToHint(): StatisticsDetailHintViewData {
return StatisticsDetailHintViewData(
block = StatisticsDetailBlock.DailyCalendarHint,
text = resourceRepo.getString(R.string.statistics_daily_calendar_hint),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ import androidx.lifecycle.LiveData
import com.example.util.simpletimetracker.core.base.ViewModelDelegate
import com.example.util.simpletimetracker.core.extension.lazySuspend
import com.example.util.simpletimetracker.core.extension.set
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
import com.example.util.simpletimetracker.feature_statistics_detail.interactor.StatisticsDetailDailyCalendarViewDataInteractor
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailDayCalendarViewData
import kotlinx.coroutines.launch
import javax.inject.Inject

class StatisticsDetailDailyCalendarViewModelDelegate @Inject constructor(
private val dailyCalendarViewDataInteractor: StatisticsDetailDailyCalendarViewDataInteractor,
) : StatisticsDetailViewModelDelegate, ViewModelDelegate() {

val viewData: LiveData<StatisticsDetailDayCalendarViewData?> by lazySuspend {
val viewData: LiveData<List<ViewHolderType>> by lazySuspend {
loadEmptyViewData().also { parent?.updateContent() }
}

Expand All @@ -24,20 +24,20 @@ class StatisticsDetailDailyCalendarViewModelDelegate @Inject constructor(
}

fun updateViewData() = delegateScope.launch {
val data = loadViewData() ?: return@launch
val data = loadViewData()
viewData.set(data)
parent?.updateContent()
}

private fun loadEmptyViewData(): StatisticsDetailDayCalendarViewData? {
val parent = parent ?: return null
private fun loadEmptyViewData(): List<ViewHolderType> {
val parent = parent ?: return emptyList()
return dailyCalendarViewDataInteractor.getEmptyChartViewData(
rangeLength = parent.rangeLength,
)
}

private suspend fun loadViewData(): StatisticsDetailDayCalendarViewData? {
val parent = parent ?: return null
private suspend fun loadViewData(): List<ViewHolderType> {
val parent = parent ?: return emptyList()
return dailyCalendarViewDataInteractor.getViewData(
records = parent.records,
compareRecords = parent.compareRecords,
Expand Down

0 comments on commit bd6102c

Please sign in to comment.