Browse Source

5037 空炸问题 更新SDK,添加图片

zhangshenjie 1 year ago
parent
commit
ad54f25ee6
94 changed files with 3017 additions and 243 deletions
  1. 1 1
      BusinessAirFryer/src/main/assets/config_000.json
  2. 15 15
      BusinessAirFryer/src/main/assets/config_011.json
  3. 16 15
      BusinessAirFryer/src/main/assets/lang_config_030.json
  4. 15 5
      BusinessAirFryer/src/main/assets/tuya_config.json
  5. 6 4
      BusinessAirFryer/src/main/java/com/develop/airfryer/ui/DevModeView.kt
  6. 1 1
      BusinessAuth/src/main/java/com/develop/auth/ui/MemberForgotFragment.kt
  7. 1 1
      BusinessAuth/src/main/java/com/develop/auth/ui/MemberLoginFragment.kt
  8. 62 0
      BusinessCommon/src/main/java/com/develop/common/data_repo/db/DataFactory.kt
  9. 2 0
      BusinessCommon/src/main/java/com/develop/common/data_repo/db/dao/FoodRecipeDao.kt
  10. 91 0
      BusinessCommon/src/main/java/com/develop/common/dialog/CookStepMsgDialog.kt
  11. 69 1
      BusinessCommon/src/main/java/com/develop/common/food_sdk/GlobalDevEvent.kt
  12. 1 0
      BusinessCommon/src/main/java/com/develop/common/tag/CommonTag.kt
  13. 73 4
      BusinessCommon/src/main/java/com/develop/common/ui/CommonBindingActivity.kt
  14. 4 2
      BusinessCommon/src/main/java/com/develop/common/utils/AppVersionUtil.kt
  15. 4 2
      BusinessCommon/src/main/java/com/develop/common/utils/ConfigUtils.kt
  16. 4 1
      BusinessCommon/src/main/java/com/develop/common/widget/HomeFilterSortSearchView.kt
  17. 1 1
      BusinessCommon/src/main/java/com/develop/common/widget/HomeFunctionTopBar.kt
  18. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/af_a_chicken_wing.webp
  19. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/af_a_chicken_wing_bg.webp
  20. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/cook_iv_air_fryer.gif
  21. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/cook_iv_soup.gif
  22. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/entrance_011a_5037_bg_1.png
  23. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/entrance_011a_5037_bg_2.png
  24. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/entrance_011a_5037_bg_3.png
  25. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/entrance_011a_5037_bg_4.png
  26. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_boil_water.webp
  27. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_boil_water_bg.jpg
  28. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_boil_water_bg.webp
  29. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_chop.webp
  30. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_chop_bg.webp
  31. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_food_processor.webp
  32. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_food_processor_bg.webp
  33. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_knead_dough.webp
  34. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_knead_dough_bg.webp
  35. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_slow_cook.webp
  36. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_slow_cook_bg.webp
  37. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_sovs_vide.webp
  38. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_sovs_vide_bg.webp
  39. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_steam.webp
  40. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_steam_bg.webp
  41. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_turbo.webp
  42. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_turbo_bg.webp
  43. BIN
      BusinessCommon/src/main/res/drawable-xxxhdpi/splash_011a_5037_logo.png
  44. 6 1
      BusinessCommon/src/main/res/layout/cook_card_view.xml
  45. 67 0
      BusinessCommon/src/main/res/layout/dialog_cook_step_msg.xml
  46. 2 3
      BusinessCommon/src/main/res/layout/pop_eggs_view.xml
  47. 29 19
      BusinessCommon/src/main/res/layout/wifi_content_view.xml
  48. 15 0
      BusinessCommon/src/main/res/values-cz/strings.xml
  49. 14 0
      BusinessCommon/src/main/res/values-de/strings.xml
  50. 14 2
      BusinessCommon/src/main/res/values-en/strings.xml
  51. 13 1
      BusinessCommon/src/main/res/values-es/strings.xml
  52. 16 0
      BusinessCommon/src/main/res/values-fr/strings.xml
  53. 15 0
      BusinessCommon/src/main/res/values-hu/strings.xml
  54. 14 0
      BusinessCommon/src/main/res/values-it/strings.xml
  55. 15 1
      BusinessCommon/src/main/res/values-ja/strings.xml
  56. 26 8
      BusinessCommon/src/main/res/values-pl/strings.xml
  57. 14 0
      BusinessCommon/src/main/res/values-pt/strings.xml
  58. 14 0
      BusinessCommon/src/main/res/values-sk/strings.xml
  59. 13 1
      BusinessCommon/src/main/res/values-uk/strings.xml
  60. 14 0
      BusinessCommon/src/main/res/values-zh-rCN/strings.xml
  61. 4 0
      BusinessCommon/src/main/res/values/strings.xml
  62. 10 1
      BusinessCommon/src/main/res/values/themes.xml
  63. 1 1
      BusinessMain/src/main/java/com/develop/main/ui/HomeActivity.kt
  64. 23 2
      BusinessMain/src/main/java/com/develop/main/ui/ModeEntranceActivity.kt
  65. 78 5
      BusinessMain/src/main/java/com/develop/main/ui/ModesFragment.kt
  66. 3 0
      BusinessSetting/src/main/java/com/develop/setting/ui/PrivacyPolicyActivity.kt
  67. 69 31
      BusinessSetting/src/main/java/com/develop/setting/ui/RestoreActivity.kt
  68. 6 7
      BusinessSetting/src/main/java/com/develop/setting/ui/SettingMainActivity.kt
  69. 9 10
      BusinessSetting/src/main/java/com/develop/setting/ui/WifiListActivity.kt
  70. 30 46
      BusinessStep/src/main/java/com/develop/step/ui/ModesDetailActivity.kt
  71. 138 21
      BusinessStep/src/main/java/com/develop/step/ui/cook_step/CookStepActivity.kt
  72. 35 8
      BusinessStep/src/main/java/com/develop/step/ui/cook_step/CookStepBaseActivity.kt
  73. 20 1
      BusinessStep/src/main/res/layout/activity_cook_step_base.xml
  74. 18 9
      BusinessStep/src/main/res/layout/item_cook_controller.xml
  75. 26 3
      app/build.gradle
  76. 213 0
      app/src/main/assets/help/PL/help-white-a.html
  77. 205 0
      app/src/main/assets/help/PL/help-white.html
  78. 205 0
      app/src/main/assets/help/PL/help.html
  79. 68 0
      app/src/main/assets/help/PL/privacy-a.html
  80. 68 0
      app/src/main/assets/help/PL/privacy.html
  81. 68 0
      app/src/main/assets/help/PL/privacy_night-a.html
  82. 68 0
      app/src/main/assets/help/PL/privacy_night.html
  83. 213 0
      app/src/main/assets/help/UK/help-white-a.html
  84. 205 0
      app/src/main/assets/help/UK/help-white.html
  85. 205 0
      app/src/main/assets/help/UK/help.html
  86. 68 0
      app/src/main/assets/help/UK/privacy-a.html
  87. 68 0
      app/src/main/assets/help/UK/privacy.html
  88. 68 0
      app/src/main/assets/help/UK/privacy_night-a.html
  89. 68 0
      app/src/main/assets/help/UK/privacy_night.html
  90. 1 0
      app/src/main/java/com/develop/foodcooking/FoodCookingApp.kt
  91. 30 3
      libBase/src/main/java/com/develop/base/ext/GlobaExt.kt
  92. 52 6
      libBase/src/main/java/com/develop/base/manager/WifiHelp.kt
  93. 7 0
      libBase/src/main/java/com/develop/base/mvvm/BaseFragment.kt
  94. BIN
      libThirdPart/libs/cofar-cooking-device-sdk-0.0.1-SNAPSHOT.jar

+ 1 - 1
BusinessAirFryer/src/main/assets/config_000.json

@@ -15,7 +15,7 @@
       "bg": "cm_icon_cook_eggs_bg",
       "icon": "cm_icon_cook_eggs",
       "devMode": "SOUP",
-      "listShow": true
+      "listShow": false
     },
     {
       "type": "WIGHT",

+ 15 - 15
BusinessAirFryer/src/main/assets/config_011.json

@@ -111,10 +111,10 @@
     {
       "type": "AF_AIR_FRYER",
       "name": "af_air_fryer",
-       "bg": "af_air_fryer_bg",
+      "bg": "af_air_fryer_bg",
       "icon": "af_air_fryer",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_BAKE",
@@ -122,7 +122,7 @@
       "bg": "af_bake_bg",
       "icon": "af_bake",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_DRUMSTICKS",
@@ -130,7 +130,7 @@
       "bg": "af_drumsticks_bg",
       "icon": "af_drumsticks",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_EGG_TART",
@@ -138,7 +138,7 @@
       "bg": "af_egg_tart_bg",
       "icon": "af_egg_tart",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_PIZZA",
@@ -146,7 +146,7 @@
       "bg": "af_pizza_bg",
       "icon": "af_pizza",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_DEHYDRATE",
@@ -154,7 +154,7 @@
       "bg": "af_dehydrate_bg",
       "icon": "af_dehydrate",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_REHEAT",
@@ -162,15 +162,15 @@
       "bg": "af_reheat_bg",
       "icon": "af_reheat",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_CHICKEN_WING",
       "name": "af_chicken_wing",
-      "bg": "af_chicken_wing_bg",
-      "icon": "af_chicken_wing",
+      "bg": "af_a_chicken_wing_bg",
+      "icon": "af_a_chicken_wing",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_STEAK",
@@ -178,7 +178,7 @@
       "bg": "af_steak_bg",
       "icon": "af_steak",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_SEA_FOOD",
@@ -186,7 +186,7 @@
       "bg": "af_sea_food_bg",
       "icon": "af_sea_food",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_VEGETABLE",
@@ -194,7 +194,7 @@
       "bg": "af_vegetable_bg",
       "icon": "af_vegetable",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "AF_MUTTON_CHOP",
@@ -202,7 +202,7 @@
       "bg": "af_mutton_chop_bg",
       "icon": "af_mutton_chop",
       "devMode": "AIR_FRYER",
-      "listShow": false
+      "listShow": true
     }
   ]
 }

+ 16 - 15
BusinessAirFryer/src/main/assets/lang_config_030.json

@@ -1,5 +1,12 @@
 {
   "langs": [
+    {
+      "name": "Czech(捷克语)",
+      "value": "CZ",
+      "icon": "icon_lang_cz",
+      "showName": "Čeština",
+      "show": true
+    },
     {
       "name": "Polish(波兰语)",
       "value": "PL",
@@ -105,13 +112,6 @@
       "showName": "Dansk",
       "show": false
     },
-    {
-      "name": "Czech(捷克语)",
-      "value": "CZ",
-      "icon": "icon_lang_cz",
-      "showName": "Čeština",
-      "show": false
-    },
     {
       "name": "Estonki(爱沙尼亚语)",
       "value": "EE",
@@ -119,12 +119,20 @@
       "showName": "Eesti keel",
       "show": false
     },
+    ,
+    {
+      "name": "Hungarian(匈牙利语)",
+      "value": "HU",
+      "icon": "icon_lang_hu",
+      "showName": "magyar nyelv",
+      "show": true
+    },
     {
       "name": "Slovak(斯洛伐克语)",
       "value": "SK",
       "icon": "icon_lang_sk",
       "showName": "Slovenčina",
-      "show": false
+      "show": true
     },
     {
       "name": "Ukrainian(乌克兰语)",
@@ -174,13 +182,6 @@
       "icon": "icon_lang_ja",
       "showName": "日本語",
       "show": false
-    },
-    {
-      "name": "Hungarian(匈牙利语)",
-      "value": "HU",
-      "icon": "icon_lang_hu",
-      "showName": "magyar nyelv",
-      "show": false
     }
   ]
 }

+ 15 - 5
BusinessAirFryer/src/main/assets/tuya_config.json

@@ -155,6 +155,16 @@
       "uid": "uuideb52df92e83c3af1",
       "ak": "OnWBbmXp4TCIotAXJBie8dCPr0tWNyoK"
     },
+    "000A20030020123010190002": {
+      "pid": "wy8ogbhchnzkmrup",
+      "uid": "uuid4aa3c815f37c5df1",
+      "ak": "f8NzPJFi1FevSq5uQ2XkkdLGwdNg9Z8O"
+    },
+    "000A20030020123010190003": {
+      "pid": "wy8ogbhchnzkmrup",
+      "uid": "uuid629e0a673a5844ac",
+      "ak": "qrXqGgKZwhGdt31e8XWnuZ0MHp1t3eJk"
+    },
     "000A10590020123010190001": {
       "pid": "wy8ogbhchnzkmrup",
       "uid": "uuid903f6fec79d1eb6c",
@@ -200,11 +210,6 @@
       "uid": "uuid281907ce32c73fc3",
       "ak": "945g1nFkY7nUdZBaSvKOecdy6hFf3mbF"
     },
-    "011A50370020123010190001": {
-      "pid": "o0qxz32qigce6kpk",
-      "uid": "uuid6031dc53e68fcf7c",
-      "ak": "n2lSnzW5JzShsqHlwgNeVZwAKKu66Vvo"
-    },
     "000A50370020123010190007": {
       "pid": "as3ox9yav2atavax",
       "uid": "uuide83b2f327a3a4511",
@@ -260,6 +265,11 @@
       "uid": "uuidca3e4bd9890267d9",
       "ak": "wzQfUANv5YAkNwl3AUNtFvoIm4GIVFou"
     },
