Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Commit e418b15

Browse files
authored
Event warning in representation does not work (EXPOSUREAPP-14233,EXPOSUREAPP-14230 ) (#5664)
* Fix timezone * User timezone * Log * Fix test menu * Lint * Add log * Correct Time
1 parent c5eb675 commit e418b15

File tree

6 files changed

+39
-27
lines changed

6 files changed

+39
-27
lines changed

Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/presencetracing/ui/PresenceTracingTestViewModel.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ class PresenceTracingTestViewModel @AssistedInject constructor(
8080

8181
val warningPackages = traceWarningRepository.allMetaData.first()
8282
val overlaps = presenceTracingRiskRepository.allCheckInWarningOverlaps.first()
83-
val lastResult = presenceTracingRiskRepository.allRiskLevelResults.first().singleOrNull()
83+
val lastResult = presenceTracingRiskRepository.allRiskLevelResults.first().firstOrNull { it.wasSuccessfullyCalculated }
8484

8585
val infoText = when {
86-
!lastResult!!.wasSuccessfullyCalculated -> "Last calculation failed"
86+
lastResult?.wasSuccessfullyCalculated != true -> "Last calculation failed"
8787
overlaps.isEmpty() -> "No matches found (${warningPackages.size} warning packages)."
8888
overlaps.size > 100 -> "Output too large. ${overlaps.size} lines"
8989
overlaps.isNotEmpty() -> overlaps.fold(StringBuilder()) { stringBuilder, checkInOverlap ->

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/presencetracing/risk/calculation/CheckInWarningMatcher.kt

+13-3
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class CheckInWarningMatcher @Inject constructor(
127127
checkInProtectedReport: List<CheckInOuterClass.CheckInProtectedReport>,
128128
checkIns: List<CheckIn>
129129
): List<TraceWarning.TraceTimeIntervalWarning> {
130-
val hashCheckInMap = checkIns.map { it.traceLocationIdHash to it }.toMap()
130+
val hashCheckInMap = checkIns.associateBy { it.traceLocationIdHash }
131131
return checkInProtectedReport
132132
.filter {
133133
hashCheckInMap.containsKey(it.locationIdHash.toOkioByteString())
@@ -164,7 +164,15 @@ internal fun CheckIn.calculateOverlap(
164164
warning: TraceWarning.TraceTimeIntervalWarning,
165165
traceWarningPackageId: String
166166
): CheckInWarningOverlap? {
167-
if (warning.locationIdHash.toOkioByteString() != traceLocationIdHash) return null
167+
val warningLocationId = warning.locationIdHash.toOkioByteString()
168+
if (warningLocationId != traceLocationIdHash) return run {
169+
Timber.tag(TAG).d(
170+
"warningLocationId=%s does NOT match traceLocationId=%s", warningLocationId, traceLocationIdHash
171+
)
172+
null
173+
}
174+
175+
Timber.tag(TAG).d("warningLocationId matches traceLocationIdHash both are =%s", traceLocationIdHash)
168176

169177
val warningStartMillis = warning.startIntervalNumber.tenMinIntervalToMillis()
170178
val warningEndMillis = (warning.startIntervalNumber + warning.period).tenMinIntervalToMillis()
@@ -189,7 +197,9 @@ internal fun CheckIn.calculateOverlap(
189197
traceWarningPackageId = traceWarningPackageId,
190198
startTime = Instant.ofEpochMilli(overlapStartMillis),
191199
endTime = Instant.ofEpochMilli(overlapEndMillis)
192-
)
200+
).also {
201+
Timber.tag(TAG).d("CheckInWarningOverlap=%s", it)
202+
}
193203
}
194204

195205
// converts number of 10min intervals into milliseconds

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/edit/EditCheckInFragment.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted
2121
import java.time.Instant
2222
import java.time.LocalDate
2323
import java.time.LocalTime
24-
import java.time.ZoneOffset
24+
import java.time.ZoneId
2525
import javax.inject.Inject
2626
import kotlin.math.abs
2727

@@ -149,11 +149,11 @@ class EditCheckInFragment : Fragment(R.layout.fragment_edit_check_in), AutoInjec
149149
MaterialDatePicker
150150
.Builder
151151
.datePicker()
152-
.setSelection(defaultValue?.atStartOfDay(ZoneOffset.UTC)?.toInstant()?.toEpochMilli())
152+
.setSelection(defaultValue?.atStartOfDay(ZoneId.systemDefault())?.toInstant()?.toEpochMilli())
153153
.build()
154154
.apply {
155155
addOnPositiveButtonClickListener {
156-
callback(Instant.ofEpochMilli(it).atZone(ZoneOffset.UTC).toLocalDate())
156+
callback(Instant.ofEpochMilli(it).atZone(ZoneId.systemDefault()).toLocalDate())
157157
}
158158
}
159159
.show(childFragmentManager, DATE_PICKER_TAG)

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/edit/EditCheckInViewModel.kt

+18-15
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import dagger.assisted.AssistedInject
88
import de.rki.coronawarnapp.presencetracing.checkins.CheckIn
99
import de.rki.coronawarnapp.presencetracing.checkins.CheckInRepository
1010
import de.rki.coronawarnapp.ui.presencetracing.organizer.category.adapter.category.mapTraceLocationToTitleRes
11-
import de.rki.coronawarnapp.util.toLocalDateTimeUtc
1211
import de.rki.coronawarnapp.util.toLocalDateTimeUserTz
1312
import de.rki.coronawarnapp.util.ui.SingleLiveEvent
1413
import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
@@ -69,46 +68,50 @@ class EditCheckInViewModel @AssistedInject constructor(
6968
}
7069

7170
fun onStartDateClicked() {
72-
val utcDateTime = checkInStartTime.value?.toLocalDateTimeUtc()
73-
openStartPickerEvent.value = DateTimePickerEvent.DatePickerEvent(utcDateTime?.toLocalDate())
71+
val dateTime = checkInStartTime.value?.toLocalDateTimeUserTz()
72+
openStartPickerEvent.value = DateTimePickerEvent.DatePickerEvent(dateTime?.toLocalDate())
7473
}
7574

7675
fun onStartTimeClicked() {
77-
val utcDateTime = checkInStartTime.value?.toLocalDateTimeUtc()
78-
openStartPickerEvent.value = DateTimePickerEvent.TimePickerEvent(utcDateTime?.toLocalTime())
76+
val dateTime = checkInStartTime.value?.toLocalDateTimeUserTz()
77+
openStartPickerEvent.value = DateTimePickerEvent.TimePickerEvent(dateTime?.toLocalTime())
7978
}
8079

8180
fun onEndDateClicked() {
82-
val utcDateTime = checkInEndTime.value?.toLocalDateTimeUtc()
83-
openEndPickerEvent.value = DateTimePickerEvent.DatePickerEvent(utcDateTime?.toLocalDate())
81+
val dateTime = checkInEndTime.value?.toLocalDateTimeUserTz()
82+
openEndPickerEvent.value = DateTimePickerEvent.DatePickerEvent(dateTime?.toLocalDate())
8483
}
8584

8685
fun onEndTimeClicked() {
87-
val utcDateTime = checkInEndTime.value?.toLocalDateTimeUtc()
88-
openEndPickerEvent.value = DateTimePickerEvent.TimePickerEvent(utcDateTime?.toLocalTime())
86+
val dateTime = checkInEndTime.value?.toLocalDateTimeUserTz()
87+
openEndPickerEvent.value = DateTimePickerEvent.TimePickerEvent(dateTime?.toLocalTime())
8988
}
9089

9190
fun onStartTimeChanged(event: DateTimePickerEvent) {
92-
val startDateTime = checkInStartTime.value?.toLocalDateTimeUtc()
91+
val startDateTime = checkInStartTime.value?.toLocalDateTimeUserTz()
9392

9493
when (event) {
9594
is DateTimePickerEvent.TimePickerEvent ->
9695
checkInStartTime.value =
97-
startDateTime?.toLocalDate()?.atTime(event.localTime)?.toInstant(ZoneOffset.UTC)
96+
startDateTime?.toLocalDate()?.atTime(event.localTime)?.atZone(ZoneOffset.systemDefault())
97+
?.toInstant()
9898
is DateTimePickerEvent.DatePickerEvent ->
9999
checkInStartTime.value =
100-
startDateTime?.toLocalTime()?.atDate(event.localDate)?.toInstant(ZoneOffset.UTC)
100+
startDateTime?.toLocalTime()?.atDate(event.localDate)?.atZone(ZoneOffset.systemDefault())
101+
?.toInstant()
101102
}
102103
}
103104

104105
fun onEndTimeChanged(event: DateTimePickerEvent) {
105-
val endDateTime = checkInEndTime.value?.toLocalDateTimeUtc()
106+
val endDateTime = checkInEndTime.value?.toLocalDateTimeUserTz()
106107

107108
when (event) {
108109
is DateTimePickerEvent.TimePickerEvent ->
109-
checkInEndTime.value = endDateTime?.toLocalDate()?.atTime(event.localTime)?.toInstant(ZoneOffset.UTC)
110+
checkInEndTime.value =
111+
endDateTime?.toLocalDate()?.atTime(event.localTime)?.atZone(ZoneOffset.systemDefault())?.toInstant()
110112
is DateTimePickerEvent.DatePickerEvent ->
111-
checkInEndTime.value = endDateTime?.toLocalTime()?.atDate(event.localDate)?.toInstant(ZoneOffset.UTC)
113+
checkInEndTime.value =
114+
endDateTime?.toLocalTime()?.atDate(event.localDate)?.atZone(ZoneOffset.systemDefault())?.toInstant()
112115
}
113116
}
114117

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/organizer/warn/duration/TraceLocationWarnDurationFragment.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import java.time.Instant
3030
import java.time.LocalDate
3131
import java.time.LocalTime
3232
import java.time.ZoneId
33-
import java.time.ZoneOffset
3433
import java.time.format.DateTimeFormatter
3534
import java.time.format.FormatStyle
3635
import javax.inject.Inject
@@ -143,7 +142,7 @@ class TraceLocationWarnDurationFragment :
143142
MaterialDatePicker
144143
.Builder
145144
.datePicker()
146-
.setSelection(dateTime.toInstant(ZoneOffset.UTC).toEpochMilli())
145+
.setSelection(dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli())
147146
.setCalendarConstraints(constraintsBuilder.build())
148147
.build()
149148
.apply {

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/organizer/warn/duration/TraceLocationWarnDurationViewModel.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
1919
import java.time.Duration
2020
import java.time.Instant
2121
import java.time.LocalDateTime
22-
import java.time.ZoneOffset
22+
import java.time.ZoneId
2323
import java.time.format.DateTimeFormatter
2424
import java.time.format.FormatStyle
2525
import kotlin.math.roundToInt
@@ -110,7 +110,7 @@ class TraceLocationWarnDurationViewModel @AssistedInject constructor(
110110
}
111111

112112
fun getTraceLocationWarnDuration(traceLocation: TraceLocation): TraceLocationWarnDuration {
113-
val startDate = localDateTime.toInstant(ZoneOffset.UTC)
113+
val startDate = localDateTime.atZone(ZoneId.systemDefault()).toInstant()
114114
return TraceLocationWarnDuration(
115115
traceLocation = traceLocation,
116116
startDate = startDate,

0 commit comments

Comments
 (0)