From 39bcdd9a9bc93d71b60f23248370b1f2632fede7 Mon Sep 17 00:00:00 2001 From: Reimar Date: Thu, 8 May 2025 10:33:28 +0200 Subject: [PATCH] Implement deleting shopping items --- .../easyeat/helpers/shopping_list.kt | 4 ++ .../ui/shopping_list/ShoppingListFragment.kt | 39 +++++++++++++++++++ .../src/main/res/drawable/ic_delete_24px.xml | 10 +++++ .../res/menu/shopping_item_context_menu.xml | 8 ++++ app/app/src/main/res/values/strings.xml | 1 + 5 files changed, 62 insertions(+) create mode 100644 app/app/src/main/res/drawable/ic_delete_24px.xml create mode 100644 app/app/src/main/res/menu/shopping_item_context_menu.xml diff --git a/app/app/src/main/java/tech/mercantec/easyeat/helpers/shopping_list.kt b/app/app/src/main/java/tech/mercantec/easyeat/helpers/shopping_list.kt index aa42d3e..73ff1bb 100644 --- a/app/app/src/main/java/tech/mercantec/easyeat/helpers/shopping_list.kt +++ b/app/app/src/main/java/tech/mercantec/easyeat/helpers/shopping_list.kt @@ -20,3 +20,7 @@ fun addShoppingItem(ctx: Context, name: String, amount: Double?, unit: String?) fun toggleShoppingItemChecked(ctx: Context, item: ShoppingListItem) { requestJson(ctx, "PUT", "/api/ShoppingList/check?itemId=${item.id}", null) } + +fun deleteShoppingItem(ctx: Context, item: ShoppingListItem) { + requestJson(ctx, "DELETE", "/api/ShoppingList/delete?itemId=${item.id}", null) +} diff --git a/app/app/src/main/java/tech/mercantec/easyeat/ui/shopping_list/ShoppingListFragment.kt b/app/app/src/main/java/tech/mercantec/easyeat/ui/shopping_list/ShoppingListFragment.kt index b1e9dc3..fee97e3 100644 --- a/app/app/src/main/java/tech/mercantec/easyeat/ui/shopping_list/ShoppingListFragment.kt +++ b/app/app/src/main/java/tech/mercantec/easyeat/ui/shopping_list/ShoppingListFragment.kt @@ -8,6 +8,7 @@ import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.EditText +import android.widget.PopupMenu import android.widget.Spinner import android.widget.Toast import androidx.fragment.app.Fragment @@ -15,6 +16,7 @@ import tech.mercantec.easyeat.R import tech.mercantec.easyeat.databinding.FragmentShoppingListBinding import tech.mercantec.easyeat.helpers.ApiRequestException import tech.mercantec.easyeat.helpers.addShoppingItem +import tech.mercantec.easyeat.helpers.deleteShoppingItem import tech.mercantec.easyeat.helpers.getShoppingList import tech.mercantec.easyeat.helpers.toggleShoppingItemChecked import tech.mercantec.easyeat.models.Dish @@ -38,6 +40,7 @@ class ShoppingListFragment : Fragment() { _binding = FragmentShoppingListBinding.inflate(inflater, container, false) val root: View = binding.root + // Fetch shopping list items thread { val items: Array try { @@ -55,6 +58,7 @@ class ShoppingListFragment : Fragment() { } } + // Check / uncheck when clicking shopping item binding.shoppingList.setOnItemClickListener { parent, view, position, id -> val item = parent.getItemAtPosition(position) as ShoppingListItem item.checked = !item.checked @@ -73,6 +77,41 @@ class ShoppingListFragment : Fragment() { adapter.insert(item, position) } + // Show context menu when long clicking shopping item + binding.shoppingList.setOnItemLongClickListener { parent, view, position, id -> + val item = parent.getItemAtPosition(position) as ShoppingListItem + + val popup = PopupMenu(requireActivity(), view) + popup.apply { + menuInflater.inflate(R.menu.shopping_item_context_menu, menu) + setOnMenuItemClickListener { + when (it.itemId) { + R.id.remove_shopping_item -> { + (parent.adapter as ShoppingItemAdapter).remove(item) + + thread { + try { + deleteShoppingItem(requireContext(), item) + } catch (e: ApiRequestException) { + activity?.runOnUiThread { + Toast.makeText(context, e.message, Toast.LENGTH_LONG).show() + } + } + } + + true + } + else -> false + } + } + show() + } + + + return@setOnItemLongClickListener true + } + + // Show new item dialog when clicking add binding.addToShoppingList.setOnClickListener { val view = requireActivity().layoutInflater.inflate(R.layout.dialog_add_to_shopping_list, null) diff --git a/app/app/src/main/res/drawable/ic_delete_24px.xml b/app/app/src/main/res/drawable/ic_delete_24px.xml new file mode 100644 index 0000000..d1ed443 --- /dev/null +++ b/app/app/src/main/res/drawable/ic_delete_24px.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/app/src/main/res/menu/shopping_item_context_menu.xml b/app/app/src/main/res/menu/shopping_item_context_menu.xml new file mode 100644 index 0000000..48be440 --- /dev/null +++ b/app/app/src/main/res/menu/shopping_item_context_menu.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/app/src/main/res/values/strings.xml b/app/app/src/main/res/values/strings.xml index 741c1d1..e4bf2ef 100644 --- a/app/app/src/main/res/values/strings.xml +++ b/app/app/src/main/res/values/strings.xml @@ -39,6 +39,7 @@ Change password Log out Checked + Delete g