diff --git a/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml b/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml index 1f46f457ac40f3e6c1c371eb7157f44bc35361de..fac7f7f8242d0e502abf0d456b72c76217a59324 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml @@ -178,25 +178,27 @@ android:id="@+id/traceLocationOrganizerCategoriesFragment" android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.category.TraceLocationCategoryFragment" android:label="TraceLocationCategoryFragment" - 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" > + tools:layout="@layout/trace_location_organizer_category_fragment"> <action android:id="@+id/action_traceLocationOrganizerCategoriesFragment_to_traceLocationCreateFragment" app:destination="@id/traceLocationCreateFragment" /> </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 android:id="@+id/traceLocationOrganizerListFragment" android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.list.TraceLocationsFragment" android:label="TraceLocationCategoryFragment" tools:layout="@layout/trace_location_organizer_trace_locations_list_fragment"> - <action android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationOrganizerCategoriesFragment" app:destination="@id/traceLocationOrganizerCategoriesFragment" /> + <action + android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationCreateFragment" + app:destination="@id/traceLocationCreateFragment" /> </fragment> <fragment android:id="@+id/traceLocationCreateFragment" @@ -206,6 +208,14 @@ <argument android:name="category" 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> </navigation> diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/create/TraceLocationCreateFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/create/TraceLocationCreateFragment.kt index 02e785df44918f9a7e7a7365f66d6a9f30ccf986..6d02e318fd694641c45ffa0d15656cec1b9c68d3 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/create/TraceLocationCreateFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/create/TraceLocationCreateFragment.kt @@ -3,7 +3,6 @@ package de.rki.coronawarnapp.ui.eventregistration.organizer.create import android.os.Bundle import android.text.format.DateFormat.is24HourFormat import android.view.View -import android.widget.Toast import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged import androidx.fragment.app.Fragment @@ -25,6 +24,7 @@ import de.rki.coronawarnapp.ui.durationpicker.DurationPicker import de.rki.coronawarnapp.ui.durationpicker.toContactDiaryFormat import de.rki.coronawarnapp.util.DialogHelper 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.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider @@ -66,8 +66,10 @@ class TraceLocationCreateFragment : Fragment(R.layout.trace_location_create_frag DialogHelper.showDialog(getErrorDialogInstance(result.exception)) } is TraceLocationCreateViewModel.Result.Success -> { - // TODO: will be handled in another PR - Toast.makeText(context, "Done! TODO: redirect to another screen", Toast.LENGTH_SHORT).show() + doNavigate( + TraceLocationCreateFragmentDirections + .actionTraceLocationCreateFragmentToTraceLocationOrganizerListFragment() + ) } } } @@ -116,6 +118,20 @@ class TraceLocationCreateFragment : Fragment(R.layout.trace_location_create_frag it.hideKeyboard() 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 { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationEvent.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationEvent.kt index f40e8d04bfe43b9d18b7cdafc1bc3a14a78b7c07..38db76c07f292d3230e1567e27cf6afefd9fe6e9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationEvent.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationEvent.kt @@ -4,6 +4,8 @@ import de.rki.coronawarnapp.eventregistration.checkins.qrcode.TraceLocation sealed class TraceLocationEvent { + data class DuplicateItem(val traceLocation: TraceLocation) : TraceLocationEvent() + data class ConfirmDeleteItem(val traceLocation: TraceLocation) : TraceLocationEvent() data class ConfirmSwipeItem(val traceLocation: TraceLocation, val position: Int) : TraceLocationEvent() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationsFragment.kt index d72e35e213fd77da8ccdac0eb422ccb1e341e17e..14f6f3e68ed74f031a383abc20810a2f72a63b9b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationsFragment.kt @@ -14,6 +14,7 @@ import com.google.android.material.transition.Hold import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.TraceLocationOrganizerTraceLocationsListFragmentBinding 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.di.AutoInject import de.rki.coronawarnapp.util.list.isSwipeable @@ -26,6 +27,7 @@ import de.rki.coronawarnapp.util.ui.popBackStack import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import timber.log.Timber import javax.inject.Inject 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_ is TraceLocationEvent.ConfirmSwipeItem -> { showDeleteSingleDialog(it.traceLocation, it.position) } + is TraceLocationEvent.DuplicateItem -> { + openCreateEventFragment(it.traceLocation) + } } } @@ -129,6 +134,21 @@ class TraceLocationsFragment : Fragment(R.layout.trace_location_organizer_trace_ 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?) { AlertDialog.Builder(requireContext()).apply { setTitle(R.string.trace_location_organiser_list_delete_single_popup_title) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationsViewModel.kt index d30d8ea3dde9284c8b101be8fd56af4777ce18c2..639de4e4a4c27b81f3e6d349111c9033092818c2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationsViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/organizer/list/TraceLocationsViewModel.kt @@ -34,7 +34,7 @@ class TraceLocationsViewModel @AssistedInject constructor( TraceLocationVH.Item( traceLocation = traceLocation, onCheckIn = { /* TODO */ }, - onDuplicate = { /* TODO */ }, + onDuplicate = { events.postValue(TraceLocationEvent.DuplicateItem(it)) }, onShowPrint = { /* TODO */ }, onClearItem = { events.postValue(TraceLocationEvent.ConfirmDeleteItem(it)) }, onSwipeItem = { traceLocation, position -> diff --git a/Corona-Warn-App/src/main/res/navigation/trace_location_organizer_nav_graph.xml b/Corona-Warn-App/src/main/res/navigation/trace_location_organizer_nav_graph.xml index 469c3064b0886b3307b453e01a1378b3cdb37c6b..69035f13a5aa1c1326c30c8b1a6dbb18b781038b 100644 --- a/Corona-Warn-App/src/main/res/navigation/trace_location_organizer_nav_graph.xml +++ b/Corona-Warn-App/src/main/res/navigation/trace_location_organizer_nav_graph.xml @@ -24,7 +24,6 @@ android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.category.TraceLocationCategoryFragment" android:label="TraceLocationCategoryFragment" tools:layout="@layout/trace_location_organizer_category_fragment"> - <action android:id="@+id/action_traceLocationOrganizerCategoriesFragment_to_traceLocationCreateFragment" app:destination="@id/traceLocationCreateFragment" /> @@ -37,6 +36,11 @@ <argument android:name="category" 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" /> @@ -46,10 +50,12 @@ android:name="de.rki.coronawarnapp.ui.eventregistration.organizer.list.TraceLocationsFragment" android:label="TraceLocationCategoryFragment" tools:layout="@layout/trace_location_organizer_trace_locations_list_fragment"> - <action android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationOrganizerCategoriesFragment" app:destination="@id/traceLocationOrganizerCategoriesFragment" /> + <action + android:id="@+id/action_traceLocationOrganizerListFragment_to_traceLocationCreateFragment" + app:destination="@id/traceLocationCreateFragment" /> </fragment> </navigation> \ No newline at end of file