11package de.psdev.devdrawer.profiles
22
3+ import android.database.sqlite.SQLiteConstraintException
34import android.os.Bundle
45import android.view.*
56import androidx.core.view.isVisible
@@ -8,6 +9,7 @@ import androidx.navigation.fragment.findNavController
89import androidx.navigation.fragment.navArgs
910import androidx.recyclerview.widget.LinearLayoutManager
1011import com.google.android.material.dialog.MaterialAlertDialogBuilder
12+ import com.google.android.material.snackbar.Snackbar
1113import dagger.hilt.android.AndroidEntryPoint
1214import de.psdev.devdrawer.BaseFragment
1315import de.psdev.devdrawer.R
@@ -18,6 +20,7 @@ import de.psdev.devdrawer.receivers.UpdateReceiver
1820import de.psdev.devdrawer.utils.awaitSubmit
1921import de.psdev.devdrawer.utils.consume
2022import kotlinx.coroutines.flow.*
23+ import kotlinx.coroutines.launch
2124import mu.KLogging
2225import reactivecircus.flowbinding.android.view.clicks
2326import reactivecircus.flowbinding.android.widget.textChanges
@@ -35,26 +38,26 @@ class WidgetProfileEditFragment : BaseFragment<FragmentWidgetProfileEditBinding>
3538
3639 private val onDeleteClickListener: PackageFilterActionListener = { packageFilter ->
3740 MaterialAlertDialogBuilder (requireContext())
38- .setTitle(" Delete?" )
39- .setNegativeButton(" No" ) { _, _ -> }
40- .setPositiveButton(" Yes" ) { _, _ ->
41- lifecycleScope.launchWhenResumed {
42- devDrawerDatabase.packageFilterDao().deleteById(packageFilter.id)
43- UpdateReceiver .send(requireContext())
41+ .setTitle(" Delete?" )
42+ .setNegativeButton(R .string.no) { _, _ -> }
43+ .setPositiveButton(R .string.yes) { _, _ ->
44+ lifecycleScope.launchWhenResumed {
45+ devDrawerDatabase.packageFilterDao().deleteById(packageFilter.id)
46+ UpdateReceiver .send(requireContext())
47+ }
4448 }
45- }
46- .show()
49+ .show()
4750 }
4851 private val onPreviewFilterClickListener: PackageFilterActionListener = { packageFilter ->
4952 findNavController().navigate(
50- WidgetProfileEditFragmentDirections .openFilterPreviewBottomSheetDialogFragment(
51- packageFilterId = packageFilter.id
52- )
53+ WidgetProfileEditFragmentDirections .openFilterPreviewBottomSheetDialogFragment(
54+ packageFilterId = packageFilter.id
55+ )
5356 )
5457 }
5558 private val listAdapter: PackageFilterListAdapter = PackageFilterListAdapter (
56- onDeleteClickListener = onDeleteClickListener,
57- onPreviewFilterClickListener = onPreviewFilterClickListener
59+ onDeleteClickListener = onDeleteClickListener,
60+ onPreviewFilterClickListener = onPreviewFilterClickListener
5861 )
5962 private var widgetProfile: WidgetProfile ? = null
6063
@@ -66,9 +69,9 @@ class WidgetProfileEditFragment : BaseFragment<FragmentWidgetProfileEditBinding>
6669 }
6770
6871 override fun createViewBinding (
69- inflater : LayoutInflater ,
70- container : ViewGroup ? ,
71- savedInstanceState : Bundle ?
72+ inflater : LayoutInflater ,
73+ container : ViewGroup ? ,
74+ savedInstanceState : Bundle ?
7275 ): FragmentWidgetProfileEditBinding = FragmentWidgetProfileEditBinding .inflate(inflater, container, false )
7376
7477 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
@@ -79,19 +82,19 @@ class WidgetProfileEditFragment : BaseFragment<FragmentWidgetProfileEditBinding>
7982 btnAddFilter.setOnClickListener { _ ->
8083 widgetProfile?.let {
8184 val directions =
82- WidgetProfileEditFragmentDirections .openAddPackageFilterBottomSheetDialogFragment(
83- widgetProfileId = it.id
84- )
85+ WidgetProfileEditFragmentDirections .openAddPackageFilterBottomSheetDialogFragment(
86+ widgetProfileId = it.id
87+ )
8588 findNavController().navigate(directions)
8689 }
8790 }
8891
8992 btnAddSignature.setOnClickListener {
9093 widgetProfile?.let {
9194 val directions =
92- WidgetProfileEditFragmentDirections .openAppSignatureChooserBottomSheetDialogFragment(
93- widgetProfileId = it.id
94- )
95+ WidgetProfileEditFragmentDirections .openAppSignatureChooserBottomSheetDialogFragment(
96+ widgetProfileId = it.id
97+ )
9598 findNavController().navigate(directions)
9699 }
97100 }
@@ -142,18 +145,22 @@ class WidgetProfileEditFragment : BaseFragment<FragmentWidgetProfileEditBinding>
142145 override fun onOptionsItemSelected (item : MenuItem ): Boolean = when (item.itemId) {
143146 R .id.action_delete -> consume {
144147 MaterialAlertDialogBuilder (requireContext())
145- .setTitle(" Delete profile?" )
146- .setNegativeButton(" No" ) { _, _ -> }
147- .setPositiveButton(" Yes" ) { _, _ ->
148- widgetProfile?.let { widgetProfile ->
149- lifecycleScope.launchWhenResumed {
150- devDrawerDatabase.widgetProfileDao().delete(widgetProfile)
151- UpdateReceiver .send(requireContext())
152- findNavController().popBackStack()
148+ .setTitle(" Delete profile?" )
149+ .setNegativeButton(R .string.no) { _, _ -> }
150+ .setPositiveButton(R .string.yes) { _, _ ->
151+ widgetProfile?.let { widgetProfile ->
152+ lifecycleScope.launch {
153+ try {
154+ devDrawerDatabase.widgetProfileDao().delete(widgetProfile)
155+ UpdateReceiver .send(requireContext())
156+ findNavController().popBackStack()
157+ } catch (e: SQLiteConstraintException ) {
158+ Snackbar .make(binding.root, R .string.error_profile_in_use, Snackbar .LENGTH_LONG ).show()
159+ }
160+ }
153161 }
154162 }
155- }
156- .show()
163+ .show()
157164 }
158165 else -> super .onOptionsItemSelected(item)
159166 }
0 commit comments