Merge branch 'master' of git.reim.ar:ReiMerc/easyeat
This commit is contained in:
commit
f38333dc8c
@ -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()))
|
||||||
|
}
|
@ -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?,
|
||||||
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user