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 new file mode 100644 index 0000000..740f9fb --- /dev/null +++ b/app/app/src/main/java/tech/mercantec/easyeat/helpers/shopping_list.kt @@ -0,0 +1,20 @@ +package tech.mercantec.easyeat.helpers + +import android.content.Context +import kotlinx.serialization.Serializable + +@Serializable +data class ShoppingListItem(val id: Int, val name: String, val amount: Double?, val unit: String?, val checked: Boolean) + +fun getShoppingList(ctx: Context): Array { + return requestJson>(ctx, "GET", "/api/ShoppingList/get", null) +} + +@Serializable +data class AddShoppingItemRequest(val name: String, val amount: Double?, val unit: String?, val checked: Boolean) + +fun addShoppingItem(ctx: Context, name: String, amount: Double?, unit: String?) { + val request = AddShoppingItemRequest(name, amount, unit, false) + + requestJson(ctx, "POST", "/api/ShoppingList/add", request) +} 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 fef40ae..878cab7 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 @@ -1,15 +1,21 @@ package tech.mercantec.easyeat.ui.shopping_list import android.app.AlertDialog +import android.app.Dialog import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter +import android.widget.EditText import android.widget.Spinner +import android.widget.Toast import androidx.fragment.app.Fragment import tech.mercantec.easyeat.R import tech.mercantec.easyeat.databinding.FragmentShoppingListBinding +import tech.mercantec.easyeat.helpers.ApiRequestException +import tech.mercantec.easyeat.helpers.addShoppingItem +import kotlin.concurrent.thread class ShoppingListFragment : Fragment() { @@ -32,12 +38,33 @@ class ShoppingListFragment : Fragment() { val dialog = AlertDialog.Builder(activity) .setView(view) - .setPositiveButton(R.string.add_label, { dialog, id -> + .setPositiveButton(R.string.add_label) { dialog, id -> + val dialog = dialog as AlertDialog - }) - .setNegativeButton(R.string.cancel_label, { dialog, id -> + val amount = view.findViewById(R.id.amount).text.toString().toDouble() + val unit = view.findViewById(R.id.unit_selector).selectedItem.toString().ifEmpty { null } + val name = view.findViewById(R.id.name).text.toString() + + dialog.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = false + dialog.getButton(AlertDialog.BUTTON_NEGATIVE).isEnabled = false + + thread { + try { + addShoppingItem(requireContext(), name, amount, unit) + } catch (e: ApiRequestException) { + activity?.runOnUiThread { + Toast.makeText(context, e.message, Toast.LENGTH_LONG).show() + } + } finally { + activity?.runOnUiThread { + dialog.dismiss() + } + } + } + } + .setNegativeButton(R.string.cancel_label) { dialog, _ -> dialog.cancel() - }) + } .create() dialog.show() diff --git a/app/app/src/main/res/layout/dialog_add_to_shopping_list.xml b/app/app/src/main/res/layout/dialog_add_to_shopping_list.xml index 3d9ae2d..db8d297 100644 --- a/app/app/src/main/res/layout/dialog_add_to_shopping_list.xml +++ b/app/app/src/main/res/layout/dialog_add_to_shopping_list.xml @@ -30,12 +30,14 @@ android:layout_height="wrap_content" android:layout_below="@id/amount_label" android:layout_alignParentStart="true" + android:inputType="numberDecimal" + android:importantForAutofill="no" android:hint="@string/ingredient_amount_hint" /> diff --git a/app/app/src/main/res/values/strings.xml b/app/app/src/main/res/values/strings.xml index e134a57..3c50a80 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 + g kg ml