diff --git a/app/src/main/java/com/shuwei/dish/match/ui/PrepareCookActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/PrepareCookActivity.kt index f5972cc..7a50db5 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/PrepareCookActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/PrepareCookActivity.kt @@ -1,7 +1,6 @@ package com.shuwei.dish.match.ui import android.annotation.SuppressLint -import android.graphics.Bitmap import android.graphics.Typeface import android.net.Uri import android.os.Bundle @@ -20,7 +19,6 @@ import com.shuwei.dish.match.entity.CookFoodEntity import com.shuwei.dish.match.entity.CookFoodGoodsEntity import com.shuwei.dish.match.entity.FoodRecord import android.view.ViewGroup -import androidx.camera.view.PreviewView import androidx.lifecycle.lifecycleScope import com.shuwei.dish.match.databinding.LayoutCameraPreviewBinding import com.shuwei.dish.match.objbox.FoodModule @@ -41,6 +39,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.Serializable import java.util.concurrent.atomic.AtomicBoolean +import kotlin.math.abs @SuppressLint("NotifyDataSetChanged") class PrepareCookActivity : BaseActivity() { @@ -48,6 +47,8 @@ class PrepareCookActivity : BaseActivity() { companion object { const val TAG = "CookActivity" const val FOOD_ITEM = "foodItem" + const val WEIGHT_CHANGE_VALUE = 5 + const val WEIGHT_RECOGNIZE_VALUE = 10 } private lateinit var binding: ActivityPrepareCookBinding @@ -126,6 +127,9 @@ class PrepareCookActivity : BaseActivity() { } } + /** + * 添加重量信息到食材数据 + */ private fun addWeight() { if (clickIndex == -1) { toast("请选择菜品构成") @@ -153,41 +157,51 @@ class PrepareCookActivity : BaseActivity() { } private val isTakingPhoto = AtomicBoolean(false) + private var lastWeight = 0.0 /** * 重量稳定时触发菜品识别 * @param weight 当前稳定重量 */ private fun recognizeFood(weight: Double) { - if (weight < 10) { + if (weight < WEIGHT_RECOGNIZE_VALUE) { if (recognizeDialog.isShowing) recognizeDialog.dismiss() return } - if (isTakingPhoto.get() || recognizeDialog.isShowing) return + if (isTakingPhoto.get() || recognizeDialog.isShowing || abs(lastWeight - weight) <= WEIGHT_CHANGE_VALUE) return isTakingPhoto.set(true) cameraUtils.takePhoto( succCallback = cameraSuccessCallback, failCallback = cameraFailureCallback ) + lastWeight = weight } - private fun addFood() { - FoodSearchDialog().show(this) { item -> - val filterResult = list.firstOrNull { it.goodsId == item.goodsId } - if (filterResult != null) { - toast("不允许重复添加同一食材") - return@show - } - list.add(CookFoodGoodsEntity().apply { - goodsId = item.goodsId - goodsName = item.goodsName -// materialType = - isNewDishType = true - isOriginalData = false - }) - onItemClick(list.size - 1) - binding.rvDishPartList.smoothScrollToPosition(list.size - 1) + /** + * 菜品选择回调 + */ + private val foodSelectCallback: (CookFoodGoodsEntity) -> Unit = foodSelectCallback@{ item -> + val filterResult = list.firstOrNull { it.goodsId == item.goodsId } + if (filterResult != null) { + toast("不允许重复添加同一食材") + return@foodSelectCallback } + list.add(CookFoodGoodsEntity().apply { + goodsId = item.goodsId + goodsName = item.goodsName +// materialType = + isNewDishType = true + isOriginalData = false + }) + onFoodItemClick(list.size - 1) + binding.rvDishPartList.smoothScrollToPosition(list.size - 1) + } + + /** + * 添加食材 + */ + private fun addFood() { + FoodSearchDialog().show(activity = this, callback = foodSelectCallback) } private fun openSubmitPage() { @@ -301,12 +315,15 @@ class PrepareCookActivity : BaseActivity() { private val dishPartAdapter by lazy { DishPartAdapter(list).apply { setOnItemClickListener { _, _, positon -> - onItemClick(positon) + onFoodItemClick(positon) } } } - private fun onItemClick(positon: Int) { + /** + * 菜品列表item点击 + */ + private fun onFoodItemClick(positon: Int) { this@PrepareCookActivity.clickIndex = positon list[clickIndex].let { it -> binding.tvDishShowName.run { @@ -349,6 +366,9 @@ class PrepareCookActivity : BaseActivity() { private var clickIndex = -1 + /** + * RecyclerView初始化 + */ private fun initRecyclerView() { binding.rvDishPartList.run { layoutManager = @@ -417,6 +437,9 @@ class PrepareCookActivity : BaseActivity() { super.onBackPressed() } + /** + * 未保存数据提醒 + */ private fun saveDataRemindDialog() { val remindBinding = LayoutFoodRemindBinding.inflate(layoutInflater) remindBinding.tvDialogTitle.text = "温馨提示" @@ -434,6 +457,9 @@ class PrepareCookActivity : BaseActivity() { }.show() } + /** + * 拍照成功回调 + */ private val cameraSuccessCallback: (Uri) -> Unit = { uri -> Log.d(TAG, "takePhoto success") lifecycleScope.launch { @@ -457,11 +483,19 @@ class PrepareCookActivity : BaseActivity() { } } + /** + * 拍照失败回调 + */ private val cameraFailureCallback: (String) -> Unit = { errMsg -> Log.d(TAG, "takePhoto failure") isTakingPhoto.set(false) + toast(errMsg) } + /** + * 调用接口查询识别到的菜品 + * @param list 食材列表 + */ private fun queryFood(list: List) { Log.d(TAG, "takePhoto queryFood, list=${list.toString()}") //调用接口成功,返回食材列表设置isTakingPhoto.set(false),暂时写死数据