diff --git a/app/app/src/main/AndroidManifest.xml b/app/app/src/main/AndroidManifest.xml index 18a13cb..69e6466 100644 --- a/app/app/src/main/AndroidManifest.xml +++ b/app/app/src/main/AndroidManifest.xml @@ -44,6 +44,10 @@ android:name=".ui.dishes.CreateDishActivity" android:exported="false" /> + + diff --git a/app/app/src/main/java/tech/mercantec/easyeat/helpers/api.kt b/app/app/src/main/java/tech/mercantec/easyeat/helpers/api.kt index 28dfc6f..b11548c 100644 --- a/app/app/src/main/java/tech/mercantec/easyeat/helpers/api.kt +++ b/app/app/src/main/java/tech/mercantec/easyeat/helpers/api.kt @@ -37,7 +37,7 @@ fun request(ctx: Context, method: String, path: String, data: String?, autoRefre outputStream.write(data.toByteArray()) outputStream.flush() } - + Log.i("http", responseCode.toString()) if (responseCode == 401) { if (!autoRefresh || refreshToken == null || !refreshAuthToken(ctx, refreshToken)) { val intent = Intent(ctx, LoginActivity::class.java) @@ -87,6 +87,14 @@ inline fun requestJson(ctx: Context, method: String, } } + if (response.body.isBlank()) { + // Return Unit or an empty default value depending on Res + return when (Res::class) { + Unit::class -> Unit as Res + else -> throw ApiRequestException("Expected JSON but got empty response", null) + } + } + try { return Json.decodeFromString(response.body) } catch (e: SerializationException) { 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 672be6e..a804e43 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 @@ -1,8 +1,11 @@ package tech.mercantec.easyeat.helpers +import android.content.ClipDescription import android.content.Context import android.util.Log import kotlinx.serialization.Serializable +import tech.mercantec.easyeat.models.Direction +import tech.mercantec.easyeat.models.Ingredient import tech.mercantec.easyeat.models.Recipe @Serializable data class LoginRequest(val emailUsr: String, val password: String) @@ -109,12 +112,19 @@ fun changePassword(ctx: Context, oldPassword: String, newPassword: String) { return requestJson(ctx, "PUT", "/api/User/change-password", request) } + @Serializable -data class CreateRecipeRequest(val recipe: Recipe) +data class CreateRecipeRequest(val name: String, val description: String, val directions: List, val ingredients: List) fun createRecipe(ctx: Context, recipe: Recipe) { - val request = CreateRecipeRequest(recipe) - - return requestJson(ctx, "POST", "/api/recipe/create", request) + val request = CreateRecipeRequest(recipe.name, recipe.description, recipe.directions, recipe.ingredients) + requestJson(ctx, "POST", "/api/recipe/create", request) +} + +@Serializable +data class RecipeResponse(val id: Int, val name: String, val description: String) + +fun getRecipies(ctx: Context): List { + return requestJson>(ctx, "GET", "/api/Recipe/getall", null) } diff --git a/app/app/src/main/java/tech/mercantec/easyeat/models/dish.kt b/app/app/src/main/java/tech/mercantec/easyeat/models/dish.kt index 1b84e3e..dc2f2a3 100644 --- a/app/app/src/main/java/tech/mercantec/easyeat/models/dish.kt +++ b/app/app/src/main/java/tech/mercantec/easyeat/models/dish.kt @@ -1,3 +1,3 @@ package tech.mercantec.easyeat.models -public data class Dish(val name: String, val mainIngredient: String, val expense: Double) +public data class DishListItem(val id: Int,val name: String, val description: String) diff --git a/app/app/src/main/java/tech/mercantec/easyeat/ui/MainActivity.kt b/app/app/src/main/java/tech/mercantec/easyeat/ui/MainActivity.kt index fc948f2..f350625 100644 --- a/app/app/src/main/java/tech/mercantec/easyeat/ui/MainActivity.kt +++ b/app/app/src/main/java/tech/mercantec/easyeat/ui/MainActivity.kt @@ -34,10 +34,5 @@ class MainActivity : AppCompatActivity() { ) setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) - - findViewById(tech.mercantec.easyeat.R.id.add_dish).setOnClickListener { - val intent = Intent(this, CreateDishActivity::class.java) - startActivity(intent) - } } } diff --git a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/CreateDishAIActivity.kt b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/CreateDishAIActivity.kt new file mode 100644 index 0000000..82133f6 --- /dev/null +++ b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/CreateDishAIActivity.kt @@ -0,0 +1,16 @@ +package tech.mercantec.easyeat.ui.dishes + +import android.os.Bundle +import android.widget.LinearLayout +import androidx.appcompat.app.AppCompatActivity +import tech.mercantec.easyeat.R + +class CreateDishAIActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.create_dish_ai_form) + + } + +} 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 a6d0463..e6fdd74 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 @@ -1,5 +1,6 @@ package tech.mercantec.easyeat.ui.dishes +import android.app.Activity import android.app.ProgressDialog import android.content.Context import android.os.Bundle @@ -60,16 +61,7 @@ class CreateDishActivity : AppCompatActivity() { ingredients = ingredientList ) - Log.i("recipe name:", recipe.name) - Log.i("recipe name:", recipe.description) - for (x in recipe.directions) { - Log.i("recipe name:", x.instructions) - } - for(x in recipe.ingredients){ - Log.i("recipe name:", x.name) - Log.i("recipe name:", x.amount.toString()) - Log.i("recipe name:", x.unit.toString()) - } + val progressDialog = ProgressDialog(this) progressDialog.setMessage("Loading...") progressDialog.show() @@ -92,15 +84,10 @@ class CreateDishActivity : AppCompatActivity() { Toast.makeText(this, "Password changed successfully", Toast.LENGTH_LONG).show() } + setResult(Activity.RESULT_OK) finish() } } - - - - - - } private fun addIngredientRow() { diff --git a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishAdapter.kt b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishAdapter.kt index cde2497..5b72d04 100644 --- a/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishAdapter.kt +++ b/app/app/src/main/java/tech/mercantec/easyeat/ui/dishes/DishAdapter.kt @@ -7,22 +7,20 @@ import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.TextView import tech.mercantec.easyeat.R -import tech.mercantec.easyeat.models.Dish +import tech.mercantec.easyeat.models.DishListItem -class DishAdapter(context: Context, dishes: Array) : - ArrayAdapter(context, 0, dishes) { +class DishAdapter(context: Context, dishes: List) : + ArrayAdapter(context, 0, dishes) { override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { val dish = getItem(position) val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.dish_list_item, parent, false) val nameTextView = view.findViewById(R.id.dishName) - val ingredientTextView = view.findViewById(R.id.mainIngredient) - val expenseTextView = view.findViewById(R.id.expense) + val descriptionTextView = view.findViewById(R.id.descriptionTextView) nameTextView.text = "Name: ${dish?.name}" - ingredientTextView.text = "Main Ingredient: ${dish?.mainIngredient}" - expenseTextView.text = "Expense: ${dish?.expense} kr" + descriptionTextView.text = "Description: ${dish?.description}" return view } 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 d75d028..2910543 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 @@ -1,21 +1,33 @@ package tech.mercantec.easyeat.ui.dishes +import android.app.Activity import android.content.Intent import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope +import kotlinx.coroutines.launch +import tech.mercantec.easyeat.R import tech.mercantec.easyeat.databinding.FragmentDishesBinding -import tech.mercantec.easyeat.models.Dish +import tech.mercantec.easyeat.helpers.ApiRequestException +import tech.mercantec.easyeat.helpers.RecipeResponse +import tech.mercantec.easyeat.helpers.getRecipies +import tech.mercantec.easyeat.helpers.login +import tech.mercantec.easyeat.models.DishListItem +import tech.mercantec.easyeat.ui.MainActivity +import kotlin.concurrent.thread class DishesFragment : Fragment() { private var _binding: FragmentDishesBinding? = null - - // This property is only valid between onCreateView and - // onDestroyView. + private lateinit var createDishLauncher: ActivityResultLauncher private val binding get() = _binding!! override fun onCreateView( @@ -26,42 +38,72 @@ class DishesFragment : Fragment() { _binding = FragmentDishesBinding.inflate(inflater, container, false) val root: View = binding.root - binding.addDish.setOnClickListener { - val intent = Intent(requireContext(), CreateDishActivity::class.java) - startActivity(intent) - } + loadRecipes() - context?.let { context -> - binding.dishesList.setOnItemClickListener { parent, view, position, id -> - val selectedItem = parent.getItemAtPosition(position) as Dish - Toast.makeText(context, "you selected $selectedItem.name that costs ${selectedItem.expense} kr.", Toast.LENGTH_LONG).show() + binding.addDish.setOnClickListener { + val dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.create_dish_modal_dialog, null) + + val dialog = android.app.AlertDialog.Builder(requireContext()) + .setView(dialogView) + .setCancelable(true) // tap outside to dismiss + .create() + + dialog.window?.setBackgroundDrawableResource(android.R.color.transparent) + + dialogView.findViewById