diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/extension/OtherExtensions.kt b/core/src/main/java/com/example/util/simpletimetracker/core/extension/OtherExtensions.kt index 69b81888..6e7822c7 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/extension/OtherExtensions.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/extension/OtherExtensions.kt @@ -59,6 +59,12 @@ fun Calendar.shift(shift: Long): Calendar { return this } +fun Calendar.shiftTimeStamp(timestamp: Long, shift: Long): Long { + timeInMillis = timestamp + shift(shift) + return timeInMillis +} + @OptIn(DelicateCoroutinesApi::class) fun BroadcastReceiver.goAsync( coroutineScope: CoroutineScope = GlobalScope, diff --git a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/customView/SeriesCalendarView.kt b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/customView/SeriesCalendarView.kt index 53162fdf..c2078853 100644 --- a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/customView/SeriesCalendarView.kt +++ b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/customView/SeriesCalendarView.kt @@ -114,11 +114,11 @@ class SeriesCalendarView @JvmOverloads constructor( } fun setData(viewData: List) { - if (this.data.size != data.size) { + if (data.size != viewData.size) { panFactor = 0f lastPanFactor = 0f } - this.data = viewData.map { Data(cell = it) } + data = viewData.map { Data(cell = it) } invalidate() } 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 d9fdb8ce..13729cff 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,7 @@ package com.example.util.simpletimetracker.feature_statistics_detail.interactor import com.example.util.simpletimetracker.core.extension.shift +import com.example.util.simpletimetracker.core.extension.shiftTimeStamp import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.domain.extension.orZero import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor @@ -237,10 +238,8 @@ class StatisticsDetailSplitChartInteractor @Inject constructor( ) SplitChartGrouping.DAILY -> timeMapper.sameDay( - date1 = calendar.apply { timeInMillis = record.timeStarted } - .shift(-startOfDayShift).timeInMillis, - date2 = calendar.apply { timeInMillis = record.timeEnded } - .shift(-startOfDayShift).timeInMillis, + date1 = calendar.shiftTimeStamp(record.timeStarted, -startOfDayShift), + date2 = calendar.shiftTimeStamp(record.timeEnded, -startOfDayShift), calendar = calendar ) } 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 5ab32efa..13a5579e 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,6 +1,8 @@ package com.example.util.simpletimetracker.feature_statistics_detail.interactor import com.example.util.simpletimetracker.core.extension.setToStartOfDay +import com.example.util.simpletimetracker.core.extension.shift +import com.example.util.simpletimetracker.core.extension.shiftTimeStamp import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.domain.extension.orZero @@ -68,7 +70,7 @@ class StatisticsDetailStreaksInteractor @Inject constructor( rangeLength = rangeLength, shift = rangePosition, firstDayOfWeek = firstDayOfWeek, - startOfDayShift = startOfDayShift + startOfDayShift = 0, // ignore start of day shift, add later. ) val statsData = mapStatsData( @@ -207,6 +209,7 @@ class StatisticsDetailStreaksInteractor @Inject constructor( startOfDayShift: Long, streaksType: StreaksType, ): IntermediateData { + val calendar = Calendar.getInstance() val durations = getRanges( range = if (range.timeStarted == 0L && range.timeEnded == 0L) { Range( @@ -230,11 +233,10 @@ class StatisticsDetailStreaksInteractor @Inject constructor( timeEnded = day.timeEnded, ) ) - }.sumOf { - it.duration - } + }.sumOf(Range::duration) } + // Format: days, range start, range end. val data: MutableList> = mutableListOf() var longestStreak: Long = 0 var counter: Long = 0 @@ -275,8 +277,10 @@ class StatisticsDetailStreaksInteractor @Inject constructor( rangeCurrentData = data.take(MAX_STREAKS_IN_CHART).map { SeriesView.ViewData( value = it.first, - legendStart = timeMapper.formatDateYear(it.second), - legendEnd = timeMapper.formatDateYear(it.third), + legendStart = calendar.shiftTimeStamp(it.second, -startOfDayShift) + .let(timeMapper::formatDateYear), + legendEnd = calendar.shiftTimeStamp(it.third, -startOfDayShift) + .let(timeMapper::formatDateYear), ) }, calendarData = mapDurationsToCalendarData( @@ -351,7 +355,7 @@ class StatisticsDetailStreaksInteractor @Inject constructor( private fun getDailyGroupings( startDate: Long, numberOfDays: Int, - startOfDayShift: Long, // TODO setting +2 shows 32 streak in a 31 day month. Seems wrong. + startOfDayShift: Long, ): List { val calendar = Calendar.getInstance() @@ -366,8 +370,8 @@ class StatisticsDetailStreaksInteractor @Inject constructor( val rangeEnd = calendar.apply { add(Calendar.DATE, 1) }.timeInMillis Range( - timeStarted = rangeStart + startOfDayShift, - timeEnded = rangeEnd + startOfDayShift + timeStarted = calendar.shiftTimeStamp(rangeStart, startOfDayShift), + timeEnded = calendar.shiftTimeStamp(rangeEnd, startOfDayShift), ) } } @@ -398,7 +402,7 @@ class StatisticsDetailStreaksInteractor @Inject constructor( calendar .apply { timeInMillis = it - timeInMillis -= startOfDayShift + shift(-startOfDayShift) } .get(Calendar.DAY_OF_WEEK) .let(timeMapper::toDayOfWeek) @@ -409,10 +413,11 @@ class StatisticsDetailStreaksInteractor @Inject constructor( return dummyDays + data .map { + val rangeStart = calendar.shiftTimeStamp(it.first, -startOfDayShift) if (it.second > 0) { - SeriesCalendarView.ViewData.Present(it.first) + SeriesCalendarView.ViewData.Present(rangeStart) } else { - SeriesCalendarView.ViewData.NotPresent(it.first) + SeriesCalendarView.ViewData.NotPresent(rangeStart) } } .reversed() 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 1c56155c..dfb8734c 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 @@ -305,7 +305,7 @@ class StatisticsDetailViewModel @Inject constructor( coordinates: Coordinates, ) { PopupParams( - timeMapper.formatDateYear(viewData.rangeStart), + timeMapper.formatDayDateYear(viewData.rangeStart), coordinates, ).let(router::show) } @@ -315,7 +315,7 @@ class StatisticsDetailViewModel @Inject constructor( coordinates: Coordinates, ) { PopupParams( - timeMapper.formatDateYear(viewData.rangeStart), + timeMapper.formatDayDateYear(viewData.rangeStart), coordinates, ).let(router::show) }