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

Event duplication (EXPOSUREAPP-5985) (#2714)


* TraceLocation duplication

* Implement event duplication to list fragment

* Update nav_graph

Co-authored-by: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
Co-authored-by: default avatarKolya Opahle <k.opahle@sap.com>
parent 60488d70
No related branches found
No related tags found
No related merge requests found
...@@ -178,25 +178,27 @@ ...@@ -178,25 +178,27 @@
android:id="@+id/traceLocationOrganizerCategoriesFragment" android:id="@+id/traceLocationOrganizerCategoriesFragment"
android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.category.TraceLocationCategoryFragment" android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.category.TraceLocationCategoryFragment"
android:label="TraceLocationCategoryFragment" android:label="TraceLocationCategoryFragment"
tools:layout="@layout/trace_location_organizer_category_fragment" /> tools:layout="@layout/trace_location_organizer_category_fragment">
<fragment
android:id="@+id/qrCodeDetailFragment"
android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.details.QrCodeDetailFragment"
android:label="QrCodeDetailFragment"
tools:layout="@layout/trace_location_organizer_qr_code_detail_fragment" >
<action <action
android:id="@+id/action_traceLocationOrganizerCategoriesFragment_to_traceLocationCreateFragment" android:id="@+id/action_traceLocationOrganizerCategoriesFragment_to_traceLocationCreateFragment"
app:destination="@id/traceLocationCreateFragment" /> app:destination="@id/traceLocationCreateFragment" />
</fragment> </fragment>
<fragment
android:id="@+id/qrCodeDetailFragment"
android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.details.QrCodeDetailFragment"
android:label="QrCodeDetailFragment"
tools:layout="@layout/trace_location_organizer_qr_code_detail_fragment" />
<fragment <fragment
android:id="@+id/traceLocationOrganizerListFragment" android:id="@+id/traceLocationOrganizerListFragment"
android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.list.TraceLocationsFragment" android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.list.TraceLocationsFragment"
android:label="TraceLocationCategoryFragment" android:label="TraceLocationCategoryFragment"
tools:layout="@layout/trace_location_organizer_trace_locations_list_fragment"> tools:layout="@layout/trace_location_organizer_trace_locations_list_fragment">
<action <action
android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationOrganizerCategoriesFragment" android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationOrganizerCategoriesFragment"
app:destination="@id/traceLocationOrganizerCategoriesFragment" /> app:destination="@id/traceLocationOrganizerCategoriesFragment" />
<action
android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationCreateFragment"
app:destination="@id/traceLocationCreateFragment" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/traceLocationCreateFragment" android:id="@+id/traceLocationCreateFragment"
...@@ -206,6 +208,14 @@ ...@@ -206,6 +208,14 @@
<argument <argument
android:name="category" android:name="category"
app:argType="de.rki.coronawarnapp.ui.eventregistration.organizer.category.adapter.category.TraceLocationCategory" /> app:argType="de.rki.coronawarnapp.ui.eventregistration.organizer.category.adapter.category.TraceLocationCategory" />
<argument
android:name="originalItem"
android:defaultValue="@null"
app:argType="de.rki.coronawarnapp.eventregistration.checkins.qrcode.TraceLocation"
app:nullable="true" />
<action
android:id="@+id/action_traceLocationCreateFragment_to_traceLocationOrganizerListFragment"
app:destination="@id/traceLocationOrganizerListFragment" />
</fragment> </fragment>
</navigation> </navigation>
...@@ -3,7 +3,6 @@ package de.rki.coronawarnapp.ui.eventregistration.organizer.create ...@@ -3,7 +3,6 @@ package de.rki.coronawarnapp.ui.eventregistration.organizer.create
import android.os.Bundle import android.os.Bundle
import android.text.format.DateFormat.is24HourFormat import android.text.format.DateFormat.is24HourFormat
import android.view.View import android.view.View
import android.widget.Toast
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.widget.doOnTextChanged import androidx.core.widget.doOnTextChanged
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
...@@ -25,6 +24,7 @@ import de.rki.coronawarnapp.ui.durationpicker.DurationPicker ...@@ -25,6 +24,7 @@ import de.rki.coronawarnapp.ui.durationpicker.DurationPicker
import de.rki.coronawarnapp.ui.durationpicker.toContactDiaryFormat import de.rki.coronawarnapp.ui.durationpicker.toContactDiaryFormat
import de.rki.coronawarnapp.util.DialogHelper import de.rki.coronawarnapp.util.DialogHelper
import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.ui.doNavigate
import de.rki.coronawarnapp.util.ui.popBackStack import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.ui.viewBindingLazy
import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
...@@ -66,8 +66,10 @@ class TraceLocationCreateFragment : Fragment(R.layout.trace_location_create_frag ...@@ -66,8 +66,10 @@ class TraceLocationCreateFragment : Fragment(R.layout.trace_location_create_frag
DialogHelper.showDialog(getErrorDialogInstance(result.exception)) DialogHelper.showDialog(getErrorDialogInstance(result.exception))
} }
is TraceLocationCreateViewModel.Result.Success -> { is TraceLocationCreateViewModel.Result.Success -> {
// TODO: will be handled in another PR doNavigate(
Toast.makeText(context, "Done! TODO: redirect to another screen", Toast.LENGTH_SHORT).show() TraceLocationCreateFragmentDirections
.actionTraceLocationCreateFragmentToTraceLocationOrganizerListFragment()
)
} }
} }
} }
...@@ -116,6 +118,20 @@ class TraceLocationCreateFragment : Fragment(R.layout.trace_location_create_frag ...@@ -116,6 +118,20 @@ class TraceLocationCreateFragment : Fragment(R.layout.trace_location_create_frag
it.hideKeyboard() it.hideKeyboard()
viewModel.send() viewModel.send()
} }
if (savedInstanceState == null) {
navArgs.originalItem?.let {
binding.apply {
descriptionInputEdit.setText(it.description)
placeInputEdit.setText(it.address)
}
viewModel.apply {
begin = LocalDateTime(it.startDate)
end = LocalDateTime(it.endDate)
checkInLength = Duration.standardMinutes(it.defaultCheckInLengthInMinutes?.toLong() ?: 0L)
}
}
}
} }
private fun getErrorDialogInstance(exception: Exception): DialogHelper.DialogInstance { private fun getErrorDialogInstance(exception: Exception): DialogHelper.DialogInstance {
......
...@@ -4,6 +4,8 @@ import de.rki.coronawarnapp.eventregistration.checkins.qrcode.TraceLocation ...@@ -4,6 +4,8 @@ import de.rki.coronawarnapp.eventregistration.checkins.qrcode.TraceLocation
sealed class TraceLocationEvent { sealed class TraceLocationEvent {
data class DuplicateItem(val traceLocation: TraceLocation) : TraceLocationEvent()
data class ConfirmDeleteItem(val traceLocation: TraceLocation) : TraceLocationEvent() data class ConfirmDeleteItem(val traceLocation: TraceLocation) : TraceLocationEvent()
data class ConfirmSwipeItem(val traceLocation: TraceLocation, val position: Int) : TraceLocationEvent() data class ConfirmSwipeItem(val traceLocation: TraceLocation, val position: Int) : TraceLocationEvent()
......
...@@ -14,6 +14,7 @@ import com.google.android.material.transition.Hold ...@@ -14,6 +14,7 @@ import com.google.android.material.transition.Hold
import de.rki.coronawarnapp.R import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.TraceLocationOrganizerTraceLocationsListFragmentBinding import de.rki.coronawarnapp.databinding.TraceLocationOrganizerTraceLocationsListFragmentBinding
import de.rki.coronawarnapp.eventregistration.checkins.qrcode.TraceLocation import de.rki.coronawarnapp.eventregistration.checkins.qrcode.TraceLocation
import de.rki.coronawarnapp.ui.eventregistration.organizer.category.adapter.category.traceLocationCategories
import de.rki.coronawarnapp.util.DialogHelper import de.rki.coronawarnapp.util.DialogHelper
import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.list.isSwipeable import de.rki.coronawarnapp.util.list.isSwipeable
...@@ -26,6 +27,7 @@ import de.rki.coronawarnapp.util.ui.popBackStack ...@@ -26,6 +27,7 @@ import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.ui.viewBindingLazy
import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
import de.rki.coronawarnapp.util.viewmodel.cwaViewModels import de.rki.coronawarnapp.util.viewmodel.cwaViewModels
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_locations_list_fragment), AutoInject { class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_locations_list_fragment), AutoInject {
...@@ -78,6 +80,9 @@ class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_ ...@@ -78,6 +80,9 @@ class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_
is TraceLocationEvent.ConfirmSwipeItem -> { is TraceLocationEvent.ConfirmSwipeItem -> {
showDeleteSingleDialog(it.traceLocation, it.position) showDeleteSingleDialog(it.traceLocation, it.position)
} }
is TraceLocationEvent.DuplicateItem -> {
openCreateEventFragment(it.traceLocation)
}
} }
} }
...@@ -129,6 +134,21 @@ class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_ ...@@ -129,6 +134,21 @@ class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_
DialogHelper.showDialog(deleteAllDialog) DialogHelper.showDialog(deleteAllDialog)
} }
private fun openCreateEventFragment(traceLocation: TraceLocation) {
val category = traceLocationCategories.find { it.type == traceLocation.type }
if (category == null) {
Timber.e("Category not found, traceLocation = $traceLocation")
} else {
findNavController().navigate(
TraceLocationsFragmentDirections
.actionTraceLocationOrganizerListFragmentToTraceLocationCreateFragment(
category,
traceLocation
)
)
}
}
private fun showDeleteSingleDialog(traceLocation: TraceLocation, position: Int?) { private fun showDeleteSingleDialog(traceLocation: TraceLocation, position: Int?) {
AlertDialog.Builder(requireContext()).apply { AlertDialog.Builder(requireContext()).apply {
setTitle(R.string.trace_location_organiser_list_delete_single_popup_title) setTitle(R.string.trace_location_organiser_list_delete_single_popup_title)
......
...@@ -34,7 +34,7 @@ class TraceLocationsViewModel @AssistedInject constructor( ...@@ -34,7 +34,7 @@ class TraceLocationsViewModel @AssistedInject constructor(
TraceLocationVH.Item( TraceLocationVH.Item(
traceLocation = traceLocation, traceLocation = traceLocation,
onCheckIn = { /* TODO */ }, onCheckIn = { /* TODO */ },
onDuplicate = { /* TODO */ }, onDuplicate = { events.postValue(TraceLocationEvent.DuplicateItem(it)) },
onShowPrint = { /* TODO */ }, onShowPrint = { /* TODO */ },
onClearItem = { events.postValue(TraceLocationEvent.ConfirmDeleteItem(it)) }, onClearItem = { events.postValue(TraceLocationEvent.ConfirmDeleteItem(it)) },
onSwipeItem = { traceLocation, position -> onSwipeItem = { traceLocation, position ->
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.category.TraceLocationCategoryFragment" android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.category.TraceLocationCategoryFragment"
android:label="TraceLocationCategoryFragment" android:label="TraceLocationCategoryFragment"
tools:layout="@layout/trace_location_organizer_category_fragment"> tools:layout="@layout/trace_location_organizer_category_fragment">
<action <action
android:id="@+id/action_traceLocationOrganizerCategoriesFragment_to_traceLocationCreateFragment" android:id="@+id/action_traceLocationOrganizerCategoriesFragment_to_traceLocationCreateFragment"
app:destination="@id/traceLocationCreateFragment" /> app:destination="@id/traceLocationCreateFragment" />
...@@ -37,6 +36,11 @@ ...@@ -37,6 +36,11 @@
<argument <argument
android:name="category" android:name="category"
app:argType="de.rki.coronawarnapp.ui.eventregistration.organizer.category.adapter.category.TraceLocationCategory" /> app:argType="de.rki.coronawarnapp.ui.eventregistration.organizer.category.adapter.category.TraceLocationCategory" />
<argument
android:name="originalItem"
android:defaultValue="@null"
app:argType="de.rki.coronawarnapp.eventregistration.checkins.qrcode.TraceLocation"
app:nullable="true" />
<action <action
android:id="@+id/action_traceLocationCreateFragment_to_traceLocationOrganizerListFragment" android:id="@+id/action_traceLocationCreateFragment_to_traceLocationOrganizerListFragment"
app:destination="@id/traceLocationOrganizerListFragment" /> app:destination="@id/traceLocationOrganizerListFragment" />
...@@ -46,10 +50,12 @@ ...@@ -46,10 +50,12 @@
android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.list.TraceLocationsFragment" android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.list.TraceLocationsFragment"
android:label="TraceLocationCategoryFragment" android:label="TraceLocationCategoryFragment"
tools:layout="@layout/trace_location_organizer_trace_locations_list_fragment"> tools:layout="@layout/trace_location_organizer_trace_locations_list_fragment">
<action <action
android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationOrganizerCategoriesFragment" android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationOrganizerCategoriesFragment"
app:destination="@id/traceLocationOrganizerCategoriesFragment" /> app:destination="@id/traceLocationOrganizerCategoriesFragment" />
<action
android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationCreateFragment"
app:destination="@id/traceLocationCreateFragment" />
</fragment> </fragment>
</navigation> </navigation>
\ No newline at end of file
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