Skip to content
Snippets Groups Projects
Unverified Commit 25a07b44 authored by BMItter's avatar BMItter Committed by GitHub
Browse files

Safe toggle state for checkin settings (#2850)

parent a9b1a9b6
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,11 @@ class TraceLocationPreferences @Inject constructor(
defaultValue = false
)
val createJournalEntryCheckedState = prefs.createFlowPreference(
key = "trace_location_create_journal_entry_checked_state",
defaultValue = true
)
fun clear() {
prefs.clearAndNotify()
}
......
package de.rki.coronawarnapp.ui.presencetracing.attendee
import dagger.Reusable
import de.rki.coronawarnapp.ui.presencetracing.TraceLocationPreferences
import javax.inject.Inject
@Reusable
class TraceLocationAttendeeSettings @Inject constructor(private val preferences: TraceLocationPreferences) {
val createJournalEntryCheckedState = preferences.createJournalEntryCheckedState.flow
fun setCreateJournalEntryCheckedState(isChecked: Boolean) =
preferences.createJournalEntryCheckedState.update { isChecked }
}
......@@ -11,6 +11,7 @@ import de.rki.coronawarnapp.presencetracing.checkins.qrcode.VerifiedTraceLocatio
import de.rki.coronawarnapp.presencetracing.checkins.qrcode.getDefaultAutoCheckoutLengthInMinutes
import de.rki.coronawarnapp.ui.durationpicker.toContactDiaryFormat
import de.rki.coronawarnapp.ui.durationpicker.toReadableDuration
import de.rki.coronawarnapp.ui.presencetracing.attendee.TraceLocationAttendeeSettings
import de.rki.coronawarnapp.ui.presencetracing.organizer.category.adapter.category.mapTraceLocationToTitleRes
import de.rki.coronawarnapp.util.TimeStamper
import de.rki.coronawarnapp.util.ui.SingleLiveEvent
......@@ -18,6 +19,7 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first
import org.joda.time.Duration
import org.joda.time.Instant
import org.joda.time.format.DateTimeFormat
......@@ -25,10 +27,11 @@ import org.joda.time.format.DateTimeFormat
class ConfirmCheckInViewModel @AssistedInject constructor(
@Assisted private val verifiedTraceLocation: VerifiedTraceLocation,
private val checkInRepository: CheckInRepository,
private val timeStamper: TimeStamper
private val timeStamper: TimeStamper,
private val traceLocationAttendeeSettings: TraceLocationAttendeeSettings
) : CWAViewModel() {
private val traceLocation = MutableStateFlow(verifiedTraceLocation.traceLocation)
private val createJournalEntry = MutableStateFlow(true)
private val createJournalEntry = traceLocationAttendeeSettings.createJournalEntryCheckedState
private val autoCheckOutLength = MutableStateFlow(
Duration.standardMinutes(
......@@ -64,7 +67,7 @@ class ConfirmCheckInViewModel @AssistedInject constructor(
checkInRepository.addCheckIn(
verifiedTraceLocation.toCheckIn(
checkInStart = now,
createJournalEntry = createJournalEntry.value,
createJournalEntry = createJournalEntry.first(),
checkInEnd = now + autoCheckOutLength.value
)
)
......@@ -73,7 +76,7 @@ class ConfirmCheckInViewModel @AssistedInject constructor(
}
fun createJournalEntryToggled(state: Boolean) {
createJournalEntry.value = state
traceLocationAttendeeSettings.setCreateJournalEntryCheckedState(state)
}
fun dateSelectorClicked() {
......
......@@ -4,6 +4,7 @@ import de.rki.coronawarnapp.presencetracing.checkins.CheckInRepository
import de.rki.coronawarnapp.presencetracing.checkins.qrcode.TraceLocation
import de.rki.coronawarnapp.presencetracing.checkins.qrcode.VerifiedTraceLocation
import de.rki.coronawarnapp.server.protocols.internal.pt.TraceLocationOuterClass
import de.rki.coronawarnapp.ui.presencetracing.attendee.TraceLocationAttendeeSettings
import de.rki.coronawarnapp.ui.presencetracing.attendee.confirm.ConfirmCheckInNavigation
import de.rki.coronawarnapp.ui.presencetracing.attendee.confirm.ConfirmCheckInViewModel
import de.rki.coronawarnapp.util.TimeAndDateExtensions.secondsToInstant
......@@ -13,6 +14,9 @@ import io.mockk.MockKAnnotations
import io.mockk.coEvery
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.just
import io.mockk.runs
import kotlinx.coroutines.flow.flowOf
import okio.ByteString.Companion.decodeBase64
import org.joda.time.Duration
import org.joda.time.Instant
......@@ -29,6 +33,7 @@ class ConfirmCheckInViewModelTest : BaseTest() {
@MockK lateinit var verifiedTraceLocation: VerifiedTraceLocation
@MockK lateinit var checkInRepository: CheckInRepository
@MockK lateinit var timeStamper: TimeStamper
@MockK lateinit var traceLocationAttendeeSettings: TraceLocationAttendeeSettings
private val traceLocation = TraceLocation(
id = 1,
......@@ -50,12 +55,15 @@ class ConfirmCheckInViewModelTest : BaseTest() {
coEvery { checkInRepository.addCheckIn(any()) } returns 1L
every { verifiedTraceLocation.traceLocation } returns traceLocation
every { timeStamper.nowUTC } returns Instant.parse("2021-03-04T10:30:00Z")
every { traceLocationAttendeeSettings.createJournalEntryCheckedState } returns flowOf(true)
every { traceLocationAttendeeSettings.setCreateJournalEntryCheckedState(any()) } just runs
}
private fun createInstance() = ConfirmCheckInViewModel(
verifiedTraceLocation = verifiedTraceLocation,
checkInRepository = checkInRepository,
timeStamper = timeStamper
timeStamper = timeStamper,
traceLocationAttendeeSettings = traceLocationAttendeeSettings
)
@Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment