diff --git a/app/app/src/main/AndroidManifest.xml b/app/app/src/main/AndroidManifest.xml index 10e464a..e1e0150 100644 --- a/app/app/src/main/AndroidManifest.xml +++ b/app/app/src/main/AndroidManifest.xml @@ -45,7 +45,7 @@ android:exported="false" /> (ctx, "POST", "/api/User/login", request) - with (ctx.getSharedPreferences("easyeat", Context.MODE_PRIVATE).edit()) { + with(ctx.getSharedPreferences("easyeat", Context.MODE_PRIVATE).edit()) { putInt("user-id", response.id) putString("username", response.userName) putString("auth-token", response.token) @@ -28,7 +28,7 @@ fun login(ctx: Context, email: String, password: String) { } fun logout(ctx: Context) { - with (ctx.getSharedPreferences("easyeat", Context.MODE_PRIVATE).edit()) { + with(ctx.getSharedPreferences("easyeat", Context.MODE_PRIVATE).edit()) { remove("user-id") remove("username") remove("auth-token") 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 e0aa866..4a7a599 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 @@ -2,6 +2,7 @@ package tech.mercantec.easyeat.helpers import android.content.Context import kotlinx.serialization.Serializable +import tech.mercantec.easyeat.models.Ingredient import tech.mercantec.easyeat.models.Recipe @Serializable @@ -10,3 +11,21 @@ data class GenerateRecipeRequest(val dish: String, val language: String, val num fun generateRecipeWithAI(ctx: Context, title: String, language: String): Recipe { return requestJson(ctx, "POST", "/api/Recipe/chatbot", GenerateRecipeRequest(title, language, 1, arrayOf())) } + +fun createRecipe(ctx: Context, recipe: Recipe) { + requestJson(ctx, "POST", "/api/recipe/create", recipe) +} + +@Serializable +data class GetAllRecipesResponse(val id: Int, val name: String, val description: String) + +fun getAllRecipes(ctx: Context): List { + return requestJson>(ctx, "GET", "/api/Recipe/getall", null) +} + +@Serializable +data class RecipeDetailsResponse(val id: Int, val name: String, val description: String, val directions: List, val ingredients: List) + +fun getRecipeDetails(ctx: Context, id: Int): RecipeDetailsResponse { + return requestJson(ctx, "GET", "/api/Recipe/get/$id", null) +} diff --git a/app/app/src/main/java/tech/mercantec/easyeat/models/CreateRecipe.kt b/app/app/src/main/java/tech/mercantec/easyeat/models/CreateRecipe.kt deleted file mode 100644 index e7661bb..0000000 --- a/app/app/src/main/java/tech/mercantec/easyeat/models/CreateRecipe.kt +++ /dev/null @@ -1,18 +0,0 @@ -package tech.mercantec.easyeat.models - -import kotlinx.serialization.Serializable - -@Serializable -data class CreateRecipe( - val name: String, - val description: String, - val directions: List, - val ingredients: List -) - -@Serializable -data class CreateIngredient( - val amount: Double?, - val unit: String?, - val name: String -) \ No newline at end of file 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 86e5796..2ee35ed 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,10 +2,9 @@ package tech.mercantec.easyeat.models import kotlinx.serialization.Serializable - @Serializable data class Recipe( - val id: Int, + val id: Int? = null, val name: String, val description: String, val directions: List, @@ -14,7 +13,7 @@ data class Recipe( @Serializable data class Ingredient( - val id: Int, + val id: Int? = null, val amount: Double?, val unit: String?, val name: String 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 e5b72a9..7743358 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 @@ -2,9 +2,7 @@ package tech.mercantec.easyeat.ui.dishes import android.app.Activity import android.app.ProgressDialog -import android.content.Context import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.widget.ArrayAdapter import android.widget.Button @@ -14,14 +12,14 @@ import android.widget.LinearLayout import android.widget.Spinner import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContentProviderCompat.requireContext import tech.mercantec.easyeat.R import tech.mercantec.easyeat.helpers.ApiRequestException -import tech.mercantec.easyeat.helpers.changePassword import tech.mercantec.easyeat.helpers.createRecipe import tech.mercantec.easyeat.helpers.request import tech.mercantec.easyeat.models.CreateIngredient import tech.mercantec.easyeat.models.CreateRecipe +import tech.mercantec.easyeat.models.Ingredient +import tech.mercantec.easyeat.models.Recipe import kotlin.concurrent.thread class CreateDishActivity : AppCompatActivity() { @@ -52,7 +50,7 @@ class CreateDishActivity : AppCompatActivity() { .map { line -> line.trim() } .filter { it.isNotEmpty() } - val recipe = CreateRecipe( + val recipe = Recipe( name = findViewById(R.id.dishName).text.toString().trim(), description = findViewById(R.id.dishDescription).text.toString().trim(), directions = directions, @@ -106,8 +104,8 @@ class CreateDishActivity : AppCompatActivity() { ingredientContainer.addView(ingredientRow) } - private fun collectIngredients(): List { - val ingredients = mutableListOf() + private fun collectIngredients(): List { + val ingredients = mutableListOf() for (i in 0 until ingredientContainer.childCount) { val ingredientView = ingredientContainer.getChildAt(i) @@ -124,7 +122,7 @@ class CreateDishActivity : AppCompatActivity() { // Optional: Only add non-empty rows if (element.isNotEmpty() && amount.isNotEmpty()) { - ingredients.add(CreateIngredient(name = element, amount = amount.toDouble(), unit = unit)) + ingredients.add(Ingredient(name = element, amount = amount.toDouble(), unit = unit)) } } diff --git a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishesFragment.kt b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishesFragment.kt index 4e1a301..70ab3fd 100644 --- a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishesFragment.kt +++ b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishesFragment.kt @@ -6,7 +6,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Button +import android.widget.PopupMenu import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts @@ -15,7 +15,7 @@ import tech.mercantec.easyeat.R import tech.mercantec.easyeat.databinding.FragmentDishesBinding import tech.mercantec.easyeat.helpers.ApiRequestException import tech.mercantec.easyeat.helpers.GetAllRecipesResponse -import tech.mercantec.easyeat.helpers.getAllRecipies +import tech.mercantec.easyeat.helpers.getAllRecipes import tech.mercantec.easyeat.models.DishListItem import kotlin.concurrent.thread @@ -36,28 +36,31 @@ class DishesFragment : Fragment() { loadRecipes() binding.addDish.setOnClickListener { - val dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.create_dish_modal_dialog, null) + val popup = PopupMenu(requireActivity(), it) - val dialog = android.app.AlertDialog.Builder(requireContext()) - .setView(dialogView) - .setCancelable(true) // tap outside to dismiss - .create() + popup.apply { + menuInflater.inflate(R.menu.create_dish_menu, menu) - dialog.window?.setBackgroundDrawableResource(android.R.color.transparent) + setOnMenuItemClickListener { + when (it.itemId) { + R.id.create_manually -> { + val intent = Intent(requireContext(), CreateDishActivity::class.java) + createDishLauncher.launch(intent) - dialogView.findViewById