diff --git a/app/app/build.gradle.kts b/app/app/build.gradle.kts
index c10b1b3..eda15cf 100644
--- a/app/app/build.gradle.kts
+++ b/app/app/build.gradle.kts
@@ -3,6 +3,7 @@ import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
+ id("kotlin-parcelize")
id("org.jetbrains.kotlin.plugin.serialization")
}
diff --git a/app/app/src/main/AndroidManifest.xml b/app/app/src/main/AndroidManifest.xml
index e1e0150..2611327 100644
--- a/app/app/src/main/AndroidManifest.xml
+++ b/app/app/src/main/AndroidManifest.xml
@@ -52,6 +52,10 @@
android:name=".ui.dishes.DishDetailsActivity"
android:exported="false" />
+
+
diff --git a/app/app/src/main/java/tech/mercantec/easyeat/helpers/auth.kt b/app/app/src/main/java/tech/mercantec/easyeat/helpers/auth.kt
index e131eb4..985a32f 100644
--- a/app/app/src/main/java/tech/mercantec/easyeat/helpers/auth.kt
+++ b/app/app/src/main/java/tech/mercantec/easyeat/helpers/auth.kt
@@ -112,11 +112,7 @@ fun changePassword(ctx: Context, oldPassword: String, newPassword: String) {
return requestJson(ctx, "PUT", "/api/User/change-password", request)
}
-@Serializable
-data class ShoppingListAddRecipeRequest(val multiplier: String)
+fun AddRecipeToShoppingList(ctx: Context, id: Int, multiplier: String): Boolean {
-fun AddRecipeToShoppingList(ctx: Context, id: Int, multiplier: String) {
- val request = ShoppingListAddRecipeRequest(multiplier)
-
- return requestJson(ctx, "POST", "/api/ShoppingList/recipeadd/$id", request)
+ return requestJson(ctx, "POST", "/api/ShoppingList/recipeadd/$id", multiplier)
}
diff --git a/app/app/src/main/java/tech/mercantec/easyeat/helpers/dishes.kt b/app/app/src/main/java/tech/mercantec/easyeat/helpers/dishes.kt
index bcaba3a..58d533e 100644
--- a/app/app/src/main/java/tech/mercantec/easyeat/helpers/dishes.kt
+++ b/app/app/src/main/java/tech/mercantec/easyeat/helpers/dishes.kt
@@ -16,6 +16,10 @@ fun createRecipe(ctx: Context, recipe: Recipe) {
requestJson(ctx, "POST", "/api/recipe/create", recipe)
}
+fun updateRecipe(ctx: Context, id: Int, recipe: Recipe) {
+ requestJson(ctx, "PUT", "/api/recipe/edit/$id", recipe)
+}
+
@Serializable
data class GetAllRecipesResponse(val id: Int, val name: String, val description: String)
@@ -24,9 +28,9 @@ fun getAllRecipes(ctx: Context): List {
}
@Serializable
-data class RecipeDetailsResponse(val id: Int, val name: String, val description: String, val directions: List, val ingredients: List)
+data class RecipeDetailsResponse(val recipe: Recipe)
-fun getRecipeDetails(ctx: Context, id: Int): RecipeDetailsResponse {
- return requestJson(ctx, "GET", "/api/Recipe/get/$id", null)
+fun getRecipeDetails(ctx: Context, id: Int): Recipe {
+ return requestJson(ctx, "GET", "/api/Recipe/get/$id", null)
}
diff --git a/app/app/src/main/java/tech/mercantec/easyeat/models/recipe.kt b/app/app/src/main/java/tech/mercantec/easyeat/models/recipe.kt
index 2ee35ed..2087282 100644
--- a/app/app/src/main/java/tech/mercantec/easyeat/models/recipe.kt
+++ b/app/app/src/main/java/tech/mercantec/easyeat/models/recipe.kt
@@ -2,6 +2,7 @@ package tech.mercantec.easyeat.models
import kotlinx.serialization.Serializable
+
@Serializable
data class Recipe(
val id: Int? = null,
diff --git a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/CreateDishActivity.kt b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/CreateDishActivity.kt
index b5cf99f..af711a0 100644
--- a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/CreateDishActivity.kt
+++ b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/CreateDishActivity.kt
@@ -25,7 +25,7 @@ class CreateDishActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_create_dish_form)
+ setContentView(R.layout.activity_dish_form)
ingredientContainer = findViewById(R.id.ingredientContainer)
val addButton: Button = findViewById(R.id.addIngredientButton)
@@ -84,7 +84,7 @@ class CreateDishActivity : AppCompatActivity() {
private fun addIngredientRow() {
val inflater = LayoutInflater.from(this)
- val ingredientRow = inflater.inflate(R.layout.activity_create_dish_ingredient_row, null)
+ val ingredientRow = inflater.inflate(R.layout.activity_dish_ingredient_row, null)
val spinnerMeasurements = ingredientRow.findViewById(R.id.measurementsDropDown)
spinnerMeasurements.adapter = ArrayAdapter(
this,
diff --git a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishDetailsActivity.kt b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishDetailsActivity.kt
index 879757b..419a173 100644
--- a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishDetailsActivity.kt
+++ b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishDetailsActivity.kt
@@ -2,17 +2,17 @@ package tech.mercantec.easyeat.ui.dishes
import android.app.Activity
import android.app.ProgressDialog
+import android.content.Intent
import android.os.Bundle
import android.text.Html
import android.util.Log
-import android.view.View
-import android.view.ViewGroup
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
import android.widget.Button
import android.widget.LinearLayout
import android.widget.Toast
import tech.mercantec.easyeat.R
import tech.mercantec.easyeat.helpers.ApiRequestException
-import tech.mercantec.easyeat.helpers.RecipeDetailsResponse
import tech.mercantec.easyeat.helpers.getRecipeDetails
import kotlin.concurrent.thread
import android.widget.EditText
@@ -22,6 +22,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.doAfterTextChanged
import tech.mercantec.easyeat.helpers.AddRecipeToShoppingList
import tech.mercantec.easyeat.models.Ingredient
+import tech.mercantec.easyeat.models.Recipe
class DishDetailsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@@ -39,7 +40,7 @@ class DishDetailsActivity : AppCompatActivity() {
}
thread {
- val recipe: RecipeDetailsResponse
+ val recipe: Recipe
try {
recipe = getRecipeDetails(this, dishId)
} catch (e: ApiRequestException) {
@@ -143,13 +144,21 @@ class DishDetailsActivity : AppCompatActivity() {
}
runOnUiThread {
- Toast.makeText(this, "Password changed successfully", Toast.LENGTH_LONG).show()
+ Toast.makeText(this, "Recipe ingredients added to shopping", Toast.LENGTH_LONG).show()
}
setResult(Activity.RESULT_OK)
finish()
}
}
+ val editRecipeBtn: Button = findViewById(R.id.editRecipeBtn)
+ editRecipeBtn.setOnClickListener {
+ val jsonRecipe = Json.encodeToString(recipe) // convert Recipe to JSON string
+ val intent = Intent(this, EditDishActivity::class.java)
+ intent.putExtra("recipe_json", jsonRecipe) // put as string
+ startActivity(intent)
+ }
+
}
}
diff --git a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/EditDishActivity.kt b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/EditDishActivity.kt
new file mode 100644
index 0000000..cd1b628
--- /dev/null
+++ b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/EditDishActivity.kt
@@ -0,0 +1,154 @@
+package tech.mercantec.easyeat.ui.dishes
+
+import android.app.Activity
+import android.app.ProgressDialog
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.widget.ArrayAdapter
+import android.widget.Button
+import android.widget.EditText
+import android.widget.ImageButton
+import android.widget.LinearLayout
+import android.widget.Spinner
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import tech.mercantec.easyeat.R
+import tech.mercantec.easyeat.helpers.ApiRequestException
+import tech.mercantec.easyeat.helpers.createRecipe
+import tech.mercantec.easyeat.helpers.updateRecipe
+import tech.mercantec.easyeat.models.Ingredient
+import tech.mercantec.easyeat.models.Recipe
+import kotlin.concurrent.thread
+
+class EditDishActivity : AppCompatActivity() {
+
+ private lateinit var ingredientContainer: LinearLayout
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_dish_form)
+
+ val recipe: Recipe? = intent.getStringExtra("recipe_json")?.let {
+ try {
+ Json.decodeFromString(it)
+ } catch (e: Exception) {
+ null
+ }
+ }
+
+ val dishName = findViewById(R.id.dishName)
+ val dishDescription = findViewById(R.id.dishDescription)
+ val instructions = findViewById(R.id.instructions)
+ val saveButton = findViewById