+    "011A50370020123010190001": {
+      "pid": "o0qxz32qigce6kpk",
+      "uid": "uuid6031dc53e68fcf7c",
+      "ak": "n2lSnzW5JzShsqHlwgNeVZwAKKu66Vvo"
+    },
     "011A50370020123010190002": {
       "pid": "o0qxz32qigce6kpk",
       "uid": "uuid1ed716f65a8fc8c6",

+ 6 - 4
BusinessAirFryer/src/main/java/com/develop/airfryer/ui/DevModeView.kt

@@ -58,13 +58,15 @@ class DevModeView(context: Context, attrs: AttributeSet) : ConstraintLayout(cont
 
     @Subscribe
     fun onDevModeChange(event: DevCommonEvent) {
+        //
         if (CommonEventTypes.DEV_MODE_CHANGE == event.type) {
             mode = CofarSDK.devInfo().devMode;
             updateUI();
-            val intent =
-                Intent(this.context, Class.forName("com.develop.main.ui.ModeEntranceActivity"))
-            intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
-            this.context.startActivity(intent)
+
+//            val intent =
+//                Intent(this.context, Class.forName("com.develop.main.ui.ModeEntranceActivity"))
+//            intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
+//            this.context.startActivity(intent)
         }
 
     }

+ 1 - 1
BusinessAuth/src/main/java/com/develop/auth/ui/MemberForgotFragment.kt

@@ -36,7 +36,7 @@ class MemberForgotFragment : CommonBVMFragment<FragmentMemberForgotBinding, Memb
         binding.tvSendEmail.setOnClickListener {
             val email = binding.etEmailId.text.toString()
             if (email.isEmpty()) {
-                showToast(globalApp().getString(com.develop.common.R.string.keep_cooking_in_the_background))
+                showToast(globalApp().getString(com.develop.common.R.string.send_no_email))
                 return@setOnClickListener
             }
             showPlainDialog()

+ 1 - 1
BusinessAuth/src/main/java/com/develop/auth/ui/MemberLoginFragment.kt

@@ -41,7 +41,7 @@ class MemberLoginFragment : CommonBVMFragment<FragmentMemberLoginBinding, Member
             )
         }
         //2024.01.04 032客户需要删除注册功能
-        if (getSN().startsWith("032D")){
+        if (getSN().startsWith("032D")||getSN().startsWith("011A")){
             binding.tvRegister.visibility = View.INVISIBLE
         }
         binding.tvRegister.setOnClickListener {

+ 62 - 0
BusinessCommon/src/main/java/com/develop/common/data_repo/db/DataFactory.kt

@@ -246,6 +246,50 @@ object DataFactory {
         }
         return result
     }
+
+    fun genSetting011AModesList(resource: Resources): MutableList<SettingModel> {
+        val result = mutableListOf<SettingModel>()
+        val resIdList = mutableListOf(
+            R.drawable.ic_setting_language,
+            R.drawable.ic_setting_wifi,
+//            R.drawable.ic_setting_voice,
+            R.drawable.ic_setting_brightness,
+//            R.drawable.ic_setting_user,
+//            R.drawable.ic_setting_folder,
+            R.drawable.ic_setting_reset,
+            R.drawable.ic_setting_about,
+        )
+
+        val nameList = mutableListOf(
+            resource.getString(R.string.language), resource.getString(R.string.wifi),
+//            resource.getString(R.string.sound),
+            resource.getString(R.string.brightness),
+//            resource.getString(R.string.user_account),
+//            resource.getString(R.string.storage),
+            resource.getString(R.string.reset), resource.getString(R.string.about)
+
+        )
+        val settingTypeList = mutableListOf(
+            SettingType.LANGUAGE, SettingType.WIFI,
+//            SettingType.SOUND,
+            SettingType.BRIGHTNESS,
+//            SettingType.USER_ACCOUNT,
+//            SettingType.STORAGE,
+            SettingType.RESTORE_FACTORY_SETTINGS, SettingType.ABOUT
+        )
+
+        var tuyaConfig =  ConfigUtils.loadTuyaConfig()
+        if(tuyaConfig != null){
+            settingTypeList.add(SettingType.TUYA)
+            nameList.add(resource.getString(R.string.tuya))
+            resIdList.add(R.drawable.ic_setting_tuya)
+        }
+
+        for (i in resIdList.indices) {
+            result.add(SettingModel(resIdList[i], nameList[i], settingTypeList[i]))
+        }
+        return result
+    }
     fun genSetting010DModesList(resource: Resources): MutableList<SettingModel> {
         val result = mutableListOf<SettingModel>()
         val resIdList = mutableListOf(
@@ -500,6 +544,12 @@ object DataFactory {
         R.drawable.entrance_011a_bg_3,
         R.drawable.entrance_011a_bg_4
     )
+    private var bg011A5037ResIds = arrayListOf<Int>(
+        R.drawable.entrance_011a_5037_bg_1,
+        R.drawable.entrance_011a_5037_bg_2,
+        R.drawable.entrance_011a_5037_bg_3,
+        R.drawable.entrance_011a_5037_bg_4
+    )
 
     private var bg054AResIds = arrayListOf<Int>(
         R.drawable.entrance_054a_bg_1,
@@ -630,6 +680,18 @@ object DataFactory {
         }
         return dataList
     }
+    //当时没弄清楚需求,弄多一个了5037,(以为客户要区分1039 5037) 后面主页面用同一个,所以前面的没有删除
+    fun get011A5037EntranceData(): MutableList<EntranceData> {
+        val dataList = mutableListOf<EntranceData>()
+        for (i in iconResIds.indices) {
+            dataList.add(
+                EntranceData(
+                    bg011A5037ResIds[i], iconResIds[i], titleStrIds[i], title2StrIds[i], typeList[i]
+                )
+            )
+        }
+        return dataList
+    }
     fun get054AEntranceData(): MutableList<EntranceData> {
         val dataList = mutableListOf<EntranceData>()
         for (i in iconResIds.indices) {

+ 2 - 0
BusinessCommon/src/main/java/com/develop/common/data_repo/db/dao/FoodRecipeDao.kt

@@ -133,6 +133,8 @@ interface FoodRecipeDao {
 
     @Query("delete from cc_dev_recipe  where number=:recipeNumber")
     fun deleteRecipe(recipeNumber: String)
+    @Query("delete from cc_dev_recipe  where number=:number and lang = :language")
+    fun deleteNumAndLangRecipe(number: String?,  language: String? = MMkvUtils.getString(CURRENT_LANGUAGE) ?: "EN")
 
     /**
      * =======================INSERT METHODS=============================

+ 91 - 0
BusinessCommon/src/main/java/com/develop/common/dialog/CookStepMsgDialog.kt

@@ -0,0 +1,91 @@
+package com.develop.common.dialog
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.RelativeLayout
+import com.bumptech.glide.Glide
+import com.bumptech.glide.load.engine.DiskCacheStrategy
+import com.develop.base.ext.load
+import com.develop.base.ext.loadGif
+import com.develop.base.mvvm.FullScreenTransparentDialog
+import com.develop.common.R
+import com.develop.common.databinding.DialogCookStepMsgBinding
+
+class CookStepMsgDialog(
+) : FullScreenTransparentDialog() {
+
+    lateinit var binding: DialogCookStepMsgBinding
+
+    var title = ""
+    var cancelStr = ""
+    var confirmStr = ""
+    var showConfirm = true
+    var showCancel = true
+    var workMode = ""
+    var onDialogClickListener: OnDialogClickListener? = null
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+    ): View {
+        binding = DialogCookStepMsgBinding.inflate(
+            inflater, container, false
+        )
+        binding.tvYes.setOnClickListener {
+            onDialogClickListener?.onConfirm()
+            removeSelf()
+        }
+        binding.tvCancel.setOnClickListener {
+            onDialogClickListener?.onCancel()
+            removeSelf()
+        }
+
+        //汤锅
+//        if (workMode == "SOUP") {
+//            binding.ivGif.loadGif(R.drawable.cook_iv_soup)
+//
+//        } else {
+//            //空炸
+//            binding.ivGif.loadGif(R.drawable.cook_iv_air_fryer)
+//        }
+
+        binding.tvTitle.text = title
+        if (cancelStr.isNotEmpty()) {
+            binding.tvCancel.text = cancelStr
+        }
+        if (confirmStr.isNotEmpty()) {
+            binding.tvYes.text = confirmStr
+        }
+
+        //只显示确认按钮
+        if (showConfirm && !showCancel) {
+            binding.tvCancel.visibility = View.GONE;
+            binding.tvYes.visibility = View.VISIBLE;
+            val layoutParams = binding.tvYes.layoutParams as RelativeLayout.LayoutParams;
+            layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL)
+            binding.tvCancel.layoutParams = layoutParams
+        }
+
+        if (!showConfirm && showCancel) {
+            binding.tvYes.visibility = View.GONE;
+            binding.tvCancel.visibility = View.VISIBLE;
+            val layoutParams = binding.tvCancel.layoutParams as RelativeLayout.LayoutParams;
+            layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL)
+            binding.tvCancel.layoutParams = layoutParams
+        }
+
+
+
+        return binding.root
+    }
+
+    fun onConfirmClick() {
+        binding.tvYes.callOnClick()
+    }
+
+
+    interface OnDialogClickListener {
+        fun onConfirm()
+        fun onCancel()
+    }
+}

+ 69 - 1
BusinessCommon/src/main/java/com/develop/common/food_sdk/GlobalDevEvent.kt

@@ -5,6 +5,8 @@ import android.content.res.Resources
 import android.os.PowerManager
 import android.util.Log
 import android.view.WindowManager
+import androidx.fragment.app.DialogFragment
+import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentManager
 import com.develop.base.ext.globalApp
 import com.develop.base.ext.globalRes
@@ -13,6 +15,7 @@ import com.develop.base.util.ThreadUtils
 import com.develop.base.util.TopResumedAtyHolder
 import com.develop.common.R
 import com.develop.common.dialog.CancelConfirmDialog
+import com.develop.common.dialog.CookStepMsgDialog
 import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevStatus
 import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevPromptEvent
 import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevStatusEvent
@@ -33,7 +36,9 @@ object GlobalDevEvent {
     private val devMsgDialog by lazy {
         CancelConfirmDialog()
     }
-
+    public val msgDialog by lazy {
+        CookStepMsgDialog()
+    }
     /**处理设备合盖问题*/
     var ledLock = false;
     fun globalCoverEvent(event: DevStatusEvent, pm: PowerManager) {
@@ -226,6 +231,69 @@ object GlobalDevEvent {
         }
     }
 
+    /**处理设备提示弹窗*/
+    fun msgDilaog(
+        fragmentManager: FragmentManager,
+        titles:String,confirmStrs:String,workModes :String?) {
+        ThreadUtils.runOnMainThread {
+            msgDialog.onDialogClickListener =
+                object : CookStepMsgDialog.OnDialogClickListener {
+                    override fun onConfirm() {
+                    }
+
+                    override fun onCancel() {
+                    }
+
+                }
+            msgDialog.apply {
+                showCancel = false
+                showConfirm = true
+                cancelStr = ""
+                confirmStr = confirmStrs
+                title = titles
+                workMode = workModes ?:"SOUP"
+
+            }
+            msgDialog.showDialog(fragmentManager, "msgDialog")
+        }
+    }
+    private fun hasDialogFragment(fragmentManager: FragmentManager): Boolean {
+        if (fragmentManager.fragments.find {
+                it is DialogFragment
+            } != null) {
+            // 存在弹框
+            return true
+        }
+
+        if (fragmentManager.fragments.find {
+                // 子片段管理器中含有弹框
+                fragmentHasDialogFragment(it)
+            } != null) {
+            // 子Fragment上含有弹框
+            return true
+        }
+
+        return false
+    }
+
+    /**
+     * 遍历查询fragment上是否有dialogFragment
+     */
+    private fun fragmentHasDialogFragment(fragment: Fragment): Boolean {
+        val childFragments = fragment.childFragmentManager.fragments
+        if (childFragments.isEmpty()) {
+            return false
+        }
+        childFragments.forEach {
+            if (it is DialogFragment) {
+                return true
+            }
+            if (fragmentHasDialogFragment(it)) {
+                return true
+            }
+        }
+        return false
+    }
 
     //退出称重校准
     private fun exitWeightAlign() {

+ 1 - 0
BusinessCommon/src/main/java/com/develop/common/tag/CommonTag.kt

@@ -33,6 +33,7 @@ const val CURRENT_LANGUAGE = "CURRENT_LANGUAGE"
 const val API_TOKEN = "API_TOKEN"
 const val LOGIN_TAG = "LOGIN_TAG"
 const val CURRENT_USER_ID_TAG = "CURRENT_USER_ID"
+const val MODEL = "MODEL"
 
 const val EN = "EN"
 const val ZH = "ZH"

+ 73 - 4
BusinessCommon/src/main/java/com/develop/common/ui/CommonBindingActivity.kt

@@ -14,6 +14,8 @@ import android.view.View
 import android.view.inputmethod.InputMethodManager
 import android.widget.EditText
 import androidx.viewbinding.ViewBinding
+import com.develop.base.ext.getModelNum
+import com.develop.base.ext.getSN
 import com.develop.base.ext.navigateTo
 import com.develop.base.ext.toJson
 import com.develop.base.mvvm.BaseBindingActivity
@@ -51,7 +53,7 @@ abstract class CommonBindingActivity<T : ViewBinding> : BaseBindingActivity<T>()
 
 
     protected var hasShowScreenSaver = false
-
+    private var isModelNum = ""
     private val plainDialogView by lazy {
         PlainDialogView(
             this, R.layout.dialog_easy_view
@@ -72,7 +74,7 @@ abstract class CommonBindingActivity<T : ViewBinding> : BaseBindingActivity<T>()
     override fun onCreate(savedInstanceState: Bundle?) {
 
         super.onCreate(savedInstanceState)
-
+        isModelNum = getModelNum()
         screenReceiver = object : BroadcastReceiver() {
             override fun onReceive(context: Context, intent: Intent) {
                 val action = intent.action
@@ -146,7 +148,7 @@ abstract class CommonBindingActivity<T : ViewBinding> : BaseBindingActivity<T>()
     var lock = false
     var locktime: Long = 0
     override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
-        Log.d("dddddd", "拦截事件:${ev.action}(${ev.x},${ev.y}),")
+//        Log.d("dddddd", "拦截事件:${ev.action}(${ev.x},${ev.y}),")
 
         if (((System.currentTimeMillis() - locktime) < 3000)) {
             return super.dispatchTouchEvent(ev)
@@ -197,6 +199,7 @@ abstract class CommonBindingActivity<T : ViewBinding> : BaseBindingActivity<T>()
      * 因为当用户点击EditText时没必要隐藏
      */
     private fun isShouldHideInput(v: View?, event: MotionEvent): Boolean {
+        Log.d("TAG dddddd", "isShouldHideInput:${v}  event : $event  ")
         if (v != null && v is EditText) {
             val l = intArrayOf(0, 0)
             v.getLocationInWindow(l)
@@ -271,14 +274,21 @@ abstract class CommonBindingActivity<T : ViewBinding> : BaseBindingActivity<T>()
         Log.d(
             "TAG 设备返回",
             "msg=>${event.msg}==action=>${event.action}==errorCode=>${CofarSDK.devInfo().errCode}" +
-                    "==mode=>${CofarSDK.devInfo().mode.mode}"
+                    "==mode=>${CofarSDK.devInfo().mode.mode}" +
+                    "==devmodes=>${CofarSDK.devInfo().devMode}      ==potCloverType=>${CofarSDK.devInfo().potCloverType}   ==Activity==>${TopResumedAtyHolder.getCurrentActivity()?.localClassName}"
         )
 
+//        Log.d("TAG 设备返回","event :${event}")
         // 打开锅盖锅 msg=>error_pot_clover_tips==action=>show==errorCode=>10==mode=>ADAPTED_COOKING
 
         if (!this.equals(TopResumedAtyHolder.getCurrentActivity())) {
             return
         }
+
+        // 彩屏风扇不转,报错彩屏散热异常 无需弹窗
+        if (CofarSDK.devInfo().errCode.toInt() == 15){
+            return
+        }
         //所有模式程序运行结束时没有响三声蜂鸣声提示结果程序
         if (event.msg == "dev_end_of_run_tips") {
             CofarSDK.cfgBeep(0, 3)
@@ -297,6 +307,18 @@ abstract class CommonBindingActivity<T : ViewBinding> : BaseBindingActivity<T>()
         if (CofarSDK.devInfo().mode.mode == "TURBO" && event.msg == "dian_zi_cheng_tong_xin_yi_chan") {
             return
         }
+        //由于 error_pot_clover_tips 这个错误的event.confirm.callback() 的方法会重新刷新模式,会导致ModeFragment的列表重新刷新
+        //因5037需求 在模式上面无锅状态上默认显示汤锅模式古在base里面的HomeActivity 的页面 把 error_pot_clover_tips 的错误过滤掉,因为这个会切换模式
+        if (isModelNum=="5037"&&event.msg == "error_pot_clover_tips"
+            &&TopResumedAtyHolder.getCurrentActivity()?.localClassName=="com.develop.main.ui.HomeActivity"){
+            return
+        }
+
+//        //做切换锅,有些页面保存当前页面
+//        if (event.msg == "error_pot_clover_tips"&&event.action=="show"){
+//            changePotDialog(event)
+//            return
+//        }
 
         if ("hide" == event.action) {
             lastMsg = "";
@@ -389,5 +411,52 @@ abstract class CommonBindingActivity<T : ViewBinding> : BaseBindingActivity<T>()
         }
         finish()
     }
+    fun changePotDialog(event :DevPromptEvent){
+        if (lastMsg == event.msg) {
+            return
+        }
+        lastMsg = event.msg
+
+        cancelConfirmDialog.showCancel = event.isShowCancelBtn
+        cancelConfirmDialog.showConfirm = event.isShowConfirmBtn
+
+        cancelConfirmDialog.cancelStr = resources.getString(
+            resources.getIdentifier(
+                event.cancelBtnText, "string", this.packageName
+            )
+        )
+        cancelConfirmDialog.confirmStr = resources.getString(
+            resources.getIdentifier(
+                event.confirmButtonText, "string", this.packageName
+            )
+        )
+        cancelConfirmDialog.title =
+            resources.getString(resources.getIdentifier(event.msg, "string", this.packageName))
+
+        cancelConfirmDialog.showDialog(supportFragmentManager, "confirmCancelDialog")
+
+        cancelConfirmDialog.onDialogClickListener =
+            object : CancelConfirmDialog.OnDialogClickListener {
+                override fun onConfirm() {
+                    if (event.confirm != null) {
+                        event.confirm.callback();
+                    }
+
+                    confirmChange()
+                    cancelConfirmDialog.removeSelf();
+                    lastMsg = "";
+                }
+
+                override fun onCancel() {
+
+
+                    cancelConfirmDialog.removeSelf();
+                    lastMsg = "";
+                }
+
+            }
+    }
+    private  fun  confirmChange(){
 
+    }
 }

+ 4 - 2
BusinessCommon/src/main/java/com/develop/common/utils/AppVersionUtil.kt

@@ -289,14 +289,16 @@ object AppVersionUtil {
             contentData.resetAllCodes()
             FoodDataProvider.getDatabase().runInTransaction {
                 FoodDataProvider.getDatabase().recipeDao().apply {
-
+                    var recipeList  = contentData.devRecipes
                     deleteDevRecipeAccessorys(recipeNumber)
                     deleteDevRecipeCookingSteps(recipeNumber)
                     deleteDevRecipeFoods(recipeNumber)
                     deleteDevRecipeNutritions(recipeNumber)
                     deleteDevRecipeRelTags(recipeNumber)
                     deleteDevRecipePortionSizes(recipeNumber)
-                    deleteRecipe(recipeNumber)
+                    recipeList.forEach {
+                        deleteNumAndLangRecipe(it.number,it.lang)
+                    }
 
                     insertDevAccessorys(contentData.devAccessorys)
                     insertHotTags(contentData.devHotTags)

+ 4 - 2
BusinessCommon/src/main/java/com/develop/common/utils/ConfigUtils.kt

@@ -150,7 +150,8 @@ object ConfigUtils {
             }
 
             15 -> {
-                context.getString(com.develop.common.R.string.e15_errCode)
+                ""
+//                context.getString(com.develop.common.R.string.e15_errCode)
             }
 
             16 -> {
@@ -164,7 +165,8 @@ object ConfigUtils {
         return str
     }
     fun getBooleanErrCode(code: Int):Boolean{
-        return code==7||code==8||code==9||code==10||code==11||code==12||code==13||code==14||code==15||code==16
+        //客户要求 errorCode 15 (彩屏错误提示) 跳过判断
+        return code==7||code==8||code==9||code==10||code==11||code==12||code==13||code==14||code==16
     }
 
 }

+ 4 - 1
BusinessCommon/src/main/java/com/develop/common/widget/HomeFilterSortSearchView.kt

@@ -3,6 +3,7 @@ package com.develop.common.widget
 import android.app.Activity
 import android.content.Context
 import android.util.AttributeSet
+import android.util.Log
 import android.view.View
 import android.widget.RelativeLayout
 import com.blankj.utilcode.util.KeyboardUtils
@@ -70,6 +71,9 @@ class HomeFilterSortSearchView : RelativeLayout {
             binding.recipesLayout.setGone()
             onFunctionCallback?.onLocalRecipesClick()
         }
+        binding.etSearch.setOnFocusChangeListener { view, b ->
+            Log.d("TAG dddddd", " binding.etSearch :{$b}")
+        }
     }
 
     fun resetView() {
@@ -94,7 +98,6 @@ class HomeFilterSortSearchView : RelativeLayout {
         fun onInputSearch(searchContent: String)
         fun onDownloadClick()
         fun onOnlineRecipesClick()
-
         fun onLocalRecipesClick()
     }
 

+ 1 - 1
BusinessCommon/src/main/java/com/develop/common/widget/HomeFunctionTopBar.kt

@@ -51,7 +51,7 @@ class HomeFunctionTopBar : RelativeLayout, View.OnClickListener {
             params.height = dp50
             binding.ivFunction.layoutParams = params
         }
-        if (getSN().startsWith("032D")){
+        if (getSN().startsWith("032D")||getSN().startsWith("011A")){
             binding.userLayout.visibility = View.INVISIBLE
         }
     }

BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/af_a_chicken_wing.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/af_a_chicken_wing_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/cook_iv_air_fryer.gif


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/cook_iv_soup.gif


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/entrance_011a_5037_bg_1.png


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/entrance_011a_5037_bg_2.png


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/entrance_011a_5037_bg_3.png


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/entrance_011a_5037_bg_4.png


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_boil_water.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_boil_water_bg.jpg


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_boil_water_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_chop.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_chop_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_food_processor.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_food_processor_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_knead_dough.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_knead_dough_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_slow_cook.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_slow_cook_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_sovs_vide.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_sovs_vide_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_steam.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_steam_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_turbo.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/ic_a_turbo_bg.webp


BIN
BusinessCommon/src/main/res/drawable-xxxhdpi/splash_011a_5037_logo.png


+ 6 - 1
BusinessCommon/src/main/res/layout/cook_card_view.xml

@@ -14,7 +14,7 @@
         android:layout_height="match_parent"
         android:background="@drawable/bg_cook_item_selected"/>
 
-    <TextView
+    <com.develop.common.widget.MarqueeTextView
         android:id="@+id/tv_change_value"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -24,6 +24,11 @@
         tools:text="00:60"
         android:textColor="@color/panel_unselected"
         android:textSize="@dimen/convert_40px"
+        android:ellipsize="marquee"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
+        android:marqueeRepeatLimit="marquee_forever"
+        android:singleLine="true"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent" />
 

+ 67 - 0
BusinessCommon/src/main/res/layout/dialog_cook_step_msg.xml

@@ -0,0 +1,67 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:background="#000">
+
+    <RelativeLayout
+        android:layout_width="@dimen/convert_500px"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:background="@drawable/bg_white_button_round10px"
+        android:paddingTop="@dimen/convert_60px"
+        android:paddingBottom="@dimen/convert_64px">
+
+
+        <TextView
+            android:id="@+id/tv_title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_marginStart="@dimen/convert_50px"
+            android:layout_marginTop="@dimen/convert_20px"
+            android:layout_marginEnd="@dimen/convert_50px"
+            android:gravity="center"
+            android:lineHeight="@dimen/convert_42px"
+            android:text="@string/keep_cooking_in_the_background"
+            android:textColor="#F30101"
+            android:textSize="@dimen/convert_30px"
+
+            />
+
+        <TextView
+            android:id="@+id/tv_yes"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/convert_60px"
+            android:layout_below="@id/tv_title"
+            android:layout_marginStart="@dimen/convert_90px"
+            android:layout_marginTop="@dimen/convert_40px"
+            android:background="@drawable/bg_ee8f08_button"
+            android:gravity="center"
+            android:paddingLeft="@dimen/convert_32px"
+            android:paddingRight="@dimen/convert_32px"
+            android:text="@string/yes"
+            android:textColor="#fff"
+            android:textSize="@dimen/convert_30px" />
+
+        <TextView
+            android:id="@+id/tv_cancel"
+            android:layout_width="@dimen/convert_140px"
+            android:layout_height="@dimen/convert_60px"
+            android:layout_below="@id/tv_title"
+            android:layout_alignParentEnd="true"
+            android:layout_marginTop="@dimen/convert_40px"
+            android:layout_marginEnd="@dimen/convert_90px"
+            android:background="@drawable/bg_ee8f08_stoke"
+            android:elevation="@dimen/convert_15px"
+            android:gravity="center"
+            android:paddingLeft="@dimen/convert_32px"
+            android:paddingRight="@dimen/convert_32px"
+            android:text="@string/no"
+            android:textColor="@color/no_color"
+            android:textSize="@dimen/convert_30px" />
+
+    </RelativeLayout>
+
+</FrameLayout>

+ 2 - 3
BusinessCommon/src/main/res/layout/pop_eggs_view.xml

@@ -158,14 +158,13 @@
                 android:layout_height="wrap_content"
                 android:lineSpacingExtra="@dimen/convert_30px"
                 android:paddingBottom="@dimen/convert_5px"
-                android:text="MAKES 2 JARS (300 ML EACH) MAKES 2 JARS (300 ML EACH)MAKES 2 JARS (300 ML EACH)MAKES 2 JARS (300 ML EACH)
-
-MAKES 2 JARS (300 ML EACH)MAKES 2 JARS (300 ML EACH)MAKES 2 JARS (300 ML EACH)MAKES 2 JARS (300 ML EACH)MAKES 2 JARS (300 ML EACH)"
+                android:text="@string/egg_msg"
                 android:textColor="@color/step_detail"
                 android:textSize="@dimen/convert_28px"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent"
 
+
                 />
 
         </ScrollView>

+ 29 - 19
BusinessCommon/src/main/res/layout/wifi_content_view.xml

@@ -36,19 +36,37 @@
             android:layout_marginEnd="@dimen/convert_54px"
             android:layout_marginBottom="@dimen/convert_50px"
             android:orientation="horizontal">
-
-            <EditText
-                android:id="@+id/et_pwd"
+            <LinearLayout
                 android:layout_width="@dimen/convert_499px"
                 android:layout_height="match_parent"
+                android:orientation="horizontal"
                 android:background="@drawable/wifi_left_stoke"
-                android:gravity="center_vertical"
-                android:inputType="textPassword"
-                android:paddingStart="@dimen/convert_54px"
-                android:paddingEnd="@dimen/convert_54px"
-                android:singleLine="true"
-                android:textColor="@color/wifi_pwd_input"
-                android:textSize="@dimen/convert_39px" />
+
+                >
+                <EditText
+                    android:id="@+id/et_pwd"
+                    android:layout_width="@dimen/convert_400px"
+                    android:layout_height="match_parent"
+                    android:gravity="center_vertical"
+                    android:background="@null"
+                    android:inputType="textPassword"
+                    android:paddingStart="@dimen/convert_54px"
+                    android:paddingEnd="@dimen/convert_20px"
+                    android:singleLine="true"
+                    android:textColor="@color/wifi_pwd_input"
+                    android:textSize="@dimen/convert_39px" />
+                <CheckBox
+                    android:id="@+id/ckb_eye"
+                    android:layout_width="@dimen/convert_50px"
+                    android:layout_height="@dimen/convert_50px"
+                    android:layout_alignParentEnd="true"
+                    android:layout_gravity="center"
+                    android:layout_marginLeft="@dimen/convert_20px"
+                    android:background="@drawable/eye_selector"
+                    android:button="@null" />
+            </LinearLayout>
+
+
 
             <androidx.appcompat.widget.AppCompatTextView
                 android:id="@+id/tv_ok"
@@ -61,15 +79,7 @@
                 android:textSize="@dimen/convert_36px" />
         </LinearLayout>
 
-        <CheckBox
-            android:id="@+id/ckb_eye"
-            android:layout_width="@dimen/convert_50px"
-            android:layout_height="@dimen/convert_50px"
-            android:layout_alignParentEnd="true"
-            android:layout_marginTop="@dimen/convert_186px"
-            android:layout_marginEnd="@dimen/convert_227px"
-            android:background="@drawable/eye_selector"
-            android:button="@null" />
+
 
     </RelativeLayout>
 

+ 15 - 0
BusinessCommon/src/main/res/values-cz/strings.xml

@@ -152,6 +152,7 @@ Nanfang plus client je on-line informační platforma vyvinutá a provozovaná G
     <string name="reset_password">Obnovit heslo</string>
     <string name="enter_captcha">Zadejte Captcha</string>
     <string name="send_email">Poslat e-mail</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Zadejte heslo znovu</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Zadejte Captcha získanou z pošty</string>
     <string name="nickname">Přezdívka</string>
@@ -168,6 +169,7 @@ Nanfang plus client je on-line informační platforma vyvinutá a provozovaná G
     <string name="female">Ženský</string>
     <string name="tare">KOUKOL</string>
     <string name="keep_cooking_in_the_background">Vaříte dál na pozadí?</string>
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="reset_button">RESETOVAT</string>
     <string name="finish">Dokončit!</string>
     <string name="error">Chyba</string>
@@ -291,9 +293,22 @@ Nanfang plus client je on-line informační platforma vyvinutá a provozovaná G
     <string name="dev_error">Pozor: Zařízení je abnormální, zkontrolujte zařízení</string>
     <string name="login_expire_tips">Nepodařilo se přihlásit, zkuste to prosím znovu</string>
     <string name="add_to_favourite">Přidat k oblíbeným</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Ověření nesprávného kódu</string>
     <string name="success">Úspěch</string>
     <string name="no_net_error">Připojte se k Wifi</string>
     <string name="no_login">Pro přihlášení zadejte výše uvedená pole</string>
     <string name="wrong_captcha">Špatná captcha</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
+
 </resources>

+ 14 - 0
BusinessCommon/src/main/res/values-de/strings.xml

@@ -153,6 +153,7 @@ Nanfang plus client ist eine Online-Informationsplattform, die von Guangdong Nan
     <string name="reset_password">Passwort zurücksetzen</string>
     <string name="enter_captcha">Captcha eingeben</string>
     <string name="send_email">E-Mail senden</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Passwort erneut eingeben</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Geben Sie den Captcha ein, der aus der E-Mail erhalten wurde</string>
     <string name="nickname">Spitzname</string>
@@ -169,6 +170,7 @@ Nanfang plus client ist eine Online-Informationsplattform, die von Guangdong Nan
     <string name="female">Weiblich</string>
     <string name="tare">Leergewicht</string>
     <string name="keep_cooking_in_the_background">Kochen Sie weiter im Hintergrund?</string>
+    <string name="delete_old_recipes">Möchten Sie alte Rezepte wirklich löschen?</string>
     <string name="reset_button">Neu setzen</string>
     <string name="finish">Fertigstellen!</string>
     <string name="error">Fehler</string>
@@ -305,9 +307,21 @@ Nanfang plus client ist eine Online-Informationsplattform, die von Guangdong Nan
     <string name="dev_error">Achtung: Das Gerät ist anormal, bitte überprüfen Sie das Gerät</string>
     <string name="login_expire_tips">Login fehlgeschlagen, bitte versuchen Sie es erneut</string>
     <string name="add_to_favourite">Zu Favoriten hinzufügen</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Code unkorrigieren überprüfen</string>
     <string name="success">Erfolg</string>
     <string name="no_net_error">Bitte verbinden Sie sich mit Wifi</string>
     <string name="no_login">Bitte geben Sie die obigen Felder ein, um sich anzumelden</string>
     <string name="wrong_captcha">Falsches Captcha</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 14 - 2
BusinessCommon/src/main/res/values-en/strings.xml

@@ -168,6 +168,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="female">Female</string>
     <string name="tare">TARE</string>
     <string name="keep_cooking_in_the_background">Keep cooking in the background?</string>
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="reset_button">RESET</string>
     <string name="finish">Finish!</string>
     <string name="error">Error</string>
@@ -276,8 +277,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="water_spary">WATER SPARY</string>
     <string name="error_pot_clover_tips">The current cooking mode is not consistent with the type of pot cover. Do you want to switch to the corresponding cooking mode?</string>
 
-
-
+    <string name="egg_msg">Put 500ml of cold water into the main pot and cook up to 5-6 eggs in the steaming basket inside the pot. After cooking, keep it under cold water for about 20 seconds and stop the boiling process.</string>
     <string name="cook_eggs">COOK EGGS</string>
     <string name="cook_rice">COOK RICE</string>
     <string name="mulsify">MULSIFY</string>
@@ -292,6 +292,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="reset_password_success">Reset password success!</string>
     <string name="email_send">Email send</string>
     <string name="email_not_send">Email not send</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="the_email_has_been_already_registered">The email has been already registered</string>
     <string name="please_fill_in_your_email">Please fill in your email</string>
     <string name="please_fill_in_the_captcha">Please fill in the captcha</string>
@@ -299,7 +300,18 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="password_uncorrect">Password uncorrect</string>
     <string name="password">Password</string>
     <string name="add_to_favourite">Add to favourite</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Verify code uncorrect</string>
     <string name="success">Success</string>
 
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 13 - 1
BusinessCommon/src/main/res/values-es/strings.xml

@@ -168,6 +168,7 @@ El cliente Southern plus es una plataforma de información en línea desarrollad
     <string name="female">Femenino</string>
     <string name="tare">Tara</string>
     <string name="keep_cooking_in_the_background">¿Seguir cocinando en segundo plano?</string>
+    <string name="delete_old_recipes">¿Realmente desea eliminar las recetas antiguas?</string>
     <string name="reset_button">Restablecer</string>
     <string name="finish">Completado!</string>
     <string name="error">Error</string>
@@ -286,6 +287,7 @@ El cliente Southern plus es una plataforma de información en línea desarrollad
     <string name="save_success">Guardar con éxito</string>
     <string name="reset_password_success">¡Restablecer la contraseña con éxito!</string>
     <string name="email_send">Envío por correo electrónico</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="email_not_send">No se envió correo electrónico</string>
     <string name="the_email_has_been_already_registered">El correo electrónico está registrado</string>
     <string name="please_fill_in_your_email">Por favor, rellene su correo electrónico</string>
@@ -296,11 +298,21 @@ El cliente Southern plus es una plataforma de información en línea desarrollad
     <string name="dev_error">Nota: el equipo es anormal, por favor verifique el equipo</string>
     <string name="login_expire_tips">Falló el inicio de sesión, por favor vuelva a intentarlo</string>
     <string name="add_to_favourite">Añadir a los favoritos</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">El Código de verificación no es correcto</string>
     <string name="success">éxito</string>
     <string name="no_net_error">Por favor, conecte a wifi</string>
     <string name="no_login">Introduzca los campos anteriores para iniciar sesión</string>
     <string name="wrong_captcha">La captcha equivocada</string>
 
-
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 16 - 0
BusinessCommon/src/main/res/values-fr/strings.xml

@@ -168,6 +168,7 @@ Southern plus client est une plate - forme d’information en ligne développée
     <string name="female">De la femme</string>
     <string name="tare">Poids du cuir</string>
     <string name="keep_cooking_in_the_background">Continuer à cuisiner en arrière - plan?</string>
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="reset_button">Réinitialisation</string>
     <string name="finish">Terminé!</string>
     <string name="error">Erreur</string>
@@ -293,6 +294,7 @@ Southern plus client est une plate - forme d’information en ligne développée
     <string name="save_success">Sauvegarder le succès</string>
     <string name="reset_password_success">Réinitialisation du mot de passe réussie!</string>
     <string name="email_send">Envoyer par courriel</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="email_not_send">Aucun email envoyé</string>
     <string name="the_email_has_been_already_registered">Email déjà enregistré</string>
     <string name="please_fill_in_your_email">Veuillez remplir votre email</string>
@@ -303,9 +305,23 @@ Southern plus client est une plate - forme d’information en ligne développée
     <string name="dev_error">Remarque: appareil anormal, veuillez vérifier l’appareil</string>
     <string name="login_expire_tips">La connexion a échoué, Veuillez réessayer</string>
     <string name="add_to_favourite">Ajouter aux Favoris</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Code de vérification incorrect</string>
     <string name="success">Succès</string>
     <string name="no_net_error">Veuillez vous connecter au WiFi</string>
     <string name="no_login">Veuillez saisir les champs ci-dessus pour vous connecter</string>
     <string name="wrong_captcha">Le mauvais CAPTCHA</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
+
+
 </resources>

+ 15 - 0
BusinessCommon/src/main/res/values-hu/strings.xml

@@ -153,6 +153,7 @@
     <string name="reset_password">Jelszó visszaállítása</string>
     <string name="enter_captcha">Töltse ki a Captcha-t</string>
     <string name="send_email">E-mail küldése</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Adja meg újra a jelszót</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Írja be az e-mailben kapott Captcha kódot</string>
     <string name="nickname">Felhasználónév</string>
@@ -169,6 +170,7 @@
     <string name="female">Női</string>
     <string name="tare">TARE</string>
     <string name="keep_cooking_in_the_background">Folytassa a főzést a háttérben?</string>
+    <string name="delete_old_recipes">Tényleg törölni szeretné a régi recepteket?</string>
     <string name="reset_button">RESET</string>
     <string name="finish">Befejezni!</string>
     <string name="error">Hiba</string>
@@ -209,7 +211,20 @@
     <string name="screen_saver_title">Szeretne "breath-holding"  üzemmódba lépni?</string>
     <string name="sex">Gender</string>
     <string name="wight">SÚLY</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="running_block_tips">Állítsa le a futó programot, és indítson el egy újat.</string>
     <string name="unset_target_time">Az idő nem lett beállítva.</string>
     <string name="please_fill_in_nickname">Please fill in nickname</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
+
 </resources>

+ 14 - 0
BusinessCommon/src/main/res/values-it/strings.xml

@@ -152,6 +152,7 @@ Nanfang plus client è una piattaforma di informazioni online sviluppata e gesti
     <string name="reset_password">Ripristina password</string>
     <string name="enter_captcha">Inserisci Captcha</string>
     <string name="send_email">Invia email</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Inserisci nuovamente la password</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Inserisci la Captcha ottenuta dalla posta</string>
     <string name="nickname">Soprannome</string>
@@ -168,6 +169,7 @@ Nanfang plus client è una piattaforma di informazioni online sviluppata e gesti
     <string name="female">Femmina</string>
     <string name="tare">TARA</string>
     <string name="keep_cooking_in_the_background">Continuare a cucinare in sottofondo?</string>
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="reset_button">REIMPOSTA</string>
     <string name="finish">Finisci!</string>
     <string name="error">Errore</string>
@@ -291,9 +293,21 @@ Nanfang plus client è una piattaforma di informazioni online sviluppata e gesti
     <string name="dev_error">Attenzione: Il dispositivo è anormale, si prega di controllare il dispositivo</string>
     <string name="login_expire_tips">Accesso non riuscito, riprova</string>
     <string name="add_to_favourite">Aggiungi ai preferiti</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Verifica codice non corretto</string>
     <string name="success">Successo</string>
     <string name="no_net_error">Si prega di connettersi a Wifi</string>
     <string name="no_login">Inserisci i campi di cui sopra per accedere</string>
     <string name="wrong_captcha">CAPTCHA errato</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 15 - 1
BusinessCommon/src/main/res/values-ja/strings.xml

@@ -88,7 +88,7 @@
     <string name="are_you_sure_to_restore_factory_settings">Are you sure to restore factory settings?</string>
     <string name="yes">YES</string>
     <string name="restore_factory_settings">Restore factory settings</string>
-
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="network_wifi_status_connected_no_internet">已连接,但无法访问互联网</string>
     <string name="network_wifi_status_saved">已保存</string>
     <string name="network_wifi_status_idle" />
@@ -107,6 +107,7 @@
     <string name="network_wifi_status_failed">失败</string>
     <string name="network_wifi_status_blocked">已停用</string>
     <string name="network_wifi_status_verifying_poor_link">暂时关闭(网络状况不佳)</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="start">START</string>
     <string name="pause">PAUSE</string>
     <string name="cancel">CANCEL</string>
@@ -156,8 +157,21 @@
     <string name="rating">rating</string>
     <string name="loading">Loading</string>
     <string name="Min20">20Min</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="enjoy_your_meal">ENJOY YOUR MEAL</string>
     <string name="wrong_captcha">Wrong captcha</string>
     <string name="none">None</string>
     <string name="please_fill_in_nickname">Please fill in nickname</string>
+
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 26 - 8
BusinessCommon/src/main/res/values-pl/strings.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
+
     <string name="not_a_member_yet">Brakuje %1s?</string>
     <string name="member">członek</string>
     <string name="select_language">Wybierz język</string>
@@ -8,9 +9,7 @@
     <string name="chinese">chiński mandaryński (uproszczony)</string>
     <string name="france">francuski</string>
     <string name="japan">japoński</string>
-    <string name="skip">
-<![CDATA[ POMIŃ >> ]]>
-</string>
+    <string name="skip"><![CDATA[POMIŃ >>]]></string>
     <string name="recipes">PRZEPISY</string>
     <string name="mode">TRYB</string>
     <string name="sunday">niedziela</string>
@@ -95,7 +94,7 @@
     <string name="restore_factory_settings">Przywracanie ustawień fabrycznych</string>
     <string name="network_wifi_status_connected_no_internet">Połączono, ale nie można uzyskać dostępu do Internetu</string>
     <string name="network_wifi_status_saved">Zapisano</string>
-    <string name="network_wifi_status_idle"/>
+    <string name="network_wifi_status_idle" />
     <string name="network_wifi_status_disabled">„Zatrzymano”</string>
     <string name="network_wifi_status_network_failure">„Błąd konfiguracji adresu IP”</string>
     <string name="network_wifi_status_wifi_failure">„Błąd połączenia WLAN”</string>
@@ -168,6 +167,7 @@
     <string name="female">Kobieta</string>
     <string name="tare">TAROWANIE</string>
     <string name="keep_cooking_in_the_background">Gotować w tle?</string>
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="reset_button">RESET</string>
     <string name="finish">Zakończ!</string>
     <string name="error">Błąd</string>
@@ -213,10 +213,12 @@
     <string name="recipe_complete">PRZEPIS UKOŃCZONY</string>
     <string name="engjoy_your_meal">SMACZNEGO!</string>
     <string name="gan_sao_yi_chan">Uwaga\n· Wysoka temperatura\n· Brak zawartości w misce podczas podgrzewania\n· Dodawanie składników, płynów</string>
+
     <string name="zhuan_su_fan_kui_yi_chan">Ostrzeżenie\n· Pokrywa miski nie jest całkowicie zatrzaśnięta\n· Przeciążenie silnika, poczekaj, aż urządzenie ostygnie, Uruchom ponownie z mniejszą ilością zawartości miski.</string>
     <string name="dian_zi_cheng_tong_xin_yi_chan">Uwaga\n· Waga nie została zmierzona, błąd wagi\n· Waga uszkodzona </string>
     <string name="ntc_yi_chan"> Uwaga: NTC nie działa prawidłowo, skontaktuj się z serwisem technicznym.</string>
     <string name="mei_fang_guo_yi_chan">Uwaga\n· Miska mieszająca nie jest zablokowana, zmień położenie miski</string>
+
     <string name="empty_notice">Brak treści uwagi</string>
     <string name="press_the_button">Naciśnij przycisk</string>
     <string name="please_fill_in">Należy wypełnić</string>
@@ -230,13 +232,16 @@
     <string name="home">PANEL GŁÓWNY</string>
     <string name="back">COFNIJ</string>
     <string name="historical_search">Wyszukiwanie historyczne</string>
+
     <string name="Automatic_recipes">PRZEPISY AUTOMATYCZNE</string>
     <string name="Automatic_programmes">PROGRAMY AUTOMATYCZNE</string>
     <string name="Manual_cooking">GOTOWANIE RĘCZNE</string>
     <string name="Download_new_recipes">POBIERZ NOWE PRZEPISY</string>
     <string name="account_or_pwd_error">Nieprawidłowy numer konta lub hasło</string>
     <string name="login_faild">Nieprawidłowy numer konta lub hasło</string>
-    <!--  空炸模式  -->
+
+
+    <!-- 空炸模式 -->
     <string name="air_fryer">FRYTKOWNICA BEZTŁUSZCZOWA</string>
     <string name="meat">MIĘSO</string>
     <string name="fish">RYBY</string>
@@ -250,6 +255,9 @@
     <string name="confirm_change_dev_mode">Potwierdzić zmianę trybu dev?</string>
     <string name="water_spary">MGIEŁKA WODNA</string>
     <string name="error_pot_clover_tips">Bieżący tryb gotowania nie jest zgodny z typem pokrywy garnka. Przełączyć na odpowiedni tryb gotowania?</string>
+
+
+
     <string name="cook_eggs">GOTOWANIE JAJEK</string>
     <string name="cook_rice">GOTOWANIE RYŻU</string>
     <string name="mulsify">EMULGOWANIE</string>
@@ -264,9 +272,7 @@
     <string name="help">Pomoc</string>
     <string name="evaluate_successfully">Oceń pozytywnie</string>
     <string name="reset_to_default_settings">Przywracanie ustawień domyślnych</string>
-    <string name="home_auth">
-<![CDATA[ PANEL GŁÓWNY >> ]]>
-</string>
+    <string name="home_auth"><![CDATA[PANEL GŁÓWNY >>]]></string>
     <string name="rating">ocena</string>
     <string name="loading">Ładowanie</string>
     <string name="Min20">20 min.</string>
@@ -275,6 +281,7 @@
     <string name="save_success">Zapisano pomyślnie</string>
     <string name="reset_password_success">Resetowanie hasła powiodło się!</string>
     <string name="email_send">E-mail został wysłany</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="email_not_send">E-mail nie został wysłany</string>
     <string name="the_email_has_been_already_registered">Podany adres e-mail został już zarejestrowany</string>
     <string name="please_fill_in_your_email">Podaj swój adres e-mail</string>
@@ -290,4 +297,15 @@
     <string name="no_net_error">Połącz z Wi-Fi</string>
     <string name="no_login">Zapoznaj się z poniższymi punktami, aby uzyskać połączenie</string>
     <string name="wrong_captcha">Nieprawidłowy kod captcha</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 14 - 0
BusinessCommon/src/main/res/values-pt/strings.xml

@@ -152,6 +152,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="reset_password">Reset Password</string>
     <string name="enter_captcha">Enter Captcha</string>
     <string name="send_email">Send Email</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Enter Password Again</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Enter the Captcha obtained from the mail</string>
     <string name="nickname">Nickname</string>
@@ -168,6 +169,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="female">Female</string>
     <string name="tare">TARE</string>
     <string name="keep_cooking_in_the_background">Keep cooking in the background?</string>
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="reset_button">RESET</string>
     <string name="finish">Finish!</string>
     <string name="error">Error</string>
@@ -291,9 +293,21 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="dev_error">Attention: The device is abnormal, please check the device</string>
     <string name="login_expire_tips">Failed to login, please try again</string>
     <string name="add_to_favourite">Add to favourite</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Verify code uncorrect</string>
     <string name="success">Success</string>
     <string name="no_net_error">Please connect to Wifi</string>
     <string name="no_login">Veuillez saisir les champs ci-dessus pour vous connecter</string>
     <string name="wrong_captcha">Wrong captcha</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 14 - 0
BusinessCommon/src/main/res/values-sk/strings.xml

@@ -153,6 +153,7 @@
     <string name="reset_password">Obnoviť heslo</string>
     <string name="enter_captcha">Vyplňte Captcha</string>
     <string name="send_email">Odoslať e-mail</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Znovu zadajte heslo</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Zadajte kód Captcha získaný z e-mailu</string>
     <string name="nickname">Používateľské meno</string>
@@ -169,6 +170,7 @@
     <string name="female">Žena</string>
     <string name="tare">TARE</string>
     <string name="keep_cooking_in_the_background">Pokračovať vo varení na pozadí?</string>
+    <string name="delete_old_recipes">Naozaj chcete vymazať recepty?</string>
     <string name="reset_button">RESETOVAŤ</string>
     <string name="finish">Dokončiť!</string>
     <string name="error">Chyba</string>
@@ -209,7 +211,19 @@
     <string name="screen_saver_title">Chcete prejsť do režimu "breath-holding"?</string>
     <string name="sex">Pohlavie</string>
     <string name="wight">HMOTNOSŤ</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="running_block_tips">Zastavte spustený program a spustite nový program.</string>
     <string name="unset_target_time">Čas nebol nastavený.</string>
     <string name="please_fill_in_nickname">Please fill in nickname</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 13 - 1
BusinessCommon/src/main/res/values-uk/strings.xml

@@ -152,6 +152,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="reset_password">Reset Password</string>
     <string name="enter_captcha">Enter Captcha</string>
     <string name="send_email">Send Email</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Enter Password Again</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Enter the Captcha obtained from the mail</string>
     <string name="nickname">Nickname</string>
@@ -168,6 +169,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="female">Female</string>
     <string name="tare">TARE</string>
     <string name="keep_cooking_in_the_background">Keep cooking in the background?</string>
+    <string name="delete_old_recipes">Ви дійсно бажаєте видалити старі рецепти?</string>
     <string name="reset_button">RESET</string>
     <string name="finish">Finish!</string>
     <string name="error">Error</string>
@@ -299,7 +301,17 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="password_uncorrect">Password uncorrect</string>
     <string name="password">Password</string>
     <string name="add_to_favourite">Add to favourite</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Verify code uncorrect</string>
     <string name="success">Success</string>
-
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 14 - 0
BusinessCommon/src/main/res/values-zh-rCN/strings.xml

@@ -152,6 +152,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="reset_password">Reset Password</string>
     <string name="enter_captcha">Enter Captcha</string>
     <string name="send_email">Send Email</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Enter Password Again</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Enter the Captcha obtained from the mail</string>
     <string name="nickname">Nickname</string>
@@ -168,6 +169,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="female">Female</string>
     <string name="tare">TARE</string>
     <string name="keep_cooking_in_the_background">Keep cooking in the background?</string>
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="reset_button">RESET</string>
     <string name="finish">Finish!</string>
     <string name="error">Error</string>
@@ -291,6 +293,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="dev_error">Attention: The device is abnormal, please check the device</string>
     <string name="login_expire_tips">Failed to login, please try again</string>
     <string name="add_to_favourite">Add to favourite</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Verify code uncorrect</string>
     <string name="success">Success</string>
     <string name="no_net_error">Please connect to Wifi</string>
@@ -298,4 +301,15 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="wrong_captcha">Wrong captcha</string>
     <string name="none">None</string>
     <string name="please_fill_in_nickname">Please fill in nickname</string>
+
+    <string name="e7_errCode">Motor heat dissipation abnormal</string>
+    <string name="e8_errCode">Plug in air fryer attachment</string>
+    <string name="e9_errCode">Air fryer NTC abnormal</string>
+    <string name="e10_errCode">Put air fryer lid into place</string>
+    <string name="e11_errCode">Put air fryer bowl into place</string>
+    <string name="e12_errCode">Air fryer attachment overheat protection. Pls use it after cool down.</string>
+    <string name="e13_errCode">Air fryer water pump abnormal</string>
+    <string name="e14_errCode">Unplug air fryer attachment when in robot cooker mode</string>
+    <string name="e15_errCode">TFT screen dissipation abnormal</string>
+    <string name="e16_errCode">Please put in the correct pot, or end the current program</string>
 </resources>

+ 4 - 0
BusinessCommon/src/main/res/values/strings.xml

@@ -157,6 +157,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="reset_password">Reset Password</string>
     <string name="enter_captcha">Enter Captcha</string>
     <string name="send_email">Send Email</string>
+    <string name="send_no_email">Please fill in your  email</string>
     <string name="enter_password_again">Enter Password Again</string>
     <string name="enter_the_captcha_obtained_from_the_mail">Enter the Captcha obtained from the mail</string>
     <string name="nickname">Nickname</string>
@@ -173,6 +174,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="female">Female</string>
     <string name="tare">TARE</string>
     <string name="keep_cooking_in_the_background">Keep cooking in the background?</string>
+    <string name="delete_old_recipes">Do you want to delete the old recipes?</string>
     <string name="reset_button">RESET</string>
     <string name="finish">Finish!</string>
     <string name="error">Error</string>
@@ -310,6 +312,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="dev_error">Attention: The device is abnormal, please check the device</string>
     <string name="login_expire_tips">Failed to login, please try again</string>
     <string name="add_to_favourite">Add to favourite</string>
+    <string name="step_pot_error">Please switch the corresponding pot and start again</string>
     <string name="verify_code_uncorrect">Verify code uncorrect</string>
     <string name="success">Success</string>
     <string name="no_net_error">Please connect to Wifi</string>
@@ -322,6 +325,7 @@ Nanfang plus client is an online information platform developed and operated by
 
     <string name="please_fill_in_nickname">Please fill in nickname</string>
     <string name="size_of_the_eggs">SIZE OF THE EGGS</string>
+    <string name="egg_msg">Put 500ml of cold water into the main pot and cook up to 5-6 eggs in the steaming basket inside the pot. After cooking, keep it under cold water for about 20 seconds and stop the boiling process.</string>
     <string name="how_would_you_like_them">HOW WOULD YOU LIKE THEM?</string>
     <string name="small">SMALL</string>
     <string name="medium">MEDIUM</string>

+ 10 - 1
BusinessCommon/src/main/res/values/themes.xml

@@ -88,7 +88,16 @@
 
     <style name="Splash011ATheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
         <!-- 这里的trans自己写一个#00000000即可-->
-        <item name="android:windowBackground">@drawable/splash_011a_logo</item>
+<!--        <item name="android:windowBackground">@drawable/splash_011a_logo</item>-->
+        <item name="android:windowBackground">@color/color_fff</item>
+        <item name="windowNoTitle">true</item>
+        <item name="windowActionBar">false</item>
+        <item name="android:windowFullscreen">true</item>
+    </style>
+    <style name="Splash011A5037Theme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
+        <!-- 这里的trans自己写一个#00000000即可-->
+<!--        <item name="android:windowBackground">@drawable/splash_011a_5037_logo</item>-->
+        <item name="android:windowBackground">@color/color_fff</item>
         <item name="windowNoTitle">true</item>
         <item name="windowActionBar">false</item>
         <item name="android:windowFullscreen">true</item>

+ 1 - 1
BusinessMain/src/main/java/com/develop/main/ui/HomeActivity.kt

@@ -254,7 +254,7 @@ class HomeActivity : CommonBVMActivity<ActivityHomeBinding, HomeViewModel>() {
             }
         }
         //032客户需要隐藏登录和注册
-        if (getSN().startsWith("032D")){
+        if (getSN().startsWith("032D")||getSN().startsWith("011A")){
             binding.tvUserName.visibility  = View.GONE
             //头像需要占位显示
             binding.ivAvatar.visibility = View.INVISIBLE

+ 23 - 2
BusinessMain/src/main/java/com/develop/main/ui/ModeEntranceActivity.kt

@@ -1,5 +1,6 @@
 package com.develop.main.ui
 
+import android.content.Intent
 import android.os.Bundle
 import android.util.DisplayMetrics
 import android.view.LayoutInflater
@@ -23,6 +24,7 @@ import com.develop.base.ext.updateText
 import com.develop.common.data_repo.FoodDataProvider
 import com.develop.base.util.MMkvUtils
 import com.develop.base.util.SettingKeyBoardUtils
+import com.develop.base.util.TopResumedAtyHolder
 import com.develop.common.data_repo.db.DataFactory
 import com.develop.common.data_repo.db.RecipesType
 import com.develop.common.data_repo.db.entity.UserInfo
@@ -41,14 +43,17 @@ import com.drake.brv.utils.grid
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
+import com.kuyuntech.cofarcooking.device.sdk.constant.core.CommonEventTypes
 import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevModes
 import com.kuyuntech.cofarcooking.device.sdk.constant.core.WorkModes
+import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevCommonEvent
 import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevPromptEvent
 import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
 import com.smarx.notchlib.utils.ScreenUtil
 import com.tuya.smartai.iot_sdk.Log
 import org.alee.component.skin.service.ThemeSkinService
 import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
 
 @Route(path = Screens.Main.ENTRANCE_CHOSEN)
 class ModeEntranceActivity : CommonBindingActivity<ActivityModeEntranceBinding>() {
@@ -433,7 +438,11 @@ class ModeEntranceActivity : CommonBindingActivity<ActivityModeEntranceBinding>(
                     }
                 }
             }.models =
-                if (isBrand036I()) DataFactory.get036IEntranceData() else if (isBrand011A()) DataFactory.get011AEntranceData()else if (isBrand054A())DataFactory.get054AEntranceData()else if (getSN().startsWith("045"))DataFactory.get045AEntranceData()else DataFactory.getEntranceData()
+                if (isBrand036I()) DataFactory.get036IEntranceData()
+                else if (isBrand011A())DataFactory.get011A5037EntranceData()
+                else if (isBrand054A())DataFactory.get054AEntranceData()
+                else if (getSN().startsWith("045"))DataFactory.get045AEntranceData()
+                else DataFactory.getEntranceData()
         }
 
 //        if (isBrand011A()) DataFactory.get011AEntranceData()
@@ -506,7 +515,7 @@ class ModeEntranceActivity : CommonBindingActivity<ActivityModeEntranceBinding>(
 //        }
 
         //032客户需要隐藏登录和注册
-        if (getSN().startsWith("032D")){
+        if (getSN().startsWith("032D")||getSN().startsWith("011A")){
             binding.tvUserName.visibility  = View.GONE
             //头像需要占位显示
             binding.ivAvatar.visibility = View.INVISIBLE
@@ -572,4 +581,16 @@ class ModeEntranceActivity : CommonBindingActivity<ActivityModeEntranceBinding>(
         loadingDialog.showDialog(supportFragmentManager, "Loading")
     }
 
+    @Subscribe
+    fun onDevModeChange(event: DevCommonEvent) {
+        //在当前页面,换了模式以后 重新启动
+//        if (this == TopResumedAtyHolder.getCurrentActivity() && CommonEventTypes.DEV_MODE_CHANGE == event.type) {
+//            val intent =
+//                Intent(this, ModeEntranceActivity::class.java)
+//            intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
+//            this.startActivity(intent)
+//        }
+
+
+    }
 }

+ 78 - 5
BusinessMain/src/main/java/com/develop/main/ui/ModesFragment.kt

@@ -1,6 +1,7 @@
 package com.develop.main.ui
 
 import android.content.Context
+import android.content.Intent
 import android.os.Bundle
 import android.util.Log
 import android.view.LayoutInflater
@@ -11,6 +12,9 @@ import androidx.cardview.widget.CardView
 import androidx.recyclerview.widget.LinearSnapHelper
 import androidx.recyclerview.widget.RecyclerView
 import com.develop.base.ext.background_drawable
+import com.develop.base.ext.getBrandNum
+import com.develop.base.ext.getModelNum
+import com.develop.base.ext.getSN
 import com.develop.base.ext.isNightTheme
 import com.develop.common.bean.WorkMode
 import com.develop.base.ext.load
@@ -32,9 +36,15 @@ import com.develop.main.databinding.FragmentModesBinding
 import com.develop.main.viewmodel.HomeViewModel
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.setup
+import com.kuyuntech.cofarcooking.device.sdk.constant.core.CommonEventTypes
 import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevModes
 import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevStatus
+import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevCommonEvent
+import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevStatusEvent
 import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
 import org.json.JSONObject
 import java.io.IOException
 import java.nio.charset.Charset
@@ -44,11 +54,13 @@ import kotlin.math.abs
  * 烹饪模式入口
  */
 class ModesFragment : CommonBVMFragment<FragmentModesBinding, HomeViewModel>() {
-
+    private var isRegister = true
     private var isGrid = false
 
     private var modeTypeList = mutableListOf<ModesType>()
-
+    private var devMode = ""
+    private var isDevModes = true
+    private var isModelNum = ""
     override fun createViewModel(): HomeViewModel {
         return getViewModelOfActivity(HomeViewModel::class.java)
     }
@@ -60,6 +72,22 @@ class ModesFragment : CommonBVMFragment<FragmentModesBinding, HomeViewModel>() {
         return FragmentModesBinding.inflate(inflater, container, false)
     }
 
+    //注册EventBus
+    override fun onResume() {
+        super.onResume()
+        if (isRegister) {
+            EventBus.getDefault().register(this)
+        }
+        isRegister = false
+
+    }
+
+    //注销EventBus
+    override fun onDestroyView() {
+        super.onDestroyView()
+        EventBus.getDefault().unregister(this)
+    }
+
     override fun onPostCreateView() {
         super.onPostCreateView()
         if (isNightTheme()) {
@@ -67,17 +95,22 @@ class ModesFragment : CommonBVMFragment<FragmentModesBinding, HomeViewModel>() {
         } else {
             binding.bottomView.setVisible()
         }
+        isModelNum = getModelNum()
         initView()
     }
 
 
     private fun initView() {
-
+        devMode = CofarSDK.devInfo().devMode
         val configJson = ConfigUtils.loadConfig()
-        var modes =
-            configJson?.workModes?.filter { it.devMode == CofarSDK.devInfo().devMode && it.listShow == true }
 
 
+        if (configJson?.workModes?.size == 0) {
+            return
+        }
+
+        var modes = configJson?.workModes?.filter { it.devMode == devMode && it.listShow == true }
+
         binding.galleryRecycle.apply {
 
             linear(RecyclerView.HORIZONTAL)
@@ -227,4 +260,44 @@ class ModesFragment : CommonBVMFragment<FragmentModesBinding, HomeViewModel>() {
         const val MAX_SCALE = 1.0f
         const val MAX_ALPHA = 1.0f
     }
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    fun onDevStateEvent(event: DevStatusEvent) {
+        event.devInfo.potCloverType
+        //当没有锅得时候,默认是汤锅模式 //切当前Fragment可见状态 // 只针对5037的处理
+        if (isModelNum == "5037" && isVisible && event.devInfo.potStatus.toInt() == 1) {
+            // isDevModes 避免重复刷新
+            if (isDevModes) {
+                isDevModes = false
+                CofarSDK.changeDevModeFocus(DevModes.SOUP)
+            }
+        } else if (isModelNum == "5037" && isVisible && event.devInfo.potStatus.toInt() == 0) {
+            /**
+             * 由于客户无锅状态下是默认汤锅列表,但是在一进来是空炸锅,拿出来(无锅的时候已经换了汤锅模式),
+             * 但重新放空炸锅,onDevModeChange 是不会回调的,固需要用potCoverType 锅盖协议来判断是否需要重新换模式
+             * */
+            //potCoverType 0 是汤锅 1是空炸
+            if (event.devInfo.potCloverType.toInt() == 1 && devMode == DevModes.SOUP) {
+                CofarSDK.changeDevModeFocus(DevModes.AIR_FRYER)
+            }
+            isDevModes = true
+
+        }
+
+
+    }
+
+    @Subscribe
+    fun onDevModeChange(event: DevCommonEvent) {
+        //在当前页面,换了模式以后 重新初始化,需要判断是否显示状态
+        if (CommonEventTypes.DEV_MODE_CHANGE == event.type && isVisible) {
+            //如果相同的模式情况下,不用重新初始化
+            if (devMode == CofarSDK.devInfo().devMode) {
+                return
+            }
+            //重新初始化
+            initView()
+        }
+    }
+
 }

+ 3 - 0
BusinessSetting/src/main/java/com/develop/setting/ui/PrivacyPolicyActivity.kt

@@ -8,6 +8,7 @@ import android.webkit.WebViewClient
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.develop.base.ext.background_drawable
 import com.develop.base.ext.getSN
+import com.develop.base.ext.isBrand011A
 import com.develop.base.ext.isBrand036I
 import com.develop.base.ext.isBrand054A
 import com.develop.base.ext.isNightTheme
@@ -57,6 +58,8 @@ class PrivacyPolicyActivity : BaseBindingActivity<ActivityPrivacePolicyBinding>(
             binding.ivBanner.setBackgroundResource(com.develop.common.R.drawable.account_background_054a)
         }else if (getSN().startsWith("045")){
             binding.ivBanner.setBackgroundResource(com.develop.common.R.drawable.account_background_045a)
+        }else if (isBrand011A()){
+            binding.ivBanner.setBackgroundResource(com.develop.common.R.drawable.account_background_011a)
         }
         countForPolicyTime()
         binding.ivBack.setOnClickListener {

+ 69 - 31
BusinessSetting/src/main/java/com/develop/setting/ui/RestoreActivity.kt

@@ -15,6 +15,7 @@ import com.develop.common.ui.CommonBindingActivity
 import com.develop.common.dialog.CancelConfirmDialog
 import com.develop.common.tag.CURRENT_USER_ID
 import com.develop.common.tag.FIRST_IN
+import com.develop.setting.R
 import com.develop.setting.databinding.ActivityRestoreBinding
 import com.drake.net.utils.withMain
 import kotlinx.coroutines.Dispatchers
@@ -23,11 +24,15 @@ import java.io.File
 
 @Route(path = Screens.Setting.RESTORE)
 class RestoreActivity : CommonBindingActivity<ActivityRestoreBinding>() {
+    private val recipesConfirmDialog by lazy {
+        CancelConfirmDialog()
+    }
+
     override fun createViewBinding(inflater: LayoutInflater): ActivityRestoreBinding {
         return ActivityRestoreBinding.inflate(layoutInflater)
     }
 
-    private val dialog = CancelConfirmDialog()
+    private var dialog = CancelConfirmDialog()
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -39,36 +44,7 @@ class RestoreActivity : CommonBindingActivity<ActivityRestoreBinding>() {
         dialog.title = getString(com.develop.common.R.string.restore_confirm_tips)
         dialog.onDialogClickListener = object : CancelConfirmDialog.OnDialogClickListener {
             override fun onConfirm() {
-                safeGlobalScope.launch(Dispatchers.IO) {
-                    FoodDataProvider.deleteAll()
-                    val cacheDirectory = cacheDir
-                    WifiHelp.Build(this@RestoreActivity).build().removeAllWifi()
-                    FoodDataProvider.getUserDatabase().userInfoDao().apply {
-                        removeAllOnlineRecipe(CURRENT_USER_ID)
-                        removeAllFavouriteRecipe(CURRENT_USER_ID)
-                        removeAllHistoryRecipe(CURRENT_USER_ID)
-                    }
-                    FoodDataProvider.getUserDatabase().devConfigDao().apply {
-                        removeAllDevVersion()
-                    }
-
-
-                    val applicationDirectory = cacheDirectory.parent?.let { File(it) }
-                    if (applicationDirectory?.exists() == true) {
-
-                        val files = applicationDirectory.listFiles() ?: emptyArray()
-                        for (file in files) {
-                            if (!file.name.equals("lib")) {
-                                com.blankj.utilcode.util.FileUtils.delete(file)
-                            }
-                        }
-                    }
-                    withMain {
-//                        MMkvUtils.save(FIRST_IN, true)
-                        val pm = getSystemService(Context.POWER_SERVICE) as PowerManager
-                        pm.reboot("")
-                    }
-                }
+                recipesConfirmDialog.showDialog(supportFragmentManager, "delete_recipes")
 
             }
 
@@ -83,5 +59,67 @@ class RestoreActivity : CommonBindingActivity<ActivityRestoreBinding>() {
             finish()
         }
 
+        recipesConfirmDialog.title = getString(com.develop.common.R.string.delete_old_recipes)
+        recipesConfirmDialog.showCancel = true
+        recipesConfirmDialog.showConfirm = true
+        recipesConfirmDialog.onDialogClickListener =
+            object : CancelConfirmDialog.OnDialogClickListener {
+                override fun onConfirm() {
+                    delete(true)
+                }
+
+                override fun onCancel() {
+                    delete(false)
+                }
+
+            }
+    }
+
+    private  fun  delete(delete:Boolean){
+        safeGlobalScope.launch(Dispatchers.IO) {
+            if (delete){
+                FoodDataProvider.deleteAll()
+            }
+            val cacheDirectory = cacheDir
+            WifiHelp.Build(this@RestoreActivity).build().removeAllWifi()
+            FoodDataProvider.getUserDatabase().userInfoDao().apply {
+                removeAllOnlineRecipe(CURRENT_USER_ID)
+                removeAllFavouriteRecipe(CURRENT_USER_ID)
+                removeAllHistoryRecipe(CURRENT_USER_ID)
+            }
+
+            if (delete){
+                FoodDataProvider.getUserDatabase().devConfigDao().apply {
+                    removeAllDevVersion()
+                }
+            }
+
+
+
+            val applicationDirectory = cacheDirectory.parent?.let { File(it) }
+            if (applicationDirectory?.exists() == true) {
+
+                val files = applicationDirectory.listFiles() ?: emptyArray()
+                for (file in files) {
+                    if (!file.name.equals("lib")) {
+                        //2024.01.09 是否要删除增量食谱包,删除的话,把包括本地的增量都删,不删的话,就保持原样
+                        //databases目录放着db文件
+                        if (file.name.equals("databases")) {
+                            if (delete) {
+                                com.blankj.utilcode.util.FileUtils.delete(file)
+                            }
+                        } else {
+                            com.blankj.utilcode.util.FileUtils.delete(file)
+                        }
+                    }
+                }
+            }
+            withMain {
+//                        MMkvUtils.save(FIRST_IN, true)
+                val pm = getSystemService(Context.POWER_SERVICE) as PowerManager
+                pm.reboot("")
+            }
+        }
+
     }
 }

+ 6 - 7
BusinessSetting/src/main/java/com/develop/setting/ui/SettingMainActivity.kt

@@ -51,14 +51,13 @@ class SettingMainActivity : CommonBindingActivity<ActivitySettingMainBinding>()
         var ctx = this
         dataList = if (getSN().startsWith("010D")) {
             DataFactory.genSetting010DModesList(resources)
-        } else {
-            if (getSN().startsWith("032D")){
-                DataFactory.genSetting032DModesList(resources)
-
-            }else{
-                DataFactory.genSettingModesList(resources)
+        } else if (getSN().startsWith("032D")) {
+            DataFactory.genSetting032DModesList(resources)
 
-            }
+        } else if (getSN().startsWith("011A")) {
+            DataFactory.genSetting011AModesList(resources)
+        } else {
+            DataFactory.genSettingModesList(resources)
         }
 
 

+ 9 - 10
BusinessSetting/src/main/java/com/develop/setting/ui/WifiListActivity.kt

@@ -1,6 +1,8 @@
 package com.develop.setting.ui
 
+import android.content.Context
 import android.graphics.Rect
+import android.net.wifi.WifiConfiguration
 import android.net.wifi.WifiManager
 import android.os.Bundle
 import android.os.CountDownTimer
@@ -11,12 +13,10 @@ import android.widget.EditText
 import android.widget.RelativeLayout
 import androidx.recyclerview.widget.RecyclerView
 import com.alibaba.android.arouter.facade.annotation.Route
-import com.azhon.appupdate.util.DensityUtil
-import com.blankj.utilcode.util.DeviceUtils
 import com.blankj.utilcode.util.KeyboardUtils
 import com.blankj.utilcode.util.NetworkUtils
-import com.blankj.utilcode.util.ViewUtils
 import com.develop.base.ext.getSN
+import com.develop.base.ext.isBrand011A
 import com.develop.base.ext.isBrand036I
 import com.develop.base.ext.isBrand054A
 import com.develop.base.ext.navigateTo
@@ -31,12 +31,10 @@ import com.develop.common.router.Screens
 import com.develop.common.tag.WIFI_FROM_MAIN_SETTING
 import com.develop.common.ui.CommonBindingActivity
 import com.develop.common.utils.FoucsLinearLayoutManager
-import com.develop.common.widget.HomeFunctionTopBar.Companion.dp60
 import com.develop.common.widget.WifiContentView
 import com.develop.setting.R
 import com.develop.setting.databinding.ActivityWifiListBinding
 import com.drake.brv.utils.bindingAdapter
-import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
 import com.yanzhenjie.permission.AndPermission
@@ -92,6 +90,9 @@ class WifiListActivity : CommonBindingActivity<ActivityWifiListBinding>(),
         }else if (isBrand054A()){
             binding.ivBanner.setBackgroundResource(com.develop.common.R.drawable.account_background_054a)
             binding.ivLogo.setGone()
+        }else if (isBrand011A()){
+            binding.ivBanner.setImageResource(com.develop.common.R.drawable.account_background_011a)
+            binding.ivLogo.setGone()
         }else if (getSN().startsWith("045")){
             binding.ivBanner.setBackgroundResource(com.develop.common.R.drawable.account_background_045a)
             binding.ivLogo.setGone()
@@ -177,7 +178,7 @@ class WifiListActivity : CommonBindingActivity<ActivityWifiListBinding>(),
     private fun initListener() {
         binding.tvSkin.setOnClickListener {
             if (NetworkUtils.isConnected()) {
-                if (getSN().startsWith("032D")){
+                if (getSN().startsWith("032D")||getSN().startsWith("011A")){
                     navigateTo(Screens.Main.ENTRANCE_CHOSEN)
                 }else{
                     navigateTo(Screens.Auth.MEMBER)
@@ -194,7 +195,7 @@ class WifiListActivity : CommonBindingActivity<ActivityWifiListBinding>(),
             if (isFromMainSetting) {
                 finish()
             } else {
-                if (getSN().startsWith("032D")){
+                if (getSN().startsWith("032D")||getSN().startsWith("011A")){
                     navigateTo(Screens.Main.ENTRANCE_CHOSEN)
                     finish()
                 }else{
@@ -212,9 +213,7 @@ class WifiListActivity : CommonBindingActivity<ActivityWifiListBinding>(),
                 wifiDataList.addAll(it)
                 binding.wifiRecycler.models = wifiDataList
                 selectedPosition = -2
-
-
-                //重连机制
+//                //重连机制
 //                countDownTimer()
             }
             dismissPlainDialog()

+ 30 - 46
BusinessStep/src/main/java/com/develop/step/ui/ModesDetailActivity.kt

@@ -42,7 +42,6 @@ import com.develop.common.tag.TURN_DOWN_KEY_CODE
 import com.develop.common.tag.TURN_UP_KEY_CODE
 import com.develop.common.ui.CommonBVMActivity
 import com.develop.common.utils.CofarUtils
-import com.develop.common.utils.CommonUtils
 import com.develop.common.utils.ConfigUtils
 import com.develop.common.utils.getTimeStr
 import com.develop.common.widget.DirectionView
@@ -50,7 +49,6 @@ import com.develop.common.widget.EggsSelectorLayout
 import com.develop.common.widget.RingControlView
 import com.develop.common.widget.TimePickerView
 import com.develop.step.CookSettingType
-import com.develop.step.R
 import com.develop.step.databinding.ActivityModeDetailBinding
 import com.develop.step.viewmodel.ModesViewMode
 import com.drake.net.time.Interval
@@ -692,34 +690,9 @@ class ModesDetailActivity : CommonBVMActivity<ActivityModeDetailBinding, ModesVi
 
         //处理中途换换锅问题
         if (sdkDevMode != event.devInfo.devMode) {
-            Log.e("TAG 换锅","sdkDevMode: "+sdkDevMode + "   event.devInfo.devMode :"+event.devInfo.devMode)
-
-            //针对DIY处理
-            if (lastModeType== WorkModes.ADAPTED_COOKING||lastModeType==WorkModes.AF_DIY){
-                navigateTo(Screens.Cook.COOK_MODES) {
-                    if (DevModes.SOUP == CofarSDK.devInfo().devMode) {
-                        val bundle = Bundle()
-                        bundle.putString(MODE_TYPE, WorkModes.ADAPTED_COOKING)
-                        bundle.putString(
-                            "mode_name",
-                            resources.getString(com.develop.common.R.string.adapted_cooking)
-                        )
-                        with(bundle)
-                    } else {
-                        val bundle = Bundle()
-                        bundle.putString(MODE_TYPE, WorkModes.AF_DIY)
-                        with(bundle)
-                    }
-                }
-                finish()
-                return
-            }
-
-//            WorkModes.ADAPTED_COOKING //  WorkModes.AF_DIY
-            Log.e("TAG 11111","sdkDevMode: "+sdkDevMode + "   event.devInfo.devMode :"+event.devInfo.devMode)
+           return
         }
 
-
         ThreadUtils.runOnMainThread {
             currDevInfo = event.devInfo
             mRunningState = currDevInfo.runningStatus.toInt()
@@ -817,25 +790,8 @@ class ModesDetailActivity : CommonBVMActivity<ActivityModeDetailBinding, ModesVi
         }
 
 
-    }
-    private fun initDevMode() {
-        Log.e("TAG initDevMode","sdkDevMode: "+sdkDevMode + "   CofarSDK.devInfo().devMode :"+CofarSDK.devInfo().devMode)
-        binding.clCookTemp.visibility = View.GONE
-        binding.clTextView.visibility = View.GONE
-        binding.clCookTime.visibility = View.GONE
-        binding.clCookSpeed.visibility = View.GONE
-        binding.clCookDirection.visibility = View.GONE
-        binding.clCookWater.visibility = View.GONE
-        CofarSDK.changeDevModeFocus(sdkDevMode)
-        turnDevModeUI();
-//        初始化模式数据
-        initModeData(lastModeType)
-        initData()
-        changeCommonStep()
-
     }
 
-
     //======================================初始化数据和监听去==================================\\
 
     private fun initData() {
@@ -1905,7 +1861,6 @@ class ModesDetailActivity : CommonBVMActivity<ActivityModeDetailBinding, ModesVi
      */
     private fun startClick(showStopTips: Boolean = true) {
         var devInfo = CofarSDK.devInfo()
-        Log.e("TAG devInfo","devInfo:"+devInfo.toString())
         //判断是否是空炸错误,由于汤锅错误SDK 已经做了
         if (ConfigUtils.getBooleanErrCode(devInfo.errCode.toInt())){
             showErrCodeDialog(devInfo.errCode.toInt())
@@ -2320,6 +2275,7 @@ class ModesDetailActivity : CommonBVMActivity<ActivityModeDetailBinding, ModesVi
         if (errCodeStr.isNullOrEmpty()){
             return
         }
+        lastMsg = "e" + code + "_errCode"
         deviceStateDialog.showCancel = false
         deviceStateDialog.showConfirm = true
         deviceStateDialog.confirmStr = getString(com.develop.common.R.string.confirm)
@@ -2340,6 +2296,34 @@ class ModesDetailActivity : CommonBVMActivity<ActivityModeDetailBinding, ModesVi
             }
     }
 
+    //当换锅的时候,需要做的逻辑
+    @Subscribe
+    fun onDevModeChange(event: DevCommonEvent) {
+        //在当前页面,换了模式以后 重新启动
+        if (CommonEventTypes.DEV_MODE_CHANGE == event.type) {
+            //针对DIY处理
+            if (lastModeType== WorkModes.ADAPTED_COOKING||lastModeType==WorkModes.AF_DIY){
+                navigateTo(Screens.Cook.COOK_MODES) {
+                    if (DevModes.SOUP == CofarSDK.devInfo().devMode) {
+                        val bundle = Bundle()
+                        bundle.putString(MODE_TYPE, WorkModes.ADAPTED_COOKING)
+                        bundle.putString(
+                            "mode_name",
+                            resources.getString(com.develop.common.R.string.adapted_cooking)
+                        )
+                        with(bundle)
+                    } else {
+                        val bundle = Bundle()
+                        bundle.putString(MODE_TYPE, WorkModes.AF_DIY)
+                        with(bundle)
+                    }
+                }
+                finish()
+            }else{
+                finish()
+            }
+        }
+    }
 
 
 }

+ 138 - 21
BusinessStep/src/main/java/com/develop/step/ui/cook_step/CookStepActivity.kt

@@ -25,6 +25,8 @@ import com.develop.common.router.Screens
 import com.develop.common.widget.TimePickerView
 import com.develop.step.CookSettingType
 import com.develop.common.R
+import com.develop.common.bean.CfConfig
+import com.develop.common.bean.WorkMode
 import com.develop.common.data_repo.FoodDataProvider
 import com.develop.common.data_repo.db.ModesType
 import com.develop.common.data_repo.db.entity.UserFavoriteRecipes
@@ -35,11 +37,14 @@ import com.develop.common.event.CookStepEvent
 import com.develop.common.event.RefreshLikeDataEvent
 import com.develop.common.food_sdk.FloatWindowManager
 import com.develop.common.food_sdk.FoodSdkUtils
+import com.develop.common.food_sdk.GlobalDevEvent
 import com.develop.common.tag.CURRENT_USER_ID
+import com.develop.common.tag.MODE_TYPE
 import com.develop.common.tag.PRESS_DOWN_KEY_CODE
 import com.develop.common.tag.TURN_DOWN_KEY_CODE
 import com.develop.common.tag.TURN_UP_KEY_CODE
 import com.develop.common.utils.CofarUtils
+import com.develop.common.utils.ConfigUtils
 import com.develop.common.utils.TimeUtil
 import com.develop.step.ui.cook_step.model.CookStepStatus
 import com.develop.step.ui.cook_step.model.CookStepUiData
@@ -47,6 +52,7 @@ import com.drake.net.time.Interval
 import com.kuyuntech.cofarcooking.device.sdk.constant.core.*
 import com.kuyuntech.cofarcooking.device.sdk.eventbus.core.DevInfo
 import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevCommonEvent
+import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevStatusEvent
 import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
@@ -65,6 +71,8 @@ class CookStepActivity : CookStepBaseActivity() {
     private var potCloverStatus = 1 //锅盖是否盖上 0 是 1 否
     private var coverPath: Any? = null
     private var isFromOverWrite = false
+    private var configJson: CfConfig? = null
+    private var isSelectMode: String? = ""
 
     @JvmField
     @Autowired(name = "cook_step_detail")
@@ -84,11 +92,12 @@ class CookStepActivity : CookStepBaseActivity() {
     private var currTime = 0
     private var potCloverInterval: Interval? = null
     private var potCloverEleStatus = 0
-    private  var  photoPath:String? = ""
+    private var photoPath: String? = ""
     private var currentBgId = R.drawable.pot_clover_ele_unlock //0是开锁图,1上锁图
-    private fun turnDevModeUI() {
+    private fun turnDevModeUI(devMode: String?) {
+        isSelectMode = devMode
 
-        if (CofarSDK.devInfo().devMode == DevModes.AIR_FRYER) {
+        if (isSelectMode == DevModes.AIR_FRYER) {
             //隐藏点击
             binding.controller.clCookDirection.visibility = View.GONE;
             binding.controller.clCookSpeed.visibility = View.GONE;
@@ -98,11 +107,12 @@ class CookStepActivity : CookStepBaseActivity() {
             binding.controller.clTextView.visibility = View.INVISIBLE
         }
 
-        if (CofarSDK.devInfo().devMode == DevModes.SOUP) {
+        if (isSelectMode == DevModes.SOUP) {
             //隐藏点击
             binding.controller.clCookDirection.visibility = View.VISIBLE;
             binding.controller.clCookSpeed.visibility = View.VISIBLE;
             binding.controller.clCookWater.visibility = View.GONE
+            binding.controller.clTextView.visibility = View.GONE
 
         }
 
@@ -111,6 +121,9 @@ class CookStepActivity : CookStepBaseActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
+        //做食谱步骤判断
+        configJson = ConfigUtils.loadConfig()
+
         if (!isNightTheme()) {
             binding.viewChangeCrush.setBgColor(R.color.view_change)
             binding.viewChangeWeight.setBgColor(R.color.view_change)
@@ -264,7 +277,7 @@ class CookStepActivity : CookStepBaseActivity() {
         }
         initData()
         initStepData()
-        turnDevModeUI()
+
     }
 
     private fun initData() {
@@ -272,6 +285,7 @@ class CookStepActivity : CookStepBaseActivity() {
         viewModel.stepDisplay.observe(this) { it ->
             coverPath = FoodDataProvider.getImagePath(it.source.photoVideoFilePath)
             currModes = it.workMode
+            isSelectMode = currModes // 做弹窗记录
             if (it.workMode == "Final Step") {
                 binding.viewWeightClose1.setGone()
                 binding.viewWeightClose.setGone()
@@ -299,7 +313,7 @@ class CookStepActivity : CookStepBaseActivity() {
                     binding.ivNextStep.setVisible()
                 }
 
-                 photoPath = it.source.photoVideoFilePath;
+                photoPath = it.source.photoVideoFilePath;
                 if (photoPath == null || photoPath == "") {
                     photoPath = viewModel.recipe?.photoPath;
                 }
@@ -392,7 +406,7 @@ class CookStepActivity : CookStepBaseActivity() {
                     binding.ivPrevStep.setVisible()
                     binding.ivNextStep.setVisible()
                 }
-                 photoPath = it.source.photoVideoFilePath;
+                photoPath = it.source.photoVideoFilePath;
                 if (photoPath == null || photoPath == "") {
                     photoPath = viewModel.recipe?.photoPath;
                 }
@@ -421,11 +435,11 @@ class CookStepActivity : CookStepBaseActivity() {
                     if (CofarSDK.devInfo().runningInstId != null) {
                         val info = CofarSDK.devInfo().runningInstId.split(":");
                         val cookStepEvent = CookStepEvent(
-                           recipeNumber =  info[0],
-                           coverPath =  photoPath!!,
-                           step =   info[1].toInt(),
-                           isMode = false,
-                            modeName =  this@CookStepActivity.binding.tvTitleStep.text.toString()
+                            recipeNumber = info[0],
+                            coverPath = photoPath!!,
+                            step = info[1].toInt(),
+                            isMode = false,
+                            modeName = this@CookStepActivity.binding.tvTitleStep.text.toString()
 
 
                         )
@@ -457,7 +471,7 @@ class CookStepActivity : CookStepBaseActivity() {
                         coverPath as String,
                         viewModel.stepIndex,
                         isMode = false,
-                        modeName =  this@CookStepActivity.binding.tvTitleStep.text.toString()
+                        modeName = this@CookStepActivity.binding.tvTitleStep.text.toString()
                     )
                     FloatWindowManager.showStepFlowWindow(cookStepEvent)
                     recordRecipes()
@@ -540,8 +554,29 @@ class CookStepActivity : CookStepBaseActivity() {
 
                 }
             }
+
+            //没有食谱步骤
+            if (viewModel.allSteps.size == 0) {
+                finish()
+                return
+            }
+            var workModes: WorkMode? =
+                configJson?.workModes?.find { it.type == viewModel.allSteps[viewModel.stepIndex].workMode }
+                    ?: return
+            var workDevMode = workModes?.devMode
+            //由于菜谱内包含汤锅和空炸估做判断当前步骤是否是所需要得锅
+            if (workDevMode != CofarSDK.devInfo().devMode) {
+                GlobalDevEvent.msgDilaog(
+                    supportFragmentManager, getString(com.develop.common.R.string.step_pot_error),
+                    getString(com.develop.common.R.string.confirm), workDevMode
+                )
+            }
+
+            turnDevModeUI(workDevMode)
+
         }
 
+
     }
 
     override fun clickNextStep() {
@@ -612,16 +647,42 @@ class CookStepActivity : CookStepBaseActivity() {
         whereIndex = -1
         binding.controller.clSetTime.stopAlphaAnim()
         if (tag == BUTTON_TAG_START) {
-            if (CofarSDK.devInfo().potCloverStatus.toInt() == 1) {
-                showPotCloverDialog()
-            } else if (CofarSDK.devInfo().runningInstId != "${recipeNumber}:${viewModel.stepIndex}") {
-                overrideModeDialog.showDialog(supportFragmentManager, "overrideModeDialog")
+
+            isClickType = 1
+            //判断是否是空炸错误,由于汤锅错误SDK 已经做了 ;
+            if (ConfigUtils.getBooleanErrCode(CofarSDK.devInfo().errCode.toInt())) {
+                showErrCodeDialog(CofarSDK.devInfo().errCode.toInt())
             } else {
-                viewModel.displayStep()?.let {
-                    viewModel.setTargetCookingStep(it)
-                    configDataAndStart(it.uiData)
+                if (viewModel.allSteps.size == 0) {
+                    //没有菜谱步骤
+                    return
                 }
-                recordRecipes()
+                var workModes =
+                    configJson?.workModes?.find { it.type == viewModel.allSteps[viewModel.stepIndex].workMode }
+                var wrokDevMode = workModes?.devMode
+                //由于菜谱内包含汤锅和空炸估做判断当前步骤是否是所需要得锅
+                if (wrokDevMode != CofarSDK.devInfo().devMode) {
+                    GlobalDevEvent.msgDilaog(
+                        supportFragmentManager,
+                        getString(com.develop.common.R.string.step_pot_error),
+                        getString(com.develop.common.R.string.confirm),
+                        wrokDevMode
+                    )
+                } else {
+                    if (CofarSDK.devInfo().potCloverStatus.toInt() == 1) {
+                        showPotCloverDialog()
+                    } else if (CofarSDK.devInfo().runningInstId != "${recipeNumber}:${viewModel.stepIndex}") {
+                        overrideModeDialog.showDialog(supportFragmentManager, "overrideModeDialog")
+                    } else {
+                        viewModel.displayStep()?.let {
+                            viewModel.setTargetCookingStep(it)
+                            configDataAndStart(it.uiData)
+                        }
+                        recordRecipes()
+                    }
+                }
+
+
             }
         } else if (tag == BUTTON_TAG_PAUSE) {
             CofarSDK.pause()
@@ -632,6 +693,9 @@ class CookStepActivity : CookStepBaseActivity() {
             binding.controller.btnStart.setGone()
             binding.controller.btnReset.setGone()
         } else if (tag == BUTTON_TAG_STOP) {
+            //中途系统出现故障记录
+            isClickType = 0
+
             CofarSDK.stop(true)
         } else if (tag == BUTTON_TAG_RESET) {
             val current = viewModel.displayStep() ?: return
@@ -1186,6 +1250,7 @@ class CookStepActivity : CookStepBaseActivity() {
         return super.onKeyDown(keyCode, event)
     }
 
+
     /**
      * 所有步骤已经结束,展示结束页面
      */
@@ -1222,6 +1287,7 @@ class CookStepActivity : CookStepBaseActivity() {
 
     }
 
+
     /**
      * 根据UI状态刷新View
      */
@@ -1400,6 +1466,25 @@ class CookStepActivity : CookStepBaseActivity() {
         }, 500)
     }
 
+    @Subscribe
+    fun onDevStateEvent(event: DevStatusEvent) {
+        Log.d("TAG dddddd", "cook event:" + event.devInfo.toString())
+        //由于sdk没有判断E7到E16 需要判断运行和暂停过程中,设备发生故障弹出窗口告知故障
+        if (isClickType == DevStatus.RUNNING.toInt() || isClickType == DevStatus.PAUSE.toInt()) {
+            if (ConfigUtils.getBooleanErrCode(event.devInfo.errCode.toInt())) {
+                showErrCodeDialog(event.devInfo.errCode.toInt())
+                isClickType = event.devInfo.status
+                return
+            }
+        }
+
+        ThreadUtils.runOnMainThread {
+            runningState = event.devInfo.status.toInt()
+            onDevStateChange(event.devInfo)
+        }
+    }
+
+
     override fun finish() {
         super.finish()
         audioUtil.releaseMedia()
@@ -1424,4 +1509,36 @@ class CookStepActivity : CookStepBaseActivity() {
             }
         }
     }
+
+    //当换锅的时候,需要做的逻辑
+    @Subscribe
+    fun onDevModeChange(event: DevCommonEvent) {
+        //在当前页面,换了模式以后 重新启动
+        if (CommonEventTypes.DEV_MODE_CHANGE == event.type) {
+            //当步骤所需要的模式和换锅后的模式一致的时候,把弹窗删掉
+            if (isSelectMode == CofarSDK.devInfo().devMode) {
+                GlobalDevEvent.msgDialog.let {
+                    if (it.isShow && it.isAdded) {
+                        it.removeSelf()
+                    }
+                }
+            } else {
+                //处理正常步骤,但客户换锅的情况下
+                GlobalDevEvent.msgDialog.let {
+                    if (!it.isShow) {
+                        GlobalDevEvent.msgDilaog(
+                            supportFragmentManager,
+                            getString(com.develop.common.R.string.step_pot_error),
+                            getString(com.develop.common.R.string.confirm),
+                            CofarSDK.devInfo().devMode
+                        )
+                    }
+                }
+
+
+            }
+        }
+    }
+
+
 }

+ 35 - 8
BusinessStep/src/main/java/com/develop/step/ui/cook_step/CookStepBaseActivity.kt

@@ -35,9 +35,11 @@ import com.develop.common.data_repo.db.ModesType
 import com.develop.common.data_repo.db.entity.UserRecipeStepRemark
 import com.develop.common.dialog.NoteEditDialog
 import com.develop.common.tag.CURRENT_USER_ID
+import com.develop.common.utils.ConfigUtils
 import com.develop.common.widget.BCustomerLinearLayout
 import com.develop.step.databinding.ActivityCookStepBaseBinding
 import com.develop.step.viewmodel.CookStepViewModel
+import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevStatus
 import com.kuyuntech.cofarcooking.device.sdk.eventbus.core.DevInfo
 import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevStatusEvent
 import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
@@ -73,7 +75,11 @@ abstract class CookStepBaseActivity :
     val overrideModeDialog by lazy {
         CancelConfirmDialog()
     }
+    private val deviceStateDialog by lazy {
+        CancelConfirmDialog()
+    }
 
+    var isClickType = 0
     private var isCookDetailDialogShow = false
     private var rotateAnimator: ObjectAnimator? = null
     private var rotateAnimDir = -1
@@ -169,7 +175,7 @@ abstract class CookStepBaseActivity :
                 override fun onClear() {
                 }
 
-            };
+            }
             dialog.showDialog(supportFragmentManager, "NoteEditDialog")
         }
 
@@ -193,6 +199,7 @@ abstract class CookStepBaseActivity :
             showCookDetailDialog()
 
         }
+
         binding.ivNextStep.setOnClickListener {
             clickNextStep()
             viewModel.stepUiData.doingModify = false
@@ -600,13 +607,6 @@ abstract class CookStepBaseActivity :
         }
     }
 
-    @Subscribe
-    fun onDevStateEvent(event: DevStatusEvent) {
-        ThreadUtils.runOnMainThread {
-            runningState = event.devInfo.status.toInt()
-            onDevStateChange(event.devInfo)
-        }
-    }
 
     fun playRotateAnimator(direction: Int) {
         if (rotateAnimator == null) {
@@ -675,4 +675,31 @@ abstract class CookStepBaseActivity :
         const val BUTTON_TAG_CANCEL = "cancel"
         const val BUTTON_TAG_NEXT_STEP = "next"
     }
+
+    fun showErrCodeDialog(code: Int) {
+        var errCodeStr = ConfigUtils.getErrCodeStr(this, code)
+        if (errCodeStr.isNullOrEmpty()) {
+            return
+        }
+        lastMsg = "e" + code + "_errCode"
+        deviceStateDialog.showCancel = false
+        deviceStateDialog.showConfirm = true
+        deviceStateDialog.confirmStr = getString(com.develop.common.R.string.confirm)
+        deviceStateDialog.title = errCodeStr
+        deviceStateDialog.showDialog(supportFragmentManager, "errCodeCancelDialog")
+        deviceStateDialog.onDialogClickListener =
+            object : CancelConfirmDialog.OnDialogClickListener {
+                override fun onConfirm() {
+                    deviceStateDialog.removeSelf();
+                    lastMsg = "";
+                }
+
+                override fun onCancel() {
+                    deviceStateDialog.removeSelf();
+                    lastMsg = "";
+                }
+
+            }
+    }
+
 }

+ 20 - 1
BusinessStep/src/main/res/layout/activity_cook_step_base.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@color/bg_color">
@@ -71,7 +72,6 @@
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent" />
 
-
             <ImageView
                 android:id="@+id/view_note"
                 android:layout_width="@dimen/convert_50px"
@@ -96,7 +96,26 @@
                 android:background="@drawable/bg_cook_mask"
                 app:layout_constraintBottom_toBottomOf="parent" />
 
+            <LinearLayout
+                android:layout_width="@dimen/convert_200px"
+                android:layout_height="@dimen/convert_100px"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                tools:layout_editor_absoluteY="12dp"
+                android:orientation="horizontal"
+                android:visibility="gone"
+                >
+                <ImageView
+                    android:id="@+id/cook_iv_one"
+                    android:layout_width="@dimen/convert_60px"
+                    android:layout_height="@dimen/convert_50px"/>
+
+                <ImageView
+                    android:id="@+id/cook_iv_two"
+                    android:layout_width="@dimen/convert_60px"
+                    android:layout_height="@dimen/convert_50px"/>
 
+            </LinearLayout>
             <TextView
                 app:layout_constraintTop_toTopOf="parent"
                 android:id="@+id/tv_step_name"

+ 18 - 9
BusinessStep/src/main/res/layout/item_cook_controller.xml

@@ -189,7 +189,7 @@
 
     </FrameLayout>
 
-    <com.develop.common.ui.AdaptLinearLayout
+    <LinearLayout
         android:id="@+id/card_wrapper"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -203,7 +203,9 @@
             android:id="@+id/cl_cook_temp"
             android:layout_width="@dimen/convert_280px"
             android:layout_height="@dimen/convert_140px"
-            android:layout_marginEnd="@dimen/convert_24px">
+            android:layout_marginEnd="@dimen/convert_20px"
+
+            >
 
             <View
                 android:id="@+id/view_background_temp"
@@ -276,14 +278,14 @@
         <View
             android:visibility="gone"
             android:id="@+id/cl_text_view"
-            android:layout_marginEnd="@dimen/convert_24px"
+            android:layout_marginEnd="@dimen/convert_20px"
             android:layout_width="@dimen/convert_280px"
             android:layout_height="@dimen/convert_140px" />
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/cl_cook_time"
             android:layout_width="@dimen/convert_280px"
             android:layout_height="@dimen/convert_140px"
-            android:layout_marginEnd="@dimen/convert_24px">
+            android:layout_marginEnd="@dimen/convert_20px">
 
             <View
                 android:id="@+id/view_background_time"
@@ -344,9 +346,10 @@
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/cl_cook_speed"
+
             android:layout_width="@dimen/convert_280px"
             android:layout_height="@dimen/convert_140px"
-            android:layout_marginEnd="@dimen/convert_24px">
+            android:layout_marginEnd="@dimen/convert_20px">
 
             <View
                 android:id="@+id/view_background_speed"
@@ -396,7 +399,7 @@
             android:id="@+id/cl_cook_direction"
             android:layout_width="@dimen/convert_280px"
             android:layout_height="@dimen/convert_140px"
-            android:layout_marginEnd="@dimen/convert_24px">
+            android:layout_marginEnd="@dimen/convert_20px">
 
             <View
                 android:id="@+id/view_background_direction"
@@ -404,7 +407,7 @@
                 android:layout_height="match_parent"
                 android:background="@drawable/bg_cook_item_selected" />
 
-            <TextView
+            <com.develop.common.widget.MarqueeTextView
                 android:id="@+id/tv_set_direction"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -414,6 +417,11 @@
                 android:text="@string/turn_right"
                 android:textColor="@color/panel_unselected"
                 android:textSize="@dimen/convert_30px"
+                android:ellipsize="marquee"
+                android:focusable="true"
+                android:focusableInTouchMode="true"
+                android:marqueeRepeatLimit="marquee_forever"
+                android:singleLine="true"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintEnd_toEndOf="parent" />
 
@@ -444,13 +452,14 @@
         </androidx.constraintlayout.widget.ConstraintLayout>
 
         <com.develop.common.widget.CookCardView
+
             android:id="@+id/cl_cook_water"
             android:layout_width="@dimen/convert_280px"
             android:layout_height="@dimen/convert_140px"
-            android:layout_marginEnd="@dimen/convert_24px"
+            android:layout_marginEnd="@dimen/convert_20px"
             app:cardType="WATER_SPARY" />
 
-    </com.develop.common.ui.AdaptLinearLayout>
+    </LinearLayout>
 
 
     <TextView

+ 26 - 3
app/build.gradle

@@ -13,8 +13,8 @@ ext{
     versionCode=Integer.parseInt(new SimpleDateFormat("yyMMddHH").format(new Date()) + 1)
 //    versionCode=230617180
 //    brandCode="036I"
-    brandCode="010D"
-    model="5037"
+    brandCode="030A"
+    model="1039"
 
 }
 
@@ -69,6 +69,11 @@ android {
             applicationId "com.develop.foodcooking"
             buildConfigField("String", "UpdatePlatform", "\"normal\"")
             resValue("string", "app_theme", "@style/SplashTheme")
+            buildConfigField("String", "model", "\"1039\"")
+            buildConfigField("String", "brandCode", "\"000A\"")
+            //versionCode 1.01 指向bug修复,2.01指向功能变更
+            buildConfigField("String", "versionCode", "\"1.01\"")
+//            buildConfigField("String", "versionCode", "\"2.01\"")
         }
 
 
@@ -92,6 +97,17 @@ android {
             applicationId "com.develop.foodcooking"
             buildConfigField("String", "UpdatePlatform", "\"011A\"")
             resValue("string", "app_theme", "@style/Splash011ATheme")
+            buildConfigField("String", "model", "\"1039\"")
+            buildConfigField("String", "brandCode", "\"011A\"")
+
+        }
+        brand011A5037Tuya {
+            dimension "platform"
+            applicationId "com.develop.foodcooking"
+            buildConfigField("String", "UpdatePlatform", "\"011A\"")
+            resValue("string", "app_theme", "@style/Splash011A5037Theme")
+            buildConfigField("String", "model", "\"5037\"")
+            buildConfigField("String", "brandCode", "\"011A\"")
         }
 
 
@@ -240,8 +256,15 @@ android {
 //////            buildConfigField("String", "FLAVOR", "\"brand054ATuya\"")
 //            resValue("string", "app_theme", "@style/Splash054ATheme")
 
+//            buildConfigField("String", "UpdatePlatform", "\"011A\"")
+//            resValue("string", "app_theme", "@style/Splash011A5037Theme")
+//            buildConfigField("String", "model", "\"5037\"")
+//            buildConfigField("String", "brandCode", "\"011A\"")
+
+
             buildConfigField("String", "UpdatePlatform", "\"normal\"")
-            resValue("string", "app_theme", "@style/Splash029CTheme")
+            resValue("string", "app_theme", "@style/SplashTheme")
+            buildConfigField("String", "model", "\"1039\"")
         }
     }
 

+ 213 - 0
app/src/main/assets/help/PL/help-white-a.html

@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>The FAQ's</title>
+</head>
+
+<style>
+  * {
+    margin: 0;
+    padding: 0;
+  }
+
+  body {
+    background-color: #ffffff;
+    height: 100vh;
+    color: #000000;
+    padding: 12px;
+  }
+
+   p {
+      font-size: 26px;
+    }
+
+    h2 {
+      font-size: 40px;
+    }
+
+    h3 {
+      font-size: 30px;
+    }
+
+  .item {
+    margin-top: 14px;
+  }
+
+  .item h3 {
+    position: relative;
+  }
+
+  .item h3::after {
+    content: "";
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    border-top: 2px solid #000000;
+    border-right: 2px solid #000000;
+    transform: rotate(136deg);
+    margin-left: 14px;
+  }
+
+  .item p,
+  .item ul {
+    display: none;
+    margin-top: 8px;
+  }
+
+  .item:hover p,
+  .item:hover ul {
+    display: block;
+  }
+</style>
+
+<body>
+  <h2>The FAQ's</h2>
+  <div class="item">
+    <h3>The blade twisted from my first preparation.</h3>
+    <p>The blade is not damaged, you can see it by looking at its specific shape in your manual, it has a more curved
+      blade in order to better mix the ingredients.</p>
+  </div>
+
+  <div class="item">
+    <h3>Smoke comes out of the back of the device during the first use.</h3>
+    <p>This phenomenon is normal, the smoke comes from the windings of the engine which, being new, can give off smoke
+      and a slight smell of "hot plastic" during the first USES. This phenomenon will be mitigated and will disappear in
+      use./p>
+  </div>
+
+  <div class="item">
+    <h3>My robot no longer heats or does not rise to the requested temperature.</h3>
+    <p>After reserving the preparation and cooling the bowl, simply reset the thermal probe placed under the bowl by
+      pressing with your finger until you hear a "click".</p>
+  </div>
+
+  <div class="item">
+    <h3>Error message on screen during recipe process.</h3>
+    <p>The robot is equipped with safety devices to minimize the risk of engine overload (overflow or excessive
+      preparation). To solve this problem, please turn off the device and let it cool for approximately 20 to 30
+      minutes. Afterwards, the problem should be resolved. If you still see that the robot cooker cannot be opened,
+      please repeat the cooling process. If other methods do not work, please contact after-sales service.</p>
+  </div>
+
+  <div class="item">
+    <h3>The bowl is not fully placed in the base, or the lid is not in the locked position.</h3>
+    <p>Check if the accessory drive shaft is fully locked (at the top of the bowl).</p>
+  </div>
+
+  <div class="item">
+    <h3>Accessories: I lost the steam basket, lost the push rod, and broke the whip.</h3>
+    <p>Customers can purchase parts directly on the website , or place orders directly at the email address through POS
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>The lid is difficult to close.</h3>
+    <p>Oil the lid seal after each cleaning (e.g. lubricate fingers with vegetable oil and apply to the seal).</p>
+  </div>
+
+  <div class="item">
+    <h3>I am unable to connect to WiFi: the password is correct, close to the box.</h3>
+    <p>This issue stems from the WiFi security protocol used by the box. The box must use the latest protocol (WPA2),
+      and you must update the software of the box.</p>
+  </div>
+
+  <div class="item">
+    <h3>Do I need a WiFi connection to create a recipe ?</h3>
+    <p>No, WiFi connection is only used for recipe updates.</p>
+  </div>
+
+  <div class="item">
+    <h3>What temperature does my robot heat up to ?</h3>
+    <p>In manual mode, the robot can heat from 37 ° C to 130 ° C, and you can choose to change the temperature in
+      increments of 5 ° C. The temperature dial only displays the temperature of the formulation above 37 ° C..</p>
+    <p>*Some automatic recipes in can be cooked at 160 ° C, but manual mode is limited to 130 ° C.</p>
+  </div>
+
+  <div class="item">
+    <h3>What is the engine speed ?</h3>
+    <p>The speed can be adjusted from 1 to 12.</p>
+    <p>For safety reasons, the robot limits its speed to 3 during cooking activities.</p>
+  </div>
+
+
+  <div class="item">
+    <h3>How to clean my robot ?</h3>
+    <p>After turning off and unplugging the power cord, it is recommended to immediately rinse the bowl and accessories
+      with hot water after using the robot.</p>
+    <p>If there are burn marks on the bottom of the bowl, it is best to soak the inside of the bowl and occasionally rub
+      the bottom of the bowl with a sponge until the food peels off.</p>
+    <p>You can also start the cleaning program. </p>
+  </div>
+
+  <div class="item">
+    <h3>Can all accessories be dishwashers ?</h3>
+    <p>All accessories of the robot can be placed in the dishwasher (except for the engine block). </p>
+  </div>
+
+  <div class="item">
+    <h3>Some foods can cause plastic to change color. How to clean ?</h3>
+    <p>Some colored ingredients, such as curry, tomatoes, carrots, etc., can contaminate plastic parts, and this
+      coloring effect is not always avoidable. This color has no impact on your health or the functionality of the
+      accessory.
+      To reduce color, wipe the stained area with a cloth or tissue soaked in cooking oil and then perform regular
+      cleaning.</p>
+    <p>Cleaning must be carried out immediately after use to reduce staining.</p>
+    <p>Note: This issue is not covered by the warranty as it is an aesthetic issue, not a malfunction.</p>
+  </div>
+
+  <div class="item">
+    <h3>White spots appeared on the cooking cover. How to remove them ?</h3>
+    <p>These marks are tartar deposits generated by the use of limestone water during cooking. Anti scaling solution
+      should be used and the lid should be soaked for a sufficient time to soften the marks.</p>
+    <p>Please note that the longer the cooking time these stains take, the harder they become and the more difficult it
+      is to remove them. Therefore, we recommend removing them immediately upon detection.</p>
+  </div>
+
+  <div class="item">
+    <h3>How to clean food that burns and adheres to the bottom of the bowl ?</h3>
+    <p>There are several solutions, for example, you can put a bottom water and soak it in baking soda, lemon, or
+      dishwashing solution.</p>
+    <p>You can also heat some white vinegar water and a few drops of dishwashing liquid in a bowl, and let it sit for a
+      while before cleaning. If everything does not disappear, restart the operation.</p>
+    <p>A particularly effective tip is to put a dishwasher pellet and some hot water in it and let it soak for a while.
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>How to avoid food still adhering to the bowl on preparations that need to be cooked?</h3>
+    <p>Before starting cooking the recipe, we suggest using soaked absorbent paper to oil the bottom of the bowl. This
+      regular maintenance will prevent food from sticking to the bowl. For sugary preparations, use a little lemon juice
+      instead of oil</p>
+  </div>
+
+
+  <div class="item">
+    <h3>Incorrect mixing or incomplete cooking of ingredients</h3>
+    <p>This may be because the recipe in question may require more cooking time.
+      Although theoretically there is a clear cooking time for food in the recipe, the cooking time may vary due to
+      several factors :</p>
+    <ul>
+      <li>Food temperature during recipe ;;</li>
+      <li>If you don't take the ingredients out of the refrigerator and they're not at room temperature ;</li>
+      <li>Source and maturity of ingredients.</li>
+    </ul>
+  </div>
+
+  <div class="item">
+    <h3>I don't know how to heat pre prepared dishes.</h3>
+    <p>R : You must switch to manual mode and select temperature, duration, etc. based on the preparation to be
+      preheated.</p>
+  </div>
+
+  <div class="item">
+    <h3>Equipment overflow during cooking process.</h3>
+    <p>R : This phenomenon is due to the high temperature of the liquid and food in the bowl, which increases the
+      pressure inside the bowl and causes overflow. To avoid this situation, lower the temperature or use a large steam
+      basket with a glass lid instead of a cooking lid.</p>
+  </div>
+</body>
+
+</html>

+ 205 - 0
app/src/main/assets/help/PL/help-white.html

@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>The FAQ's</title>
+</head>
+
+<style>
+  * {
+    margin: 0;
+    padding: 0;
+  }
+
+  body {
+    background-color: #ffffff;
+    height: 100vh;
+    color: #000000;
+    padding: 12px;
+  }
+
+  p {
+    font-size: 14px;
+  }
+
+  .item {
+    margin-top: 14px;
+  }
+
+  .item h3 {
+    position: relative;
+  }
+
+  .item h3::after {
+    content: "";
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    border-top: 2px solid #000000;
+    border-right: 2px solid #000000;
+    transform: rotate(136deg);
+    margin-left: 14px;
+  }
+
+  .item p,
+  .item ul {
+    display: none;
+    margin-top: 8px;
+  }
+
+  .item:hover p,
+  .item:hover ul {
+    display: block;
+  }
+</style>
+
+<body>
+  <h2>The FAQ's</h2>
+  <div class="item">
+    <h3>The blade twisted from my first preparation.</h3>
+    <p>The blade is not damaged, you can see it by looking at its specific shape in your manual, it has a more curved
+      blade in order to better mix the ingredients.</p>
+  </div>
+
+  <div class="item">
+    <h3>Smoke comes out of the back of the device during the first use.</h3>
+    <p>This phenomenon is normal, the smoke comes from the windings of the engine which, being new, can give off smoke
+      and a slight smell of "hot plastic" during the first USES. This phenomenon will be mitigated and will disappear in
+      use./p>
+  </div>
+
+  <div class="item">
+    <h3>My robot no longer heats or does not rise to the requested temperature.</h3>
+    <p>After reserving the preparation and cooling the bowl, simply reset the thermal probe placed under the bowl by
+      pressing with your finger until you hear a "click".</p>
+  </div>
+
+  <div class="item">
+    <h3>Error message on screen during recipe process.</h3>
+    <p>The robot is equipped with safety devices to minimize the risk of engine overload (overflow or excessive
+      preparation). To solve this problem, please turn off the device and let it cool for approximately 20 to 30
+      minutes. Afterwards, the problem should be resolved. If you still see that the robot cooker cannot be opened,
+      please repeat the cooling process. If other methods do not work, please contact after-sales service.</p>
+  </div>
+
+  <div class="item">
+    <h3>The bowl is not fully placed in the base, or the lid is not in the locked position.</h3>
+    <p>Check if the accessory drive shaft is fully locked (at the top of the bowl).</p>
+  </div>
+
+  <div class="item">
+    <h3>Accessories: I lost the steam basket, lost the push rod, and broke the whip.</h3>
+    <p>Customers can purchase parts directly on the website , or place orders directly at the email address through POS
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>The lid is difficult to close.</h3>
+    <p>Oil the lid seal after each cleaning (e.g. lubricate fingers with vegetable oil and apply to the seal).</p>
+  </div>
+
+  <div class="item">
+    <h3>I am unable to connect to WiFi: the password is correct, close to the box.</h3>
+    <p>This issue stems from the WiFi security protocol used by the box. The box must use the latest protocol (WPA2),
+      and you must update the software of the box.</p>
+  </div>
+
+  <div class="item">
+    <h3>Do I need a WiFi connection to create a recipe ?</h3>
+    <p>No, WiFi connection is only used for recipe updates.</p>
+  </div>
+
+  <div class="item">
+    <h3>What temperature does my robot heat up to ?</h3>
+    <p>In manual mode, the robot can heat from 37 ° C to 130 ° C, and you can choose to change the temperature in
+      increments of 5 ° C. The temperature dial only displays the temperature of the formulation above 37 ° C..</p>
+    <p>*Some automatic recipes in can be cooked at 160 ° C, but manual mode is limited to 130 ° C.</p>
+  </div>
+
+  <div class="item">
+    <h3>What is the engine speed ?</h3>
+    <p>The speed can be adjusted from 1 to 12.</p>
+    <p>For safety reasons, the robot limits its speed to 3 during cooking activities.</p>
+  </div>
+
+
+  <div class="item">
+    <h3>How to clean my robot ?</h3>
+    <p>After turning off and unplugging the power cord, it is recommended to immediately rinse the bowl and accessories
+      with hot water after using the robot.</p>
+    <p>If there are burn marks on the bottom of the bowl, it is best to soak the inside of the bowl and occasionally rub
+      the bottom of the bowl with a sponge until the food peels off.</p>
+    <p>You can also start the cleaning program. </p>
+  </div>
+
+  <div class="item">
+    <h3>Can all accessories be dishwashers ?</h3>
+    <p>All accessories of the robot can be placed in the dishwasher (except for the engine block). </p>
+  </div>
+
+  <div class="item">
+    <h3>Some foods can cause plastic to change color. How to clean ?</h3>
+    <p>Some colored ingredients, such as curry, tomatoes, carrots, etc., can contaminate plastic parts, and this
+      coloring effect is not always avoidable. This color has no impact on your health or the functionality of the
+      accessory.
+      To reduce color, wipe the stained area with a cloth or tissue soaked in cooking oil and then perform regular
+      cleaning.</p>
+    <p>Cleaning must be carried out immediately after use to reduce staining.</p>
+    <p>Note: This issue is not covered by the warranty as it is an aesthetic issue, not a malfunction.</p>
+  </div>
+
+  <div class="item">
+    <h3>White spots appeared on the cooking cover. How to remove them ?</h3>
+    <p>These marks are tartar deposits generated by the use of limestone water during cooking. Anti scaling solution
+      should be used and the lid should be soaked for a sufficient time to soften the marks.</p>
+    <p>Please note that the longer the cooking time these stains take, the harder they become and the more difficult it
+      is to remove them. Therefore, we recommend removing them immediately upon detection.</p>
+  </div>
+
+  <div class="item">
+    <h3>How to clean food that burns and adheres to the bottom of the bowl ?</h3>
+    <p>There are several solutions, for example, you can put a bottom water and soak it in baking soda, lemon, or
+      dishwashing solution.</p>
+    <p>You can also heat some white vinegar water and a few drops of dishwashing liquid in a bowl, and let it sit for a
+      while before cleaning. If everything does not disappear, restart the operation.</p>
+    <p>A particularly effective tip is to put a dishwasher pellet and some hot water in it and let it soak for a while.
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>How to avoid food still adhering to the bowl on preparations that need to be cooked?</h3>
+    <p>Before starting cooking the recipe, we suggest using soaked absorbent paper to oil the bottom of the bowl. This
+      regular maintenance will prevent food from sticking to the bowl. For sugary preparations, use a little lemon juice
+      instead of oil</p>
+  </div>
+
+
+  <div class="item">
+    <h3>Incorrect mixing or incomplete cooking of ingredients</h3>
+    <p>This may be because the recipe in question may require more cooking time.
+      Although theoretically there is a clear cooking time for food in the recipe, the cooking time may vary due to
+      several factors :</p>
+    <ul>
+      <li>Food temperature during recipe ;;</li>
+      <li>If you don't take the ingredients out of the refrigerator and they're not at room temperature ;</li>
+      <li>Source and maturity of ingredients.</li>
+    </ul>
+  </div>
+
+  <div class="item">
+    <h3>I don't know how to heat pre prepared dishes.</h3>
+    <p>R : You must switch to manual mode and select temperature, duration, etc. based on the preparation to be
+      preheated.</p>
+  </div>
+
+  <div class="item">
+    <h3>Equipment overflow during cooking process.</h3>
+    <p>R : This phenomenon is due to the high temperature of the liquid and food in the bowl, which increases the
+      pressure inside the bowl and causes overflow. To avoid this situation, lower the temperature or use a large steam
+      basket with a glass lid instead of a cooking lid.</p>
+  </div>
+</body>
+
+</html>

+ 205 - 0
app/src/main/assets/help/PL/help.html

@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>帮助文件</title>
+</head>
+
+<style>
+  * {
+    margin: 0;
+    padding: 0;
+  }
+
+  body {
+    background-color: #000000;
+    height: 100vh;
+    color: #ffffff;
+    padding: 12px;
+  }
+
+  p {
+    font-size: 14px;
+  }
+
+  .item {
+    margin-top: 14px;
+  }
+
+  .item h3 {
+    position: relative;
+  }
+
+  .item h3::after {
+    content: "";
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    border-top: 2px solid #ffffff;
+    border-right: 2px solid #ffffff;
+    transform: rotate(136deg);
+    margin-left: 14px;
+  }
+
+  .item p,
+  .item ul {
+    display: none;
+    margin-top: 8px;
+  }
+
+  .item:hover p,
+  .item:hover ul {
+    display: block;
+  }
+</style>
+
+<body>
+  <h2>The FAQ's</h2>
+  <div class="item">
+    <h3>The blade twisted from my first preparation.</h3>
+    <p>The blade is not damaged, you can see it by looking at its specific shape in your manual, it has a more curved
+      blade in order to better mix the ingredients.</p>
+  </div>
+
+  <div class="item">
+    <h3>Smoke comes out of the back of the device during the first use.</h3>
+    <p>This phenomenon is normal, the smoke comes from the windings of the engine which, being new, can give off smoke
+      and a slight smell of "hot plastic" during the first USES. This phenomenon will be mitigated and will disappear in
+      use./p>
+  </div>
+
+  <div class="item">
+    <h3>My robot no longer heats or does not rise to the requested temperature.</h3>
+    <p>After reserving the preparation and cooling the bowl, simply reset the thermal probe placed under the bowl by
+      pressing with your finger until you hear a "click".</p>
+  </div>
+
+  <div class="item">
+    <h3>Error message on screen during recipe process.</h3>
+    <p>The robot is equipped with safety devices to minimize the risk of engine overload (overflow or excessive
+      preparation). To solve this problem, please turn off the device and let it cool for approximately 20 to 30
+      minutes. Afterwards, the problem should be resolved. If you still see that the robot cooker cannot be opened,
+      please repeat the cooling process. If other methods do not work, please contact after-sales service.</p>
+  </div>
+
+  <div class="item">
+    <h3>The bowl is not fully placed in the base, or the lid is not in the locked position.</h3>
+    <p>Check if the accessory drive shaft is fully locked (at the top of the bowl).</p>
+  </div>
+
+  <div class="item">
+    <h3>Accessories: I lost the steam basket, lost the push rod, and broke the whip.</h3>
+    <p>Customers can purchase parts directly on the website , or place orders directly at the email address through POS
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>The lid is difficult to close.</h3>
+    <p>Oil the lid seal after each cleaning (e.g. lubricate fingers with vegetable oil and apply to the seal).</p>
+  </div>
+
+  <div class="item">
+    <h3>I am unable to connect to WiFi: the password is correct, close to the box.</h3>
+    <p>This issue stems from the WiFi security protocol used by the box. The box must use the latest protocol (WPA2),
+      and you must update the software of the box.</p>
+  </div>
+
+  <div class="item">
+    <h3>Do I need a WiFi connection to create a recipe ?</h3>
+    <p>No, WiFi connection is only used for recipe updates.</p>
+  </div>
+
+  <div class="item">
+    <h3>What temperature does my robot heat up to ?</h3>
+    <p>In manual mode, the robot can heat from 37 ° C to 130 ° C, and you can choose to change the temperature in
+      increments of 5 ° C. The temperature dial only displays the temperature of the formulation above 37 ° C..</p>
+    <p>*Some automatic recipes in can be cooked at 160 ° C, but manual mode is limited to 130 ° C.</p>
+  </div>
+
+  <div class="item">
+    <h3>What is the engine speed ?</h3>
+    <p>The speed can be adjusted from 1 to 12.</p>
+    <p>For safety reasons, the robot limits its speed to 3 during cooking activities.</p>
+  </div>
+
+
+  <div class="item">
+    <h3>How to clean my robot ?</h3>
+    <p>After turning off and unplugging the power cord, it is recommended to immediately rinse the bowl and accessories
+      with hot water after using the robot.</p>
+    <p>If there are burn marks on the bottom of the bowl, it is best to soak the inside of the bowl and occasionally rub
+      the bottom of the bowl with a sponge until the food peels off.</p>
+    <p>You can also start the cleaning program. </p>
+  </div>
+
+  <div class="item">
+    <h3>Can all accessories be dishwashers ?</h3>
+    <p>All accessories of the robot can be placed in the dishwasher (except for the engine block). </p>
+  </div>
+
+  <div class="item">
+    <h3>Some foods can cause plastic to change color. How to clean ?</h3>
+    <p>Some colored ingredients, such as curry, tomatoes, carrots, etc., can contaminate plastic parts, and this
+      coloring effect is not always avoidable. This color has no impact on your health or the functionality of the
+      accessory.
+      To reduce color, wipe the stained area with a cloth or tissue soaked in cooking oil and then perform regular
+      cleaning.</p>
+    <p>Cleaning must be carried out immediately after use to reduce staining.</p>
+    <p>Note: This issue is not covered by the warranty as it is an aesthetic issue, not a malfunction.</p>
+  </div>
+
+  <div class="item">
+    <h3>White spots appeared on the cooking cover. How to remove them ?</h3>
+    <p>These marks are tartar deposits generated by the use of limestone water during cooking. Anti scaling solution
+      should be used and the lid should be soaked for a sufficient time to soften the marks.</p>
+    <p>Please note that the longer the cooking time these stains take, the harder they become and the more difficult it
+      is to remove them. Therefore, we recommend removing them immediately upon detection.</p>
+  </div>
+
+  <div class="item">
+    <h3>How to clean food that burns and adheres to the bottom of the bowl ?</h3>
+    <p>There are several solutions, for example, you can put a bottom water and soak it in baking soda, lemon, or
+      dishwashing solution.</p>
+    <p>You can also heat some white vinegar water and a few drops of dishwashing liquid in a bowl, and let it sit for a
+      while before cleaning. If everything does not disappear, restart the operation.</p>
+    <p>A particularly effective tip is to put a dishwasher pellet and some hot water in it and let it soak for a while.
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>How to avoid food still adhering to the bowl on preparations that need to be cooked?</h3>
+    <p>Before starting cooking the recipe, we suggest using soaked absorbent paper to oil the bottom of the bowl. This
+      regular maintenance will prevent food from sticking to the bowl. For sugary preparations, use a little lemon juice
+      instead of oil</p>
+  </div>
+
+
+  <div class="item">
+    <h3>Incorrect mixing or incomplete cooking of ingredients</h3>
+    <p>This may be because the recipe in question may require more cooking time.
+      Although theoretically there is a clear cooking time for food in the recipe, the cooking time may vary due to
+      several factors :</p>
+    <ul>
+      <li>Food temperature during recipe ;;</li>
+      <li>If you don't take the ingredients out of the refrigerator and they're not at room temperature ;</li>
+      <li>Source and maturity of ingredients.</li>
+    </ul>
+  </div>
+
+  <div class="item">
+    <h3>I don't know how to heat pre prepared dishes.</h3>
+    <p>R : You must switch to manual mode and select temperature, duration, etc. based on the preparation to be
+      preheated.</p>
+  </div>
+
+  <div class="item">
+    <h3>Equipment overflow during cooking process.</h3>
+    <p>R : This phenomenon is due to the high temperature of the liquid and food in the bowl, which increases the
+      pressure inside the bowl and causes overflow. To avoid this situation, lower the temperature or use a large steam
+      basket with a glass lid instead of a cooking lid.</p>
+  </div>
+</body>
+
+</html>

+ 68 - 0
app/src/main/assets/help/PL/privacy-a.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>MENTION INFORMATION</title>
+</head>
+<style>
+  body {
+    background-color: #ffffff;
+    height: 100vh;
+    color: #000000;
+  }
+
+  h3 {
+    font-size: 30px;
+  }
+
+  p {
+    font-size: 26px;
+  }
+</style>
+
+<body>
+
+  <div>
+
+    <h3>Mention the information to be included in the account creation form : </h3>
+    <p>Your data is handled by, which will create an account on our application to receive newsletters via email. </p>
+    <p>These treatments are based on your consent, and you may withdraw them at any time, but this does not affect the
+      legality of the treatments performed before the withdrawal. If you choose not to fill in the required data (with
+      an asterisk), you will not be able to create an account. Except for our subcontractors, your personal data will
+      not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the password reset form : </h3>
+    <p>Your data is processed by to reset your password. </p>
+    <p>This processing is based on our legal obligation to ensure the security of your data. If you choose not to fill
+      in the required data (with an asterisk), you will not be able to reset your password. Except for our
+      subcontractors, your personal data will not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the comment online form : </h3>
+    <p>Your data is processed by to post your comments.</p>
+    <p>This processing is based on your consent, and you may withdraw it at any time, but it does not affect the
+      legality of the processing conducted before the withdrawal. If you choose not to agree to collect mandatory data
+      (with an asterisk), you will not be able to comment. No personal data of yours will be passed on to third parties,
+      excluding our subcontractors.</p>
+    <p>We remind you that you should not mention any sensitive personal information in any comments that users may read.
+    </p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.
+      You also have the right to file a complaint with CNIL.</p>
+
+
+  </div>
+
+</body>
+
+</html>

+ 68 - 0
app/src/main/assets/help/PL/privacy.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>MENTION INFORMATION</title>
+</head>
+<style>
+  body {
+    background-color: #ffffff;
+    height: 100vh;
+    color: #000000;
+  }
+
+  h3 {
+    font-size: 26px;
+  }
+
+  p {
+    font-size: 16px;
+  }
+</style>
+
+<body>
+
+  <div>
+
+    <h3>Mention the information to be included in the account creation form : </h3>
+    <p>Your data is handled by, which will create an account on our application to receive newsletters via email. </p>
+    <p>These treatments are based on your consent, and you may withdraw them at any time, but this does not affect the
+      legality of the treatments performed before the withdrawal. If you choose not to fill in the required data (with
+      an asterisk), you will not be able to create an account. Except for our subcontractors, your personal data will
+      not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the password reset form : </h3>
+    <p>Your data is processed by to reset your password. </p>
+    <p>This processing is based on our legal obligation to ensure the security of your data. If you choose not to fill
+      in the required data (with an asterisk), you will not be able to reset your password. Except for our
+      subcontractors, your personal data will not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the comment online form : </h3>
+    <p>Your data is processed by to post your comments.</p>
+    <p>This processing is based on your consent, and you may withdraw it at any time, but it does not affect the
+      legality of the processing conducted before the withdrawal. If you choose not to agree to collect mandatory data
+      (with an asterisk), you will not be able to comment. No personal data of yours will be passed on to third parties,
+      excluding our subcontractors.</p>
+    <p>We remind you that you should not mention any sensitive personal information in any comments that users may read.
+    </p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.
+      You also have the right to file a complaint with CNIL.</p>
+
+
+  </div>
+
+</body>
+
+</html>

+ 68 - 0
app/src/main/assets/help/PL/privacy_night-a.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>MENTION INFORMATION</title>
+</head>
+<style>
+  body {
+    background-color: #000000;
+    height: 100vh;
+    color: #ffffff;
+  }
+
+  h3 {
+    font-size: 30px;
+  }
+
+  p {
+    font-size: 26px;
+  }
+</style>
+
+<body>
+
+  <div>
+
+    <h3>Mention the information to be included in the account creation form : </h3>
+    <p>Your data is handled by, which will create an account on our application to receive newsletters via email. </p>
+    <p>These treatments are based on your consent, and you may withdraw them at any time, but this does not affect the
+      legality of the treatments performed before the withdrawal. If you choose not to fill in the required data (with
+      an asterisk), you will not be able to create an account. Except for our subcontractors, your personal data will
+      not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the password reset form : </h3>
+    <p>Your data is processed by to reset your password. </p>
+    <p>This processing is based on our legal obligation to ensure the security of your data. If you choose not to fill
+      in the required data (with an asterisk), you will not be able to reset your password. Except for our
+      subcontractors, your personal data will not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the comment online form : </h3>
+    <p>Your data is processed by to post your comments.</p>
+    <p>This processing is based on your consent, and you may withdraw it at any time, but it does not affect the
+      legality of the processing conducted before the withdrawal. If you choose not to agree to collect mandatory data
+      (with an asterisk), you will not be able to comment. No personal data of yours will be passed on to third parties,
+      excluding our subcontractors.</p>
+    <p>We remind you that you should not mention any sensitive personal information in any comments that users may read.
+    </p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.
+      You also have the right to file a complaint with CNIL.</p>
+
+
+  </div>
+
+</body>
+
+</html>

+ 68 - 0
app/src/main/assets/help/PL/privacy_night.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>MENTION INFORMATION</title>
+</head>
+<style>
+  body {
+    background-color: #000000;
+    height: 100vh;
+    color: #ffffff;
+  }
+
+  h3 {
+    font-size: 26px;
+  }
+
+  p {
+    font-size: 16px;
+  }
+</style>
+
+<body>
+
+  <div>
+
+    <h3>Mention the information to be included in the account creation form : </h3>
+    <p>Your data is handled by, which will create an account on our application to receive newsletters via email. </p>
+    <p>These treatments are based on your consent, and you may withdraw them at any time, but this does not affect the
+      legality of the treatments performed before the withdrawal. If you choose not to fill in the required data (with
+      an asterisk), you will not be able to create an account. Except for our subcontractors, your personal data will
+      not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the password reset form : </h3>
+    <p>Your data is processed by to reset your password. </p>
+    <p>This processing is based on our legal obligation to ensure the security of your data. If you choose not to fill
+      in the required data (with an asterisk), you will not be able to reset your password. Except for our
+      subcontractors, your personal data will not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the comment online form : </h3>
+    <p>Your data is processed by to post your comments.</p>
+    <p>This processing is based on your consent, and you may withdraw it at any time, but it does not affect the
+      legality of the processing conducted before the withdrawal. If you choose not to agree to collect mandatory data
+      (with an asterisk), you will not be able to comment. No personal data of yours will be passed on to third parties,
+      excluding our subcontractors.</p>
+    <p>We remind you that you should not mention any sensitive personal information in any comments that users may read.
+    </p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.
+      You also have the right to file a complaint with CNIL.</p>
+
+
+  </div>
+
+</body>
+
+</html>

+ 213 - 0
app/src/main/assets/help/UK/help-white-a.html

@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>The FAQ's</title>
+</head>
+
+<style>
+  * {
+    margin: 0;
+    padding: 0;
+  }
+
+  body {
+    background-color: #ffffff;
+    height: 100vh;
+    color: #000000;
+    padding: 12px;
+  }
+
+   p {
+      font-size: 26px;
+    }
+
+    h2 {
+      font-size: 40px;
+    }
+
+    h3 {
+      font-size: 30px;
+    }
+
+  .item {
+    margin-top: 14px;
+  }
+
+  .item h3 {
+    position: relative;
+  }
+
+  .item h3::after {
+    content: "";
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    border-top: 2px solid #000000;
+    border-right: 2px solid #000000;
+    transform: rotate(136deg);
+    margin-left: 14px;
+  }
+
+  .item p,
+  .item ul {
+    display: none;
+    margin-top: 8px;
+  }
+
+  .item:hover p,
+  .item:hover ul {
+    display: block;
+  }
+</style>
+
+<body>
+  <h2>The FAQ's</h2>
+  <div class="item">
+    <h3>The blade twisted from my first preparation.</h3>
+    <p>The blade is not damaged, you can see it by looking at its specific shape in your manual, it has a more curved
+      blade in order to better mix the ingredients.</p>
+  </div>
+
+  <div class="item">
+    <h3>Smoke comes out of the back of the device during the first use.</h3>
+    <p>This phenomenon is normal, the smoke comes from the windings of the engine which, being new, can give off smoke
+      and a slight smell of "hot plastic" during the first USES. This phenomenon will be mitigated and will disappear in
+      use./p>
+  </div>
+
+  <div class="item">
+    <h3>My robot no longer heats or does not rise to the requested temperature.</h3>
+    <p>After reserving the preparation and cooling the bowl, simply reset the thermal probe placed under the bowl by
+      pressing with your finger until you hear a "click".</p>
+  </div>
+
+  <div class="item">
+    <h3>Error message on screen during recipe process.</h3>
+    <p>The robot is equipped with safety devices to minimize the risk of engine overload (overflow or excessive
+      preparation). To solve this problem, please turn off the device and let it cool for approximately 20 to 30
+      minutes. Afterwards, the problem should be resolved. If you still see that the robot cooker cannot be opened,
+      please repeat the cooling process. If other methods do not work, please contact after-sales service.</p>
+  </div>
+
+  <div class="item">
+    <h3>The bowl is not fully placed in the base, or the lid is not in the locked position.</h3>
+    <p>Check if the accessory drive shaft is fully locked (at the top of the bowl).</p>
+  </div>
+
+  <div class="item">
+    <h3>Accessories: I lost the steam basket, lost the push rod, and broke the whip.</h3>
+    <p>Customers can purchase parts directly on the website , or place orders directly at the email address through POS
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>The lid is difficult to close.</h3>
+    <p>Oil the lid seal after each cleaning (e.g. lubricate fingers with vegetable oil and apply to the seal).</p>
+  </div>
+
+  <div class="item">
+    <h3>I am unable to connect to WiFi: the password is correct, close to the box.</h3>
+    <p>This issue stems from the WiFi security protocol used by the box. The box must use the latest protocol (WPA2),
+      and you must update the software of the box.</p>
+  </div>
+
+  <div class="item">
+    <h3>Do I need a WiFi connection to create a recipe ?</h3>
+    <p>No, WiFi connection is only used for recipe updates.</p>
+  </div>
+
+  <div class="item">
+    <h3>What temperature does my robot heat up to ?</h3>
+    <p>In manual mode, the robot can heat from 37 ° C to 130 ° C, and you can choose to change the temperature in
+      increments of 5 ° C. The temperature dial only displays the temperature of the formulation above 37 ° C..</p>
+    <p>*Some automatic recipes in can be cooked at 160 ° C, but manual mode is limited to 130 ° C.</p>
+  </div>
+
+  <div class="item">
+    <h3>What is the engine speed ?</h3>
+    <p>The speed can be adjusted from 1 to 12.</p>
+    <p>For safety reasons, the robot limits its speed to 3 during cooking activities.</p>
+  </div>
+
+
+  <div class="item">
+    <h3>How to clean my robot ?</h3>
+    <p>After turning off and unplugging the power cord, it is recommended to immediately rinse the bowl and accessories
+      with hot water after using the robot.</p>
+    <p>If there are burn marks on the bottom of the bowl, it is best to soak the inside of the bowl and occasionally rub
+      the bottom of the bowl with a sponge until the food peels off.</p>
+    <p>You can also start the cleaning program. </p>
+  </div>
+
+  <div class="item">
+    <h3>Can all accessories be dishwashers ?</h3>
+    <p>All accessories of the robot can be placed in the dishwasher (except for the engine block). </p>
+  </div>
+
+  <div class="item">
+    <h3>Some foods can cause plastic to change color. How to clean ?</h3>
+    <p>Some colored ingredients, such as curry, tomatoes, carrots, etc., can contaminate plastic parts, and this
+      coloring effect is not always avoidable. This color has no impact on your health or the functionality of the
+      accessory.
+      To reduce color, wipe the stained area with a cloth or tissue soaked in cooking oil and then perform regular
+      cleaning.</p>
+    <p>Cleaning must be carried out immediately after use to reduce staining.</p>
+    <p>Note: This issue is not covered by the warranty as it is an aesthetic issue, not a malfunction.</p>
+  </div>
+
+  <div class="item">
+    <h3>White spots appeared on the cooking cover. How to remove them ?</h3>
+    <p>These marks are tartar deposits generated by the use of limestone water during cooking. Anti scaling solution
+      should be used and the lid should be soaked for a sufficient time to soften the marks.</p>
+    <p>Please note that the longer the cooking time these stains take, the harder they become and the more difficult it
+      is to remove them. Therefore, we recommend removing them immediately upon detection.</p>
+  </div>
+
+  <div class="item">
+    <h3>How to clean food that burns and adheres to the bottom of the bowl ?</h3>
+    <p>There are several solutions, for example, you can put a bottom water and soak it in baking soda, lemon, or
+      dishwashing solution.</p>
+    <p>You can also heat some white vinegar water and a few drops of dishwashing liquid in a bowl, and let it sit for a
+      while before cleaning. If everything does not disappear, restart the operation.</p>
+    <p>A particularly effective tip is to put a dishwasher pellet and some hot water in it and let it soak for a while.
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>How to avoid food still adhering to the bowl on preparations that need to be cooked?</h3>
+    <p>Before starting cooking the recipe, we suggest using soaked absorbent paper to oil the bottom of the bowl. This
+      regular maintenance will prevent food from sticking to the bowl. For sugary preparations, use a little lemon juice
+      instead of oil</p>
+  </div>
+
+
+  <div class="item">
+    <h3>Incorrect mixing or incomplete cooking of ingredients</h3>
+    <p>This may be because the recipe in question may require more cooking time.
+      Although theoretically there is a clear cooking time for food in the recipe, the cooking time may vary due to
+      several factors :</p>
+    <ul>
+      <li>Food temperature during recipe ;;</li>
+      <li>If you don't take the ingredients out of the refrigerator and they're not at room temperature ;</li>
+      <li>Source and maturity of ingredients.</li>
+    </ul>
+  </div>
+
+  <div class="item">
+    <h3>I don't know how to heat pre prepared dishes.</h3>
+    <p>R : You must switch to manual mode and select temperature, duration, etc. based on the preparation to be
+      preheated.</p>
+  </div>
+
+  <div class="item">
+    <h3>Equipment overflow during cooking process.</h3>
+    <p>R : This phenomenon is due to the high temperature of the liquid and food in the bowl, which increases the
+      pressure inside the bowl and causes overflow. To avoid this situation, lower the temperature or use a large steam
+      basket with a glass lid instead of a cooking lid.</p>
+  </div>
+</body>
+
+</html>

+ 205 - 0
app/src/main/assets/help/UK/help-white.html

@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>The FAQ's</title>
+</head>
+
+<style>
+  * {
+    margin: 0;
+    padding: 0;
+  }
+
+  body {
+    background-color: #ffffff;
+    height: 100vh;
+    color: #000000;
+    padding: 12px;
+  }
+
+  p {
+    font-size: 14px;
+  }
+
+  .item {
+    margin-top: 14px;
+  }
+
+  .item h3 {
+    position: relative;
+  }
+
+  .item h3::after {
+    content: "";
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    border-top: 2px solid #000000;
+    border-right: 2px solid #000000;
+    transform: rotate(136deg);
+    margin-left: 14px;
+  }
+
+  .item p,
+  .item ul {
+    display: none;
+    margin-top: 8px;
+  }
+
+  .item:hover p,
+  .item:hover ul {
+    display: block;
+  }
+</style>
+
+<body>
+  <h2>The FAQ's</h2>
+  <div class="item">
+    <h3>The blade twisted from my first preparation.</h3>
+    <p>The blade is not damaged, you can see it by looking at its specific shape in your manual, it has a more curved
+      blade in order to better mix the ingredients.</p>
+  </div>
+
+  <div class="item">
+    <h3>Smoke comes out of the back of the device during the first use.</h3>
+    <p>This phenomenon is normal, the smoke comes from the windings of the engine which, being new, can give off smoke
+      and a slight smell of "hot plastic" during the first USES. This phenomenon will be mitigated and will disappear in
+      use./p>
+  </div>
+
+  <div class="item">
+    <h3>My robot no longer heats or does not rise to the requested temperature.</h3>
+    <p>After reserving the preparation and cooling the bowl, simply reset the thermal probe placed under the bowl by
+      pressing with your finger until you hear a "click".</p>
+  </div>
+
+  <div class="item">
+    <h3>Error message on screen during recipe process.</h3>
+    <p>The robot is equipped with safety devices to minimize the risk of engine overload (overflow or excessive
+      preparation). To solve this problem, please turn off the device and let it cool for approximately 20 to 30
+      minutes. Afterwards, the problem should be resolved. If you still see that the robot cooker cannot be opened,
+      please repeat the cooling process. If other methods do not work, please contact after-sales service.</p>
+  </div>
+
+  <div class="item">
+    <h3>The bowl is not fully placed in the base, or the lid is not in the locked position.</h3>
+    <p>Check if the accessory drive shaft is fully locked (at the top of the bowl).</p>
+  </div>
+
+  <div class="item">
+    <h3>Accessories: I lost the steam basket, lost the push rod, and broke the whip.</h3>
+    <p>Customers can purchase parts directly on the website , or place orders directly at the email address through POS
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>The lid is difficult to close.</h3>
+    <p>Oil the lid seal after each cleaning (e.g. lubricate fingers with vegetable oil and apply to the seal).</p>
+  </div>
+
+  <div class="item">
+    <h3>I am unable to connect to WiFi: the password is correct, close to the box.</h3>
+    <p>This issue stems from the WiFi security protocol used by the box. The box must use the latest protocol (WPA2),
+      and you must update the software of the box.</p>
+  </div>
+
+  <div class="item">
+    <h3>Do I need a WiFi connection to create a recipe ?</h3>
+    <p>No, WiFi connection is only used for recipe updates.</p>
+  </div>
+
+  <div class="item">
+    <h3>What temperature does my robot heat up to ?</h3>
+    <p>In manual mode, the robot can heat from 37 ° C to 130 ° C, and you can choose to change the temperature in
+      increments of 5 ° C. The temperature dial only displays the temperature of the formulation above 37 ° C..</p>
+    <p>*Some automatic recipes in can be cooked at 160 ° C, but manual mode is limited to 130 ° C.</p>
+  </div>
+
+  <div class="item">
+    <h3>What is the engine speed ?</h3>
+    <p>The speed can be adjusted from 1 to 12.</p>
+    <p>For safety reasons, the robot limits its speed to 3 during cooking activities.</p>
+  </div>
+
+
+  <div class="item">
+    <h3>How to clean my robot ?</h3>
+    <p>After turning off and unplugging the power cord, it is recommended to immediately rinse the bowl and accessories
+      with hot water after using the robot.</p>
+    <p>If there are burn marks on the bottom of the bowl, it is best to soak the inside of the bowl and occasionally rub
+      the bottom of the bowl with a sponge until the food peels off.</p>
+    <p>You can also start the cleaning program. </p>
+  </div>
+
+  <div class="item">
+    <h3>Can all accessories be dishwashers ?</h3>
+    <p>All accessories of the robot can be placed in the dishwasher (except for the engine block). </p>
+  </div>
+
+  <div class="item">
+    <h3>Some foods can cause plastic to change color. How to clean ?</h3>
+    <p>Some colored ingredients, such as curry, tomatoes, carrots, etc., can contaminate plastic parts, and this
+      coloring effect is not always avoidable. This color has no impact on your health or the functionality of the
+      accessory.
+      To reduce color, wipe the stained area with a cloth or tissue soaked in cooking oil and then perform regular
+      cleaning.</p>
+    <p>Cleaning must be carried out immediately after use to reduce staining.</p>
+    <p>Note: This issue is not covered by the warranty as it is an aesthetic issue, not a malfunction.</p>
+  </div>
+
+  <div class="item">
+    <h3>White spots appeared on the cooking cover. How to remove them ?</h3>
+    <p>These marks are tartar deposits generated by the use of limestone water during cooking. Anti scaling solution
+      should be used and the lid should be soaked for a sufficient time to soften the marks.</p>
+    <p>Please note that the longer the cooking time these stains take, the harder they become and the more difficult it
+      is to remove them. Therefore, we recommend removing them immediately upon detection.</p>
+  </div>
+
+  <div class="item">
+    <h3>How to clean food that burns and adheres to the bottom of the bowl ?</h3>
+    <p>There are several solutions, for example, you can put a bottom water and soak it in baking soda, lemon, or
+      dishwashing solution.</p>
+    <p>You can also heat some white vinegar water and a few drops of dishwashing liquid in a bowl, and let it sit for a
+      while before cleaning. If everything does not disappear, restart the operation.</p>
+    <p>A particularly effective tip is to put a dishwasher pellet and some hot water in it and let it soak for a while.
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>How to avoid food still adhering to the bowl on preparations that need to be cooked?</h3>
+    <p>Before starting cooking the recipe, we suggest using soaked absorbent paper to oil the bottom of the bowl. This
+      regular maintenance will prevent food from sticking to the bowl. For sugary preparations, use a little lemon juice
+      instead of oil</p>
+  </div>
+
+
+  <div class="item">
+    <h3>Incorrect mixing or incomplete cooking of ingredients</h3>
+    <p>This may be because the recipe in question may require more cooking time.
+      Although theoretically there is a clear cooking time for food in the recipe, the cooking time may vary due to
+      several factors :</p>
+    <ul>
+      <li>Food temperature during recipe ;;</li>
+      <li>If you don't take the ingredients out of the refrigerator and they're not at room temperature ;</li>
+      <li>Source and maturity of ingredients.</li>
+    </ul>
+  </div>
+
+  <div class="item">
+    <h3>I don't know how to heat pre prepared dishes.</h3>
+    <p>R : You must switch to manual mode and select temperature, duration, etc. based on the preparation to be
+      preheated.</p>
+  </div>
+
+  <div class="item">
+    <h3>Equipment overflow during cooking process.</h3>
+    <p>R : This phenomenon is due to the high temperature of the liquid and food in the bowl, which increases the
+      pressure inside the bowl and causes overflow. To avoid this situation, lower the temperature or use a large steam
+      basket with a glass lid instead of a cooking lid.</p>
+  </div>
+</body>
+
+</html>

+ 205 - 0
app/src/main/assets/help/UK/help.html

@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>帮助文件</title>
+</head>
+
+<style>
+  * {
+    margin: 0;
+    padding: 0;
+  }
+
+  body {
+    background-color: #000000;
+    height: 100vh;
+    color: #ffffff;
+    padding: 12px;
+  }
+
+  p {
+    font-size: 14px;
+  }
+
+  .item {
+    margin-top: 14px;
+  }
+
+  .item h3 {
+    position: relative;
+  }
+
+  .item h3::after {
+    content: "";
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    border-top: 2px solid #ffffff;
+    border-right: 2px solid #ffffff;
+    transform: rotate(136deg);
+    margin-left: 14px;
+  }
+
+  .item p,
+  .item ul {
+    display: none;
+    margin-top: 8px;
+  }
+
+  .item:hover p,
+  .item:hover ul {
+    display: block;
+  }
+</style>
+
+<body>
+  <h2>The FAQ's</h2>
+  <div class="item">
+    <h3>The blade twisted from my first preparation.</h3>
+    <p>The blade is not damaged, you can see it by looking at its specific shape in your manual, it has a more curved
+      blade in order to better mix the ingredients.</p>
+  </div>
+
+  <div class="item">
+    <h3>Smoke comes out of the back of the device during the first use.</h3>
+    <p>This phenomenon is normal, the smoke comes from the windings of the engine which, being new, can give off smoke
+      and a slight smell of "hot plastic" during the first USES. This phenomenon will be mitigated and will disappear in
+      use./p>
+  </div>
+
+  <div class="item">
+    <h3>My robot no longer heats or does not rise to the requested temperature.</h3>
+    <p>After reserving the preparation and cooling the bowl, simply reset the thermal probe placed under the bowl by
+      pressing with your finger until you hear a "click".</p>
+  </div>
+
+  <div class="item">
+    <h3>Error message on screen during recipe process.</h3>
+    <p>The robot is equipped with safety devices to minimize the risk of engine overload (overflow or excessive
+      preparation). To solve this problem, please turn off the device and let it cool for approximately 20 to 30
+      minutes. Afterwards, the problem should be resolved. If you still see that the robot cooker cannot be opened,
+      please repeat the cooling process. If other methods do not work, please contact after-sales service.</p>
+  </div>
+
+  <div class="item">
+    <h3>The bowl is not fully placed in the base, or the lid is not in the locked position.</h3>
+    <p>Check if the accessory drive shaft is fully locked (at the top of the bowl).</p>
+  </div>
+
+  <div class="item">
+    <h3>Accessories: I lost the steam basket, lost the push rod, and broke the whip.</h3>
+    <p>Customers can purchase parts directly on the website , or place orders directly at the email address through POS
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>The lid is difficult to close.</h3>
+    <p>Oil the lid seal after each cleaning (e.g. lubricate fingers with vegetable oil and apply to the seal).</p>
+  </div>
+
+  <div class="item">
+    <h3>I am unable to connect to WiFi: the password is correct, close to the box.</h3>
+    <p>This issue stems from the WiFi security protocol used by the box. The box must use the latest protocol (WPA2),
+      and you must update the software of the box.</p>
+  </div>
+
+  <div class="item">
+    <h3>Do I need a WiFi connection to create a recipe ?</h3>
+    <p>No, WiFi connection is only used for recipe updates.</p>
+  </div>
+
+  <div class="item">
+    <h3>What temperature does my robot heat up to ?</h3>
+    <p>In manual mode, the robot can heat from 37 ° C to 130 ° C, and you can choose to change the temperature in
+      increments of 5 ° C. The temperature dial only displays the temperature of the formulation above 37 ° C..</p>
+    <p>*Some automatic recipes in can be cooked at 160 ° C, but manual mode is limited to 130 ° C.</p>
+  </div>
+
+  <div class="item">
+    <h3>What is the engine speed ?</h3>
+    <p>The speed can be adjusted from 1 to 12.</p>
+    <p>For safety reasons, the robot limits its speed to 3 during cooking activities.</p>
+  </div>
+
+
+  <div class="item">
+    <h3>How to clean my robot ?</h3>
+    <p>After turning off and unplugging the power cord, it is recommended to immediately rinse the bowl and accessories
+      with hot water after using the robot.</p>
+    <p>If there are burn marks on the bottom of the bowl, it is best to soak the inside of the bowl and occasionally rub
+      the bottom of the bowl with a sponge until the food peels off.</p>
+    <p>You can also start the cleaning program. </p>
+  </div>
+
+  <div class="item">
+    <h3>Can all accessories be dishwashers ?</h3>
+    <p>All accessories of the robot can be placed in the dishwasher (except for the engine block). </p>
+  </div>
+
+  <div class="item">
+    <h3>Some foods can cause plastic to change color. How to clean ?</h3>
+    <p>Some colored ingredients, such as curry, tomatoes, carrots, etc., can contaminate plastic parts, and this
+      coloring effect is not always avoidable. This color has no impact on your health or the functionality of the
+      accessory.
+      To reduce color, wipe the stained area with a cloth or tissue soaked in cooking oil and then perform regular
+      cleaning.</p>
+    <p>Cleaning must be carried out immediately after use to reduce staining.</p>
+    <p>Note: This issue is not covered by the warranty as it is an aesthetic issue, not a malfunction.</p>
+  </div>
+
+  <div class="item">
+    <h3>White spots appeared on the cooking cover. How to remove them ?</h3>
+    <p>These marks are tartar deposits generated by the use of limestone water during cooking. Anti scaling solution
+      should be used and the lid should be soaked for a sufficient time to soften the marks.</p>
+    <p>Please note that the longer the cooking time these stains take, the harder they become and the more difficult it
+      is to remove them. Therefore, we recommend removing them immediately upon detection.</p>
+  </div>
+
+  <div class="item">
+    <h3>How to clean food that burns and adheres to the bottom of the bowl ?</h3>
+    <p>There are several solutions, for example, you can put a bottom water and soak it in baking soda, lemon, or
+      dishwashing solution.</p>
+    <p>You can also heat some white vinegar water and a few drops of dishwashing liquid in a bowl, and let it sit for a
+      while before cleaning. If everything does not disappear, restart the operation.</p>
+    <p>A particularly effective tip is to put a dishwasher pellet and some hot water in it and let it soak for a while.
+    </p>
+  </div>
+
+  <div class="item">
+    <h3>How to avoid food still adhering to the bowl on preparations that need to be cooked?</h3>
+    <p>Before starting cooking the recipe, we suggest using soaked absorbent paper to oil the bottom of the bowl. This
+      regular maintenance will prevent food from sticking to the bowl. For sugary preparations, use a little lemon juice
+      instead of oil</p>
+  </div>
+
+
+  <div class="item">
+    <h3>Incorrect mixing or incomplete cooking of ingredients</h3>
+    <p>This may be because the recipe in question may require more cooking time.
+      Although theoretically there is a clear cooking time for food in the recipe, the cooking time may vary due to
+      several factors :</p>
+    <ul>
+      <li>Food temperature during recipe ;;</li>
+      <li>If you don't take the ingredients out of the refrigerator and they're not at room temperature ;</li>
+      <li>Source and maturity of ingredients.</li>
+    </ul>
+  </div>
+
+  <div class="item">
+    <h3>I don't know how to heat pre prepared dishes.</h3>
+    <p>R : You must switch to manual mode and select temperature, duration, etc. based on the preparation to be
+      preheated.</p>
+  </div>
+
+  <div class="item">
+    <h3>Equipment overflow during cooking process.</h3>
+    <p>R : This phenomenon is due to the high temperature of the liquid and food in the bowl, which increases the
+      pressure inside the bowl and causes overflow. To avoid this situation, lower the temperature or use a large steam
+      basket with a glass lid instead of a cooking lid.</p>
+  </div>
+</body>
+
+</html>

+ 68 - 0
app/src/main/assets/help/UK/privacy-a.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>MENTION INFORMATION</title>
+</head>
+<style>
+  body {
+    background-color: #ffffff;
+    height: 100vh;
+    color: #000000;
+  }
+
+  h3 {
+    font-size: 30px;
+  }
+
+  p {
+    font-size: 26px;
+  }
+</style>
+
+<body>
+
+  <div>
+
+    <h3>Mention the information to be included in the account creation form : </h3>
+    <p>Your data is handled by, which will create an account on our application to receive newsletters via email. </p>
+    <p>These treatments are based on your consent, and you may withdraw them at any time, but this does not affect the
+      legality of the treatments performed before the withdrawal. If you choose not to fill in the required data (with
+      an asterisk), you will not be able to create an account. Except for our subcontractors, your personal data will
+      not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the password reset form : </h3>
+    <p>Your data is processed by to reset your password. </p>
+    <p>This processing is based on our legal obligation to ensure the security of your data. If you choose not to fill
+      in the required data (with an asterisk), you will not be able to reset your password. Except for our
+      subcontractors, your personal data will not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the comment online form : </h3>
+    <p>Your data is processed by to post your comments.</p>
+    <p>This processing is based on your consent, and you may withdraw it at any time, but it does not affect the
+      legality of the processing conducted before the withdrawal. If you choose not to agree to collect mandatory data
+      (with an asterisk), you will not be able to comment. No personal data of yours will be passed on to third parties,
+      excluding our subcontractors.</p>
+    <p>We remind you that you should not mention any sensitive personal information in any comments that users may read.
+    </p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.
+      You also have the right to file a complaint with CNIL.</p>
+
+
+  </div>
+
+</body>
+
+</html>

+ 68 - 0
app/src/main/assets/help/UK/privacy.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>MENTION INFORMATION</title>
+</head>
+<style>
+  body {
+    background-color: #ffffff;
+    height: 100vh;
+    color: #000000;
+  }
+
+  h3 {
+    font-size: 26px;
+  }
+
+  p {
+    font-size: 16px;
+  }
+</style>
+
+<body>
+
+  <div>
+
+    <h3>Mention the information to be included in the account creation form : </h3>
+    <p>Your data is handled by, which will create an account on our application to receive newsletters via email. </p>
+    <p>These treatments are based on your consent, and you may withdraw them at any time, but this does not affect the
+      legality of the treatments performed before the withdrawal. If you choose not to fill in the required data (with
+      an asterisk), you will not be able to create an account. Except for our subcontractors, your personal data will
+      not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the password reset form : </h3>
+    <p>Your data is processed by to reset your password. </p>
+    <p>This processing is based on our legal obligation to ensure the security of your data. If you choose not to fill
+      in the required data (with an asterisk), you will not be able to reset your password. Except for our
+      subcontractors, your personal data will not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the comment online form : </h3>
+    <p>Your data is processed by to post your comments.</p>
+    <p>This processing is based on your consent, and you may withdraw it at any time, but it does not affect the
+      legality of the processing conducted before the withdrawal. If you choose not to agree to collect mandatory data
+      (with an asterisk), you will not be able to comment. No personal data of yours will be passed on to third parties,
+      excluding our subcontractors.</p>
+    <p>We remind you that you should not mention any sensitive personal information in any comments that users may read.
+    </p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.
+      You also have the right to file a complaint with CNIL.</p>
+
+
+  </div>
+
+</body>
+
+</html>

+ 68 - 0
app/src/main/assets/help/UK/privacy_night-a.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>MENTION INFORMATION</title>
+</head>
+<style>
+  body {
+    background-color: #000000;
+    height: 100vh;
+    color: #ffffff;
+  }
+
+  h3 {
+    font-size: 30px;
+  }
+
+  p {
+    font-size: 26px;
+  }
+</style>
+
+<body>
+
+  <div>
+
+    <h3>Mention the information to be included in the account creation form : </h3>
+    <p>Your data is handled by, which will create an account on our application to receive newsletters via email. </p>
+    <p>These treatments are based on your consent, and you may withdraw them at any time, but this does not affect the
+      legality of the treatments performed before the withdrawal. If you choose not to fill in the required data (with
+      an asterisk), you will not be able to create an account. Except for our subcontractors, your personal data will
+      not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the password reset form : </h3>
+    <p>Your data is processed by to reset your password. </p>
+    <p>This processing is based on our legal obligation to ensure the security of your data. If you choose not to fill
+      in the required data (with an asterisk), you will not be able to reset your password. Except for our
+      subcontractors, your personal data will not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the comment online form : </h3>
+    <p>Your data is processed by to post your comments.</p>
+    <p>This processing is based on your consent, and you may withdraw it at any time, but it does not affect the
+      legality of the processing conducted before the withdrawal. If you choose not to agree to collect mandatory data
+      (with an asterisk), you will not be able to comment. No personal data of yours will be passed on to third parties,
+      excluding our subcontractors.</p>
+    <p>We remind you that you should not mention any sensitive personal information in any comments that users may read.
+    </p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.
+      You also have the right to file a complaint with CNIL.</p>
+
+
+  </div>
+
+</body>
+
+</html>

+ 68 - 0
app/src/main/assets/help/UK/privacy_night.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <title>MENTION INFORMATION</title>
+</head>
+<style>
+  body {
+    background-color: #000000;
+    height: 100vh;
+    color: #ffffff;
+  }
+
+  h3 {
+    font-size: 26px;
+  }
+
+  p {
+    font-size: 16px;
+  }
+</style>
+
+<body>
+
+  <div>
+
+    <h3>Mention the information to be included in the account creation form : </h3>
+    <p>Your data is handled by, which will create an account on our application to receive newsletters via email. </p>
+    <p>These treatments are based on your consent, and you may withdraw them at any time, but this does not affect the
+      legality of the treatments performed before the withdrawal. If you choose not to fill in the required data (with
+      an asterisk), you will not be able to create an account. Except for our subcontractors, your personal data will
+      not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the password reset form : </h3>
+    <p>Your data is processed by to reset your password. </p>
+    <p>This processing is based on our legal obligation to ensure the security of your data. If you choose not to fill
+      in the required data (with an asterisk), you will not be able to reset your password. Except for our
+      subcontractors, your personal data will not be transmitted to third parties.</p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.</p>
+    <p>You also have the right to file a complaint with CNIL .</p>
+
+    <h3>Mention the information to be included in the comment online form : </h3>
+    <p>Your data is processed by to post your comments.</p>
+    <p>This processing is based on your consent, and you may withdraw it at any time, but it does not affect the
+      legality of the processing conducted before the withdrawal. If you choose not to agree to collect mandatory data
+      (with an asterisk), you will not be able to comment. No personal data of yours will be passed on to third parties,
+      excluding our subcontractors.</p>
+    <p>We remind you that you should not mention any sensitive personal information in any comments that users may read.
+    </p>
+    <p>You have the right to request access, correction, portability, and/or deletion of your personal data by , and
+      have the right to restrict its processing, oppose its processing, be not bound by automatic decision-making, and
+      have the right to determine the fate of your posthumous data.
+      You also have the right to file a complaint with CNIL.</p>
+
+
+  </div>
+
+</body>
+
+</html>

+ 1 - 0
app/src/main/java/com/develop/foodcooking/FoodCookingApp.kt

@@ -27,6 +27,7 @@ import com.develop.common.data_repo.net.converter.SerializationConverter
 import com.develop.common.data_repo.net.interceptor.FoodRequestInterceptor
 import com.develop.common.food_sdk.GlobalDevEvent
 import com.develop.common.food_sdk.SerialPortUtils
+import com.develop.common.tag.MODEL
 import com.develop.common.utils.TuyaUtils
 import com.develop.common.utils.compat.RecyclerViewCompat
 import com.develop.common.utils.compat.ShapeableImageViewCompat

+ 30 - 3
libBase/src/main/java/com/develop/base/ext/GlobaExt.kt

@@ -1,6 +1,7 @@
 package com.develop.base.ext
 
 import android.Manifest
+import android.R
 import android.app.Application
 import android.content.Context
 import android.content.pm.PackageManager
@@ -13,6 +14,7 @@ import android.net.wifi.WifiManager
 import android.os.Build
 import android.text.TextUtils
 import android.util.Patterns
+import android.util.TypedValue
 import android.widget.ImageView
 import androidx.annotation.DimenRes
 import androidx.core.app.ActivityCompat
@@ -30,6 +32,7 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull
 import okhttp3.MultipartBody
 import okhttp3.RequestBody
 import okhttp3.RequestBody.Companion.toRequestBody
+import java.io.ByteArrayOutputStream
 import java.io.File
 import java.io.IOException
 import java.io.InputStream
@@ -38,6 +41,7 @@ import java.text.SimpleDateFormat
 import java.util.*
 import java.util.regex.Pattern
 
+
 fun globalApp(): Application = BaseApp.application
 
 fun globalRes(): Resources = globalApp().resources
@@ -180,6 +184,17 @@ fun getBrandNum(): String {
     return getSN().substring(0, 3)
 }
 
+/**
+ * 获取模式
+ * @return
+ */
+fun getModelNum(): String {
+    if (getSN().length<9){
+        return "1039"
+    }
+    return getSN().substring(4, 8)
+}
+
 /**
  * 获取SN
  * @return
@@ -188,12 +203,14 @@ fun getSN(): String {
     var serial: String
 
     if (BuildConfig.DEBUG) {
-        return "045A21030020123010190001"
+//        return "045A21030020123010190001"
 //    return "000A30150020123010190001"
 //     return "002A30150020123010190001"
 //     return "000A10390020123010190001"
+//        return "000A50370020123010190005"
 //    return "010D10390020123010190001"
-//    return "011A30150020123010190001"
+//    return "011A50370020123010190001"
+//        return "011A50370020123010190001"
 //    return "007D20020020123010190001"
 //    return "036I21060020123010190003"
 //    return  "030A10390020123010190001"
@@ -202,7 +219,7 @@ fun getSN(): String {
 //    return "000A10390020123010190009"
 //    return  "032D21060020123010190001"
 //        return "000A50370020123010190011"
-//    return  "030A10390020123010190002"
+    return  "030A10390020123010190002"
 //        return "029C21010020123010190001"
     } else {
         //通过反射获取sn号
@@ -230,6 +247,16 @@ fun ImageView.load(data: Any?) {
         .into(this)
 }
 
+fun ImageView.loadGif(data: Int) {
+    Glide.with(this.context)
+        .asGif().load(data)
+        .diskCacheStrategy(DiskCacheStrategy.DATA)
+        .override(240,200)
+        .into(this)
+
+
+}
+
 fun ImageView.load(data: Any?, width: Int, height: Int) {
     Glide.with(this.context)
         .asDrawable()

+ 52 - 6
libBase/src/main/java/com/develop/base/manager/WifiHelp.kt

@@ -19,9 +19,10 @@ class WifiHelp {
     private var mBuild: Build? = null
     protected var mWiFiChangeReceiver: WiFiChangeReceiver? = WiFiChangeReceiver()
     private var timeDownUtil: TimeDownUtil? = null
+    private val mapWifi = mutableMapOf<String, Int>() //存wifi重连次数
+    private var currWifiSSID = ""
     private fun init(build: Build) {
-        mWifiManager =
-            build.mContext?.applicationContext?.getSystemService(Context.WIFI_SERVICE) as WifiManager
+        mWifiManager = build.mContext?.applicationContext?.getSystemService(Context.WIFI_SERVICE) as WifiManager
         mBuild = build
         build.mContext?.let {
             registerReceiver(it)
@@ -129,6 +130,7 @@ class WifiHelp {
     fun connectNew(wifiData: WifiData, password: String, isSaveType: Boolean = false) {
 //        removeAllWifi()
 //        mWifiManager.disconnect()
+        currWifiSSID = wifiData.ssid
         disconnect()
         val configurationList = mWifiManager.configuredNetworks //已经保存密码的WiFi
         val isSave = configurationList.any {
@@ -240,6 +242,18 @@ class WifiHelp {
         }
     }
 
+    fun removeSaveSSIDWifi(ssid: String) {
+        val wifiConfigurationList = mWifiManager.configuredNetworks
+        for (item in wifiConfigurationList) {
+            if (item.SSID == addQuotationMarks(ssid)) {
+                mWifiManager.disconnect()
+                mWifiManager.removeNetwork(item.networkId)
+                mWifiManager.saveConfiguration()
+                // mWifiManager.reconnect()
+            }
+        }
+    }
+
     @SuppressLint("MissingPermission")
     fun removeAllWifi() {
         val wifiConfigurationList = mWifiManager.configuredNetworks
@@ -337,6 +351,10 @@ class WifiHelp {
             //在频繁的切换WiFi与重连WiFi底层会返回 unknown ssid, 这里将其排除掉
             return null
         }
+        if (getStringId(wifiInfo.ipAddress)!="0.0.0.0"){
+            //处理重连问题有时候会重连 已成功num会往上涨 估要重新设置为0
+            mapWifi[removeQuotationMarks(wifiInfo.ssid)] = 0
+        }
         return WifiData(
             wifiInfo.networkId,
             removeQuotationMarks(wifiInfo.ssid),
@@ -559,24 +577,47 @@ class WifiHelp {
                 }
                 if (networkInfo.detailedState == NetworkInfo.DetailedState.DISCONNECTED) {
                     mBuild?.mErrorAuthenticating?.invoke("failed to connect")
-                    println("WifiHelp DetailedState.DISCONNECTED: ")
+
+                    println("WifiHelp DetailedState.DISCONNECTED: ssid:$currWifiSSID     num:${mapWifi[currWifiSSID]}")
+
+                    if (currWifiSSID==""){
+                        return
+                    }
+                    if (mapWifi[currWifiSSID] != null) {
+                        mapWifi[currWifiSSID] = mapWifi[currWifiSSID]!! +1
+                    }else{
+                        mapWifi[currWifiSSID] = 0
+                    }
+                    //判断重连次数删除wifi
+                    if (mapWifi[currWifiSSID]!!>8){
+                        mapWifi[currWifiSSID] = 0
+                        println("WifiHelp DetailedState.removeSaveSSIDWifi: ssid:$currWifiSSID")
+                        removeSaveSSIDWifi(currWifiSSID)
+                        return
+                    }
                     /**
                      * 之前由于save连接也会走这个回调,固然添加isSavePwd判断不走删除WiFi,
                      * 当第一次连接的时候,会导致密码正确,但isSavaPwd 返回false,固加多个password 不为空的情况下,也不清除
                      * */
                     currWifiData?.apply {
+
                         println("WifiHelp DetailedState.DISCONNECTED: isSavePwd-->"+this.isSavePwd+" password:"+this.password)
                         if (this.isSavePwd||this.password.isNotEmpty()) {
                         } else {
                             removeSaveWifi(this)
                         }
+
                     }
                 }
+
+                if (networkInfo.detailedState == NetworkInfo.DetailedState.BLOCKED){
+                    println("WifiHelp DetailedState.BLOCKED: BLOCKEDBLOCKEDBLOCKED")
+                }
                 if (networkInfo.detailedState == NetworkInfo.DetailedState.FAILED) {
                     mBuild?.mErrorAuthenticating?.invoke("failed to connect")
                     println("WifiHelp DetailedState.FAILED: FAILED FAILED FAILED-->")
-                    currWifiData?.apply {
-                        removeSaveWifi(this)
+                    currWifiSSID?.apply {
+                        removeSaveSSIDWifi(this)
                     }
                 }
             }
@@ -612,7 +653,8 @@ class WifiHelp {
         val configurationList = mWifiManager.configuredNetworks //已经保存密码的WiFi
         if (configurationList.isNotEmpty()) {
             configurationList.forEach {
-                connectSavedWiFi(removeQuotationMarks(it.SSID))
+                currWifiSSID = removeQuotationMarks(it.SSID)
+                connectSavedWiFi(currWifiSSID)
             }
         }
 
@@ -654,7 +696,11 @@ class WifiHelp {
      */
     fun connectSavedWiFi(ssids: String) {
         val config = getWiFiConfig(ssids)
+        config.let {
+
+        }
         config?.networkId?.let {
+
             mWifiManager.enableNetwork(it, true)
         }
         mWifiManager.saveConfiguration()

+ 7 - 0
libBase/src/main/java/com/develop/base/mvvm/BaseFragment.kt

@@ -13,6 +13,7 @@ import com.develop.base.scop.runOnMainThread
 
 open class BaseFragment : Fragment() {
     lateinit var hostActivity: AppCompatActivity
+    private var isCanShowing = true
 
     override fun onAttach(context: Context) {
         super.onAttach(context)
@@ -20,6 +21,12 @@ open class BaseFragment : Fragment() {
     }
 
 
+    override fun onResume() {
+        super.onResume()
+        isCanShowing  = isVisible
+    }
+
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         //是否拦截back事件,默认不拦截

BIN
libThirdPart/libs/cofar-cooking-device-sdk-0.0.1-SNAPSHOT.jar