Skip to content

Commit ac3d087

Browse files
committed
fix date selection opening on wrong day when current time is shifted to another day
1 parent 06e39a7 commit ac3d087

6 files changed

Lines changed: 34 additions & 14 deletions

File tree

core/common/src/main/java/com/example/util/simpletimetracker/core/extension/CalendarExtensions.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,13 @@ fun Calendar.shift(shift: Long): Calendar {
5454
}
5555

5656
fun Calendar.shiftTimeStamp(timestamp: Long, shift: Long): Long {
57+
if (shift == 0L) return timestamp
5758
timeInMillis = timestamp
5859
shift(shift)
5960
return timeInMillis
61+
}
62+
63+
fun Long.shiftTimeStamp(shift: Long): Long {
64+
if (shift == 0L) return this
65+
return Calendar.getInstance().shiftTimeStamp(timestamp = this, shift = shift)
6066
}

core/common/src/main/java/com/example/util/simpletimetracker/core/mapper/TimeMapper.kt

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,11 @@ class TimeMapper @Inject constructor(
129129
return shortYearFormat.format(time)
130130
}
131131

132-
fun toTimestampShifted(rangesFromToday: Int, range: RangeLength): Long {
132+
fun toTimestampShifted(
133+
rangesFromToday: Int,
134+
range: RangeLength,
135+
startOfDayShift: Long = 0,
136+
): Long {
133137
val calendarStep = when (range) {
134138
is RangeLength.Day -> Calendar.DAY_OF_YEAR
135139
is RangeLength.Week -> Calendar.WEEK_OF_YEAR
@@ -140,16 +144,13 @@ class TimeMapper @Inject constructor(
140144
is RangeLength.Last -> return 0
141145
}
142146

143-
return if (rangesFromToday != 0) {
144-
Calendar.getInstance()
145-
.apply {
146-
timeInMillis = System.currentTimeMillis()
147-
add(calendarStep, rangesFromToday)
148-
}
149-
.timeInMillis
150-
} else {
151-
return System.currentTimeMillis()
152-
}
147+
return Calendar.getInstance()
148+
.apply {
149+
timeInMillis = System.currentTimeMillis()
150+
shift(-startOfDayShift)
151+
add(calendarStep, rangesFromToday)
152+
}
153+
.timeInMillis
153154
}
154155

155156
fun toTimestampShift(

features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/viewModel/RecordsContainerViewModel.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.example.util.simpletimetracker.core.delegates.dateSelector.mapper.Dat
77
import com.example.util.simpletimetracker.core.delegates.dateSelector.viewModelDelegate.DateSelectorViewModelDelegate
88
import com.example.util.simpletimetracker.core.extension.lazySuspend
99
import com.example.util.simpletimetracker.core.extension.set
10+
import com.example.util.simpletimetracker.core.extension.shiftTimeStamp
1011
import com.example.util.simpletimetracker.core.mapper.CalendarToListShiftMapper
1112
import com.example.util.simpletimetracker.core.mapper.TimeMapper
1213
import com.example.util.simpletimetracker.core.repo.ResourceRepo
@@ -82,11 +83,12 @@ class RecordsContainerViewModel @Inject constructor(
8283
}
8384

8485
fun onDateTimeSet(timestamp: Long, tag: String?) = viewModelScope.launch {
86+
val startOfDayShift = prefsInteractor.getStartOfDayShift()
8587
when (tag) {
8688
DATE_TAG -> {
8789
timeMapper
8890
.toTimestampShift(
89-
toTime = timestamp,
91+
toTime = timestamp.shiftTimeStamp(startOfDayShift),
9092
range = RangeLength.Day,
9193
firstDayOfWeek = prefsInteractor.getFirstDayOfWeek(),
9294
)
@@ -123,9 +125,11 @@ class RecordsContainerViewModel @Inject constructor(
123125
viewModelScope.launch {
124126
val useMilitaryTime = prefsInteractor.getUseMilitaryTimeFormat()
125127
val firstDayOfWeek = prefsInteractor.getFirstDayOfWeek()
128+
val startOfDayShift = prefsInteractor.getStartOfDayShift()
126129
val current = timeMapper.toTimestampShifted(
127130
rangesFromToday = getActualShift(),
128131
range = RangeLength.Day,
132+
startOfDayShift = startOfDayShift,
129133
)
130134

131135
router.navigate(

features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/viewModel/StatisticsContainerViewModel.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope
77
import com.example.util.simpletimetracker.core.delegates.dateSelector.mapper.DateSelectorMapper
88
import com.example.util.simpletimetracker.core.delegates.dateSelector.viewModelDelegate.DateSelectorViewModelDelegate
99
import com.example.util.simpletimetracker.core.extension.set
10+
import com.example.util.simpletimetracker.core.extension.shiftTimeStamp
1011
import com.example.util.simpletimetracker.core.extension.toModel
1112
import com.example.util.simpletimetracker.core.mapper.RangeViewDataMapper
1213
import com.example.util.simpletimetracker.core.mapper.TimeMapper
@@ -95,10 +96,11 @@ class StatisticsContainerViewModel @Inject constructor(
9596
}
9697

9798
fun onDateTimeSet(timestamp: Long, tag: String?) = viewModelScope.launch {
99+
val startOfDayShift = prefsInteractor.getStartOfDayShift()
98100
when (tag) {
99101
DATE_TAG -> {
100102
timeMapper.toTimestampShift(
101-
toTime = timestamp,
103+
toTime = timestamp.shiftTimeStamp(startOfDayShift),
102104
range = prefsInteractor.getStatisticsRange(),
103105
firstDayOfWeek = prefsInteractor.getFirstDayOfWeek(),
104106
).toInt().let(::updatePosition)
@@ -167,9 +169,11 @@ class StatisticsContainerViewModel @Inject constructor(
167169
private fun onSelectDateClick() = viewModelScope.launch {
168170
val useMilitaryTime = prefsInteractor.getUseMilitaryTimeFormat()
169171
val firstDayOfWeek = prefsInteractor.getFirstDayOfWeek()
172+
val startOfDayShift = prefsInteractor.getStartOfDayShift()
170173
val current = timeMapper.toTimestampShifted(
171174
rangesFromToday = currentPosition,
172175
range = prefsInteractor.getStatisticsRange(),
176+
startOfDayShift = startOfDayShift,
173177
)
174178

175179
router.navigate(

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewModel/delegate/StatisticsDetailRangeViewModelDelegate.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate
22

33
import com.example.util.simpletimetracker.core.base.ViewModelDelegate
4+
import com.example.util.simpletimetracker.core.extension.shiftTimeStamp
45
import com.example.util.simpletimetracker.core.extension.toModel
56
import com.example.util.simpletimetracker.core.interactor.RecordFilterInteractor
67
import com.example.util.simpletimetracker.core.mapper.RangeViewDataMapper
@@ -64,10 +65,11 @@ class StatisticsDetailRangeViewModelDelegate @Inject constructor(
6465
}
6566

6667
fun onDateTimeSet(timestamp: Long, tag: String?) = delegateScope.launch {
68+
val startOfDayShift = prefsInteractor.getStartOfDayShift()
6769
when (tag) {
6870
DATE_TAG -> {
6971
timeMapper.toTimestampShift(
70-
toTime = timestamp,
72+
toTime = timestamp.shiftTimeStamp(startOfDayShift),
7173
range = rangeLength,
7274
firstDayOfWeek = prefsInteractor.getFirstDayOfWeek(),
7375
).toInt().let(::updatePosition)
@@ -89,9 +91,11 @@ class StatisticsDetailRangeViewModelDelegate @Inject constructor(
8991
fun onSelectDateClick() = delegateScope.launch {
9092
val useMilitaryTime = prefsInteractor.getUseMilitaryTimeFormat()
9193
val firstDayOfWeek = prefsInteractor.getFirstDayOfWeek()
94+
val startOfDayShift = prefsInteractor.getStartOfDayShift()
9295
val current = timeMapper.toTimestampShifted(
9396
rangesFromToday = rangePosition,
9497
range = rangeLength,
98+
startOfDayShift = startOfDayShift,
9599
)
96100

97101
router.navigate(

wear/src/main/java/com/example/util/simpletimetracker/features/statistics/viewModel/StatisticsViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class StatisticsViewModel @Inject constructor(
6868
val timestamp = timeMapper.toTimestampShifted(
6969
rangesFromToday = shift,
7070
range = rangeLength,
71+
// TODO start of day shift?
7172
)
7273
_effects.emit(Effect.OnOpenDatePicker(timestamp))
7374
}

0 commit comments

Comments
 (0)