Skip to content
Snippets Groups Projects
Unverified Commit ba1eefb3 authored by Juraj Kusnier's avatar Juraj Kusnier Committed by GitHub
Browse files

Event Creation - Self check-in flow (EXPOSUREAPP-6299) (#2812)


* Update self-check-in flow

* Update unit test

Co-authored-by: default avatarMohamed <mohamed.metwalli@sap.com>
parent ab1851b4
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,8 @@ sealed class CheckInEvent { ...@@ -11,6 +11,8 @@ sealed class CheckInEvent {
data class ConfirmCheckIn(val verifiedTraceLocation: VerifiedTraceLocation) : CheckInEvent() data class ConfirmCheckIn(val verifiedTraceLocation: VerifiedTraceLocation) : CheckInEvent()
data class ConfirmCheckInWithoutHistory(val verifiedTraceLocation: VerifiedTraceLocation) : CheckInEvent()
data class EditCheckIn(val checkInId: Long, val position: Int) : CheckInEvent() data class EditCheckIn(val checkInId: Long, val position: Int) : CheckInEvent()
data class ConfirmSwipeItem(val checkIn: CheckIn, val position: Int) : CheckInEvent() data class ConfirmSwipeItem(val checkIn: CheckIn, val position: Int) : CheckInEvent()
......
...@@ -53,7 +53,8 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag ...@@ -53,7 +53,8 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag
factory as CheckInsViewModel.Factory factory as CheckInsViewModel.Factory
factory.create( factory.create(
savedState = savedState, savedState = savedState,
deepLink = navArgs.uri deepLink = navArgs.uri,
cleanHistory = navArgs.cleanHistory
) )
} }
) )
...@@ -97,6 +98,12 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag ...@@ -97,6 +98,12 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag
) )
} }
is CheckInEvent.ConfirmCheckInWithoutHistory -> doNavigate(
CheckInsFragmentDirections.actionCheckInsFragmentToConfirmCheckInFragmentCleanHistory(
verifiedTraceLocation = event.verifiedTraceLocation
)
)
is CheckInEvent.ConfirmSwipeItem -> showRemovalConfirmation(event.checkIn, event.position) is CheckInEvent.ConfirmSwipeItem -> showRemovalConfirmation(event.checkIn, event.position)
is CheckInEvent.ConfirmRemoveItem -> showRemovalConfirmation(event.checkIn, null) is CheckInEvent.ConfirmRemoveItem -> showRemovalConfirmation(event.checkIn, null)
...@@ -232,14 +239,14 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag ...@@ -232,14 +239,14 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag
} }
companion object { companion object {
fun createCheckInUri(rootUri: String): Uri { fun createCheckInUri(rootUri: String, cleanHistory: Boolean = false): Uri {
val encodedUrl = try { val encodedUrl = try {
URLEncoder.encode(rootUri, Charsets.UTF_8.name()) URLEncoder.encode(rootUri, Charsets.UTF_8.name())
} catch (e: Exception) { } catch (e: Exception) {
Timber.d(e, "URL Encoding failed url($rootUri)") Timber.d(e, "URL Encoding failed url($rootUri)")
rootUri // Pass original rootUri // Pass original
} }
return "coronawarnapp://check-ins/$encodedUrl".toUri() return "coronawarnapp://check-ins/$encodedUrl/?cleanHistory=$cleanHistory".toUri()
} }
} }
} }
...@@ -31,6 +31,7 @@ import timber.log.Timber ...@@ -31,6 +31,7 @@ import timber.log.Timber
class CheckInsViewModel @AssistedInject constructor( class CheckInsViewModel @AssistedInject constructor(
@Assisted private val savedState: SavedStateHandle, @Assisted private val savedState: SavedStateHandle,
@Assisted private val deepLink: String?, @Assisted private val deepLink: String?,
@Assisted private val cleanHistory: Boolean,
dispatcherProvider: DispatcherProvider, dispatcherProvider: DispatcherProvider,
@AppScope private val appScope: CoroutineScope, @AppScope private val appScope: CoroutineScope,
private val qrCodeUriParser: QRCodeUriParser, private val qrCodeUriParser: QRCodeUriParser,
...@@ -143,7 +144,12 @@ class CheckInsViewModel @AssistedInject constructor( ...@@ -143,7 +144,12 @@ class CheckInsViewModel @AssistedInject constructor(
Timber.i("uri: $uri") Timber.i("uri: $uri")
val qrCodePayload = qrCodeUriParser.getQrCodePayload(uri) val qrCodePayload = qrCodeUriParser.getQrCodePayload(uri)
val verifiedTraceLocation = VerifiedTraceLocation(qrCodePayload) val verifiedTraceLocation = VerifiedTraceLocation(qrCodePayload)
events.postValue(CheckInEvent.ConfirmCheckIn(verifiedTraceLocation)) events.postValue(
if (cleanHistory)
CheckInEvent.ConfirmCheckInWithoutHistory(verifiedTraceLocation)
else
CheckInEvent.ConfirmCheckIn(verifiedTraceLocation)
)
} catch (e: Exception) { } catch (e: Exception) {
Timber.d(e, "TraceLocation verification failed") Timber.d(e, "TraceLocation verification failed")
e.report(ExceptionCategory.INTERNAL) e.report(ExceptionCategory.INTERNAL)
...@@ -162,7 +168,8 @@ class CheckInsViewModel @AssistedInject constructor( ...@@ -162,7 +168,8 @@ class CheckInsViewModel @AssistedInject constructor(
interface Factory : CWAViewModelFactory<CheckInsViewModel> { interface Factory : CWAViewModelFactory<CheckInsViewModel> {
fun create( fun create(
savedState: SavedStateHandle, savedState: SavedStateHandle,
deepLink: String? deepLink: String?,
cleanHistory: Boolean
): CheckInsViewModel ): CheckInsViewModel
} }
} }
...@@ -36,7 +36,12 @@ class CheckInOnboardingFragment : Fragment(R.layout.fragment_trace_location_onbo ...@@ -36,7 +36,12 @@ class CheckInOnboardingFragment : Fragment(R.layout.fragment_trace_location_onbo
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
if (viewModel.isOnboardingComplete && args.uri != null) { if (viewModel.isOnboardingComplete && args.uri != null) {
doNavigate(CheckInOnboardingFragmentDirections.actionCheckInOnboardingFragmentToCheckInsFragment(args.uri)) doNavigate(
CheckInOnboardingFragmentDirections.actionCheckInOnboardingFragmentToCheckInsFragment(
args.uri,
args.cleanHistory
)
)
} }
with(binding) { with(binding) {
......
...@@ -116,7 +116,7 @@ class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_ ...@@ -116,7 +116,7 @@ class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_
is TraceLocationEvent.SelfCheckIn -> { is TraceLocationEvent.SelfCheckIn -> {
findNavController().navigate( findNavController().navigate(
CheckInsFragment.createCheckInUri(it.traceLocation.locationUrl), CheckInsFragment.createCheckInUri(it.traceLocation.locationUrl, true),
NavOptions.Builder() NavOptions.Builder()
.setPopUpTo(R.id.checkInsFragment, true) .setPopUpTo(R.id.checkInsFragment, true)
.build() .build()
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
android:name="de.rki.coronawarnapp.ui.eventregistration.attendee.onboarding.CheckInOnboardingFragment" android:name="de.rki.coronawarnapp.ui.eventregistration.attendee.onboarding.CheckInOnboardingFragment"
android:label="CheckInOnboardingFragment" android:label="CheckInOnboardingFragment"
tools:layout="@layout/fragment_trace_location_onboarding"> tools:layout="@layout/fragment_trace_location_onboarding">
<deepLink app:uri="coronawarnapp://check-ins/{uri}" /> <deepLink app:uri="coronawarnapp://check-ins/{uri}/?cleanHistory={cleanHistory}" />
<action <action
android:id="@+id/action_checkInOnboardingFragment_to_checkInsFragment" android:id="@+id/action_checkInOnboardingFragment_to_checkInsFragment"
app:destination="@id/checkInsFragment" app:destination="@id/checkInsFragment"
...@@ -22,6 +22,10 @@ ...@@ -22,6 +22,10 @@
android:name="showBottomNav" android:name="showBottomNav"
android:defaultValue="true" android:defaultValue="true"
app:argType="boolean" /> app:argType="boolean" />
<argument
android:name="cleanHistory"
android:defaultValue="false"
app:argType="boolean" />
<argument <argument
android:name="uri" android:name="uri"
android:defaultValue="@null" android:defaultValue="@null"
...@@ -68,11 +72,20 @@ ...@@ -68,11 +72,20 @@
<action <action
android:id="@+id/action_checkInsFragment_to_confirmCheckInFragment" android:id="@+id/action_checkInsFragment_to_confirmCheckInFragment"
app:destination="@id/confirmCheckInFragment" /> app:destination="@id/confirmCheckInFragment" />
<action
android:id="@+id/action_checkInsFragment_to_confirmCheckInFragment_cleanHistory"
app:popUpTo="@id/checkInsFragment"
app:popUpToInclusive="true"
app:destination="@id/confirmCheckInFragment" />
<argument <argument
android:name="uri" android:name="uri"
android:defaultValue="@null" android:defaultValue="@null"
app:argType="string" app:argType="string"
app:nullable="true" /> app:nullable="true" />
<argument
android:name="cleanHistory"
android:defaultValue="false"
app:argType="boolean" />
<action <action
android:id="@+id/action_checkInsFragment_to_editCheckInFragment" android:id="@+id/action_checkInsFragment_to_editCheckInFragment"
app:destination="@id/editCheckInFragment" /> app:destination="@id/editCheckInFragment" />
......
...@@ -185,7 +185,8 @@ class CheckInsViewModelTest : BaseTest() { ...@@ -185,7 +185,8 @@ class CheckInsViewModelTest : BaseTest() {
qrCodeUriParser = qrCodeUriParser, qrCodeUriParser = qrCodeUriParser,
checkInsRepository = checkInsRepository, checkInsRepository = checkInsRepository,
checkOutHandler = checkOutHandler, checkOutHandler = checkOutHandler,
cameraPermissionProvider = cameraPermissionProvider cameraPermissionProvider = cameraPermissionProvider,
cleanHistory = false
) )
companion object { companion object {
......
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