diff --git a/app/src/main/java/com/shuwei/dish/match/base/GlobalData.kt b/app/src/main/java/com/shuwei/dish/match/base/GlobalData.kt index 5c523fb..5a76d89 100644 --- a/app/src/main/java/com/shuwei/dish/match/base/GlobalData.kt +++ b/app/src/main/java/com/shuwei/dish/match/base/GlobalData.kt @@ -14,7 +14,7 @@ object GlobalData { * 具体业务 BaseUrl */ const val TEST_BASE_URL = "http://192.168.1.201:14801" - const val UAT_BASE_URL = "https://dev.yixiong-tech.com:8081" + const val UAT_BASE_URL = "https://dev.yixiong-tech.com:8083" const val PROD_BASE_URL = "https://api.dm.yixiong-tech.com:8443" /** * 设备id @@ -37,4 +37,5 @@ object GlobalKey { const val KEY_TOKEN = "tokenKey" const val KEY_USER_INFO = "userInfoKey" const val KEY_USER_NAME = "userNameKey" + const val KEY_BASE_URL = "baseUrl" } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/dish/match/db/DbViewModel.kt b/app/src/main/java/com/shuwei/dish/match/db/DbViewModel.kt index 5c56771..a2702a7 100644 --- a/app/src/main/java/com/shuwei/dish/match/db/DbViewModel.kt +++ b/app/src/main/java/com/shuwei/dish/match/db/DbViewModel.kt @@ -48,6 +48,16 @@ class DbViewModel : ViewModel() { } } + /** + * 直接返回本地烹饪中数据,供需要串行等待结果的场景使用(如先查库再发网络请求) + */ + suspend fun getCookFoodListDirect( + cookMode: Int, + dinnerType: String = "0" + ): MutableList? { + return rep.getCookFoodList(cookMode, dinnerType) + } + suspend fun countCookFood(cookMode: Int): Int { return rep.countCookFood(cookMode) } diff --git a/app/src/main/java/com/shuwei/dish/match/dialog/EnvSwitchDialog.kt b/app/src/main/java/com/shuwei/dish/match/dialog/EnvSwitchDialog.kt index 60e39ce..2bb726c 100644 --- a/app/src/main/java/com/shuwei/dish/match/dialog/EnvSwitchDialog.kt +++ b/app/src/main/java/com/shuwei/dish/match/dialog/EnvSwitchDialog.kt @@ -1,70 +1,69 @@ -package com.sw.inbound.dialog +package com.shuwei.dish.match.dialog import android.content.Context import android.view.LayoutInflater import android.view.View -import android.view.WindowManager -import com.sw.inbound.GlobalData -import com.sw.inbound.GlobalKey -import com.sw.inbound.databinding.DialogEnvSwitchBinding -import com.sw.inbound.utils.SPUtil -import com.sw.inbound.utils.ext.dp -import com.sw.inbound.utils.ext.toast +import com.shuwei.dish.match.base.GlobalData +import com.shuwei.dish.match.base.GlobalKey +import com.shuwei.dish.match.databinding.DialogEnvSwitchContentBinding +import com.shuwei.dish.match.utils.SpTool +import com.shuwei.dish.match.utils.ext.toast /** * 环境切换弹窗 * - * 提供 TEST / UAT / PROD 三套环境的切换功能, - * 初始化时自动根据 [GlobalData.appBaseUrl] 选中当前环境, - * 确认后更新 [GlobalData.appBaseUrl] 并通过 [onEnvChanged] 回调通知外部。 + * 基于 [CommonDialog] 实现,通过 addContentView 注入 RadioGroup 内容区。 + * 提供 TEST / UAT / PROD 三套环境的切换功能,初始化时自动根据 + * [GlobalData.appBaseUrl] 选中当前环境,确认后更新 [GlobalData.appBaseUrl] + * 并通过 [onEnvChanged] 回调通知外部。 * - * @param context 上下文 - * @param onEnvChanged 确认切换后的回调,参数为新的 baseUrl + * @param context 上下文 + * @param onEnvChanged 确认切换后的回调,参数为新的 baseUrl */ class EnvSwitchDialog( context: Context, private val onEnvChanged: (newBaseUrl: String) -> Unit = {} -) : BaseDialog( - context, - defWidth = 600.dp, - defHeight = WindowManager.LayoutParams.WRAP_CONTENT ) { - private lateinit var binding: DialogEnvSwitchBinding + private val contentBinding = DialogEnvSwitchContentBinding.inflate(LayoutInflater.from(context)) - override fun getRootView(): View { - binding = DialogEnvSwitchBinding.inflate(LayoutInflater.from(context)) - return binding.root - } - - override fun initView() { - // 根据当前 appBaseUrl 预选对应 RadioButton,不匹配则不选 - when (GlobalData.appBaseUrl) { - GlobalData.TEST_BASE_URL -> binding.rbTest.isChecked = true - GlobalData.UAT_BASE_URL -> binding.rbUat.isChecked = true - GlobalData.PROD_BASE_URL -> binding.rbProd.isChecked = true + private val dialog = CommonDialog(context) + .setTitle("切换环境") + .addContentView(contentBinding.root) { tvContent -> + // 内容区已由 RadioGroup 承载,隐藏默认文本 + tvContent.visibility = View.GONE } - - // 取消按钮 - binding.btnCancel.setOnClickListener { dismiss() } - - // 确认按钮 - binding.btnConfirm.setOnClickListener { - // 未选中任何选项时提示用户 - if (binding.rgEnv.checkedRadioButtonId == -1) { + .setNegativeButton("取消") + .setPositiveButtonInterceptable("确认") { + // 未选中任何选项时提示并阻止关闭 + if (contentBinding.rgEnv.checkedRadioButtonId == -1) { context.toast("请选择环境") - return@setOnClickListener + return@setPositiveButtonInterceptable false } - val newUrl = when (binding.rgEnv.checkedRadioButtonId) { - binding.rbTest.id -> GlobalData.TEST_BASE_URL - binding.rbUat.id -> GlobalData.UAT_BASE_URL - binding.rbProd.id -> GlobalData.PROD_BASE_URL - else -> return@setOnClickListener + val newUrl = when (contentBinding.rgEnv.checkedRadioButtonId) { + contentBinding.rbTest.id -> GlobalData.TEST_BASE_URL + contentBinding.rbUat.id -> GlobalData.UAT_BASE_URL + contentBinding.rbProd.id -> GlobalData.PROD_BASE_URL + else -> return@setPositiveButtonInterceptable false } GlobalData.appBaseUrl = newUrl - SPUtil.getInstance().put(GlobalKey.KEY_BASE_URL, newUrl) + SpTool.put(GlobalKey.KEY_BASE_URL, newUrl) onEnvChanged(newUrl) - dismiss() + true + } + + init { + // 根据当前 appBaseUrl 预选对应 RadioButton + when (GlobalData.appBaseUrl) { + GlobalData.TEST_BASE_URL -> contentBinding.rbTest.isChecked = true + GlobalData.UAT_BASE_URL -> contentBinding.rbUat.isChecked = true + GlobalData.PROD_BASE_URL -> contentBinding.rbProd.isChecked = true } } + + /** 显示弹窗 */ + fun show() = dialog.show() + + /** 关闭弹窗 */ + fun dismiss() = dialog.dismiss() } diff --git a/app/src/main/java/com/shuwei/dish/match/ui/FoodRecognizeActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/FoodRecognizeActivity.kt index 6983e00..165aa88 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/FoodRecognizeActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/FoodRecognizeActivity.kt @@ -117,6 +117,9 @@ class FoodRecognizeActivity : BaseActivity() { /** 食材搜索弹窗,持有引用防止重复打开 */ private var foodSearchDialog: FoodSearchDialog? = null + /** 数据不稳定提示弹窗,持有引用通过 isShowing 防止重复弹出 */ + private var unstableDialog: CommonDialog? = null + /** 通过name查询IdNameScore */ private val nameScoreMap = mutableMapOf() @@ -506,12 +509,15 @@ class FoodRecognizeActivity : BaseActivity() { // 被动关闭:从窗口取稳定值 val stableWeight = getStableWeightFromWindow() if (stableWeight == null) { - // 数据不稳定,不关闭页面,弹窗提示 - CommonDialog(this) - .setTitle("提示") - .setContent("数据不稳定,请重新放置食材后再取走") - .setPositiveButton("确认") - .show() + // 数据不稳定,不关闭页面,弹窗提示(通过 isShowing 防止重复弹出) + if (unstableDialog?.isShowing == true) return + if (unstableDialog == null) { + unstableDialog = CommonDialog(this) + .setTitle("提示") + .setContent("数据不稳定,请重新放置食材后再取走") + .setPositiveButton("确认") + } + unstableDialog?.show() return } item.useWeight = stableWeight diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SettingActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SettingActivity.kt index c55bb9e..c4136d8 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SettingActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SettingActivity.kt @@ -12,6 +12,7 @@ import androidx.core.content.ContextCompat import com.shuwei.dish.match.base.BaseActivity import com.shuwei.dish.match.databinding.ActivitySettingBinding import com.shuwei.dish.match.dialog.CommonDialog +import com.shuwei.dish.match.dialog.EnvSwitchDialog import com.shuwei.dish.match.scale.ScaleServiceManager import com.shuwei.dish.match.utils.SpTool import com.shuwei.dish.match.utils.ext.clickWithDebounce @@ -50,6 +51,7 @@ class SettingActivity : BaseActivity() { binding.llDbInspect.visible() binding.llScaleObserve.visible() binding.llClearData.visible() + binding.llEnvSwitch.visible() } }) @@ -88,6 +90,9 @@ class SettingActivity : BaseActivity() { binding.llClearData.clickWithDebounce { showClearDataDialog() } + binding.llEnvSwitch.clickWithDebounce { + EnvSwitchDialog(this).show() + } } /** diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index cd6417c..824d84e 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -173,6 +173,38 @@ tools:ignore="ContentDescription" /> + + + + + + + + + + + + + + + + +