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