Merge branch 'master' of git.reim.ar:ReiMerc/easyeat

This commit is contained in:
Jeas0001 2025-05-13 10:45:53 +02:00
commit f38333dc8c
7 changed files with 92 additions and 24 deletions

View File

@ -0,0 +1,12 @@
package tech.mercantec.easyeat.helpers
import android.content.Context
import kotlinx.serialization.Serializable
import tech.mercantec.easyeat.models.Recipe
@Serializable
data class GenerateRecipeRequest(val dish: String, val language: String, val numberOfRecipes: Int, val allergi: Array<String>)
fun generateRecipeWithAI(ctx: Context, title: String, language: String): Recipe {
return requestJson<GenerateRecipeRequest, Recipe>(ctx, "POST", "/api/Recipe/chatbot", GenerateRecipeRequest(title, language, 1, arrayOf()))
}

View File

@ -6,16 +6,10 @@ import kotlinx.serialization.Serializable
data class Recipe( data class Recipe(
val name: String, val name: String,
val description: String, val description: String,
val directions: List<Direction>, val directions: List<String>,
val ingredients: List<Ingredient> val ingredients: List<Ingredient>
) )
@Serializable
data class Direction(
val instructions: String
)
@Serializable @Serializable
data class Ingredient( data class Ingredient(
val amount: Double?, val amount: Double?,

View File

@ -1,16 +1,49 @@
package tech.mercantec.easyeat.ui.dishes package tech.mercantec.easyeat.ui.dishes
import android.app.ProgressDialog
import android.os.Bundle import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import tech.mercantec.easyeat.R import tech.mercantec.easyeat.R
import tech.mercantec.easyeat.helpers.ApiRequestException
import tech.mercantec.easyeat.helpers.GenerateRecipeResponse
import tech.mercantec.easyeat.helpers.generateRecipeWithAI
import java.util.Locale
import kotlin.concurrent.thread
class CreateDishAIActivity : AppCompatActivity() { class CreateDishAIActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.create_dish_ai_form) setContentView(R.layout.create_dish_ai_form)
} findViewById<Button>(R.id.generate).setOnClickListener {
val name = findViewById<EditText>(R.id.dish_title).text.toString()
val progressDialog = ProgressDialog(this)
progressDialog.setMessage("Generating...")
progressDialog.show()
thread {
val response: GenerateRecipeResponse
try {
response = generateRecipeWithAI(this, name, Locale.getDefault().displayLanguage)
} catch (e: ApiRequestException) {
runOnUiThread {
Toast.makeText(this, e.message, Toast.LENGTH_LONG).show()
}
return@thread
} finally {
progressDialog.hide()
}
runOnUiThread {
Toast.makeText(this, response.toString(), Toast.LENGTH_LONG).show()
}
}
}
}
} }

View File

@ -48,11 +48,10 @@ class CreateDishActivity : AppCompatActivity() {
saveButton.setOnClickListener { saveButton.setOnClickListener {
val ingredientList = collectIngredients() val ingredientList = collectIngredients()
val instructions = findViewById<EditText>(R.id.instructions).text.toString().trim() val instructions = findViewById<EditText>(R.id.instructions).text.toString().trim()
val directions: List<Direction> = instructions val directions: List<String> = instructions
.split("\n") .split("\n")
.map { line -> line.trim() } .map { line -> line.trim() }
.filter { it.isNotEmpty() } .filter { it.isNotEmpty() }
.map { line -> Direction(instructions = line) }
val recipe = Recipe( val recipe = Recipe(
name = findViewById<EditText>(R.id.dishName).text.toString().trim(), name = findViewById<EditText>(R.id.dishName).text.toString().trim(),
@ -61,7 +60,6 @@ class CreateDishActivity : AppCompatActivity() {
ingredients = ingredientList ingredients = ingredientList
) )
val progressDialog = ProgressDialog(this) val progressDialog = ProgressDialog(this)
progressDialog.setMessage("Loading...") progressDialog.setMessage("Loading...")
progressDialog.show() progressDialog.show()

View File

@ -39,9 +39,9 @@ class ShoppingItemAdapter(context: Context, items: ArrayList<ShoppingListItem>)
val color = TypedValue() val color = TypedValue()
context.theme.resolveAttribute(R.attr.colorDisabled, color, true) context.theme.resolveAttribute(R.attr.colorDisabled, color, true)
it.setTextColor(ContextCompat.getColor(context, color.resourceId)) it.setTextColor(ContextCompat.getColor(context, color.resourceId))
checkmarkView.visibility = View.VISIBLE
} }
checkmarkView.visibility = View.VISIBLE
} else { } else {
textViews.forEach { textViews.forEach {
it.paintFlags = it.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv() it.paintFlags = it.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
@ -49,9 +49,9 @@ class ShoppingItemAdapter(context: Context, items: ArrayList<ShoppingListItem>)
val color = TypedValue() val color = TypedValue()
context.theme.resolveAttribute(android.R.attr.textColorSecondary, color, true) context.theme.resolveAttribute(android.R.attr.textColorSecondary, color, true)
it.setTextColor(ContextCompat.getColor(context, color.resourceId)) it.setTextColor(ContextCompat.getColor(context, color.resourceId))
checkmarkView.visibility = View.INVISIBLE
} }
checkmarkView.visibility = View.INVISIBLE
} }
} }

View File

@ -1,14 +1,42 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout
xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="30dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<TextView <TextView
android:id="@+id/formforai" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="FormForAI" android:textAlignment="center"
tools:layout_editor_absoluteX="126dp" android:textSize="24sp"
tools:layout_editor_absoluteY="287dp" /> android:text="@string/ai_generate_recipe_title"
</androidx.constraintlayout.widget.ConstraintLayout> />
<TextView
android:layout_marginTop="20dp"
android:layout_marginStart="2sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:labelFor="@id/dish_title"
android:text="@string/dish_title_label"
/>
<EditText
android:id="@+id/dish_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:importantForAutofill="no"
android:inputType="text"
/>
<Button
android:id="@+id/generate"
android:layout_marginTop="20sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/generate_recipe_label"
/>
</LinearLayout>

View File

@ -44,6 +44,9 @@
<string name="search_for_dishes">Search For Dishes</string> <string name="search_for_dishes">Search For Dishes</string>
<string name="manually">Manually</string> <string name="manually">Manually</string>
<string name="create_dish">Create Dish</string> <string name="create_dish">Create Dish</string>
<string name="ai_generate_recipe_title">Generate recipe with AI</string>
<string name="dish_title_label">Name of dish</string>
<string name="generate_recipe_label">Generate</string>
<string-array name="units"> <string-array name="units">
<item></item> <item></item>
<item>g</item> <item>g</item